মার্জ বাছাই: অ্যালগরিদম, সুবিধা এবং বৈশিষ্ট্য

সুচিপত্র:

মার্জ বাছাই: অ্যালগরিদম, সুবিধা এবং বৈশিষ্ট্য
মার্জ বাছাই: অ্যালগরিদম, সুবিধা এবং বৈশিষ্ট্য
Anonim

Merge sort হল কম্পিউটার বিজ্ঞানের মৌলিক অ্যালগরিদমগুলির মধ্যে একটি, যা 1945 সালে মহান গণিতবিদ জন ভন নিউম্যান দ্বারা তৈরি করা হয়েছিল৷ ম্যানহাটন প্রজেক্টে অংশগ্রহণ করার সময়, নিউম্যানকে বিপুল পরিমাণ ডেটা দক্ষতার সাথে প্রক্রিয়া করার প্রয়োজনীয়তার সম্মুখীন হয়েছিল। তিনি যে পদ্ধতিটি তৈরি করেছিলেন তাতে "বিভাজন করুন এবং জয় করুন" নীতিটি ব্যবহার করা হয়েছিল, যা কাজের জন্য প্রয়োজনীয় সময়কে উল্লেখযোগ্যভাবে হ্রাস করেছিল৷

অ্যালগরিদমের নীতি ও ব্যবহার

একত্রীকরণ বাছাই পদ্ধতিটি সাজানোর কাঠামোর সমস্যাগুলিতে ব্যবহৃত হয় যা অ্যারে, তালিকা, স্ট্রিমের মতো উপাদানগুলিতে অ্যাক্সেসের আদেশ দিয়েছে৷

প্রসেসিংয়ের সময়, প্রাথমিক ডেটা ব্লকটি ছোট ছোট উপাদানে বিভক্ত হয়, একটি উপাদান পর্যন্ত, যা আসলে ইতিমধ্যেই একটি সাজানো তালিকা। তারপর এটি সঠিক ক্রমে পুনরায় একত্রিত হয়।

মার্জ সাজান
মার্জ সাজান

একটি নির্দিষ্ট দৈর্ঘ্যের অ্যারে সাজানোর জন্য একই আকারের একটি অতিরিক্ত মেমরি এলাকা প্রয়োজন, যেখানে সাজানো অ্যারে অংশে সংগ্রহ করা হয়।

যেকোন তুলনামূলক ডেটা টাইপ যেমন নম্বর বা স্ট্রিং অর্ডার করতে পদ্ধতিটি ব্যবহার করা যেতে পারে।

মার্জ সাজানো হয়েছেপ্লট

অ্যালগরিদম বোঝার জন্য, শেষ থেকে এর বিশ্লেষণ শুরু করা যাক - সাজানো ব্লক একত্রিত করার প্রক্রিয়া থেকে।

আসুন কল্পনা করা যাক যে আমাদের কাছে দুটি অ্যারে সংখ্যা বাছাই করা আছে যেগুলি একে অপরের সাথে একত্রিত করা দরকার যাতে বাছাইটি ভেঙে না যায়। সরলতার জন্য, আমরা সংখ্যাগুলোকে ক্রমবর্ধমান ক্রমে সাজাব।

প্রাথমিক উদাহরণ: উভয় অ্যারে প্রতিটি একটি উপাদান নিয়ে গঠিত।


int arr1={31}; int arr2={18};

এগুলিকে একত্রিত করতে, আপনাকে প্রথম অ্যারের শূন্য উপাদান নিতে হবে (ভুলে যাবেন না যে সংখ্যা শূন্য থেকে শুরু হয়) এবং দ্বিতীয় অ্যারের শূন্য উপাদান। এগুলি যথাক্রমে, 31 এবং 18৷ সাজানোর শর্ত অনুসারে, 18 নম্বরটি প্রথমে আসা উচিত, যেহেতু এটি কম। শুধু সঠিক ক্রমে নম্বর রাখুন:


int ফলাফল={18, 31};

আসুন একটি আরও জটিল উদাহরণ দেখি, যেখানে প্রতিটি অ্যারে বিভিন্ন উপাদান নিয়ে গঠিত:


int arr1={2, 17, 19, 45}; int arr2={5, 6, 21, 30};

একত্রীকরণ অ্যালগরিদমটি ক্রমানুসারে ছোট উপাদানগুলির তুলনা করে এবং সঠিক ক্রমে ফলাফলের অ্যারেতে স্থাপন করে। বর্তমান সূচকগুলির ট্র্যাক রাখতে, আসুন দুটি ভেরিয়েবল প্রবর্তন করি - index1 এবং index2। প্রাথমিকভাবে, আমরা সেগুলিকে শূন্যে সেট করি, যেহেতু অ্যারেগুলি সাজানো হয়েছে, এবং ক্ষুদ্রতম উপাদানগুলি শুরুতে রয়েছে৷


int index1=0; int index2=0;

আসুন ধাপে ধাপে পুরো মার্জিং প্রক্রিয়াটি লিখি:

  1. অ্যারে অ্যারের 1 থেকে সূচক 1 সহ উপাদানটি এবং অ্যারে অ্যারে2 থেকে সূচক 2 সহ উপাদানটি নিন।
  2. তুলনা করুন, তাদের মধ্যে সবচেয়ে ছোটটি নির্বাচন করুন এবং রাখুনফলস্বরূপ অ্যারে।
  3. ছোট উপাদানটির বর্তমান সূচক 1 দ্বারা বৃদ্ধি করুন।
  4. প্রথম ধাপ থেকে চালিয়ে যান।
অর্ডার করা অ্যারে একত্রিত করা
অর্ডার করা অ্যারে একত্রিত করা

প্রথম কক্ষপথে পরিস্থিতি এরকম দেখাবে:


index1=0; index2=0; arr1[0]=2; arr2[0]=5; arr1[0] < arr2[0]; index1++; ফলাফল[0]=arr1[0]; // ফলাফল=[2]

দ্বিতীয় মোড়ে:


index1=1; index2=0; arr1[1]=17; arr2[0]=5; arr1[1] > arr2[0]; index2++; ফলাফল[1]=arr2[0]; // ফলাফল=[2, 5]

তৃতীয়:


index1=1; index2=1; arr1[1]=17; arr2[1]=6; arr1[1] > arr2[1]; index2++; ফলাফল[2]=arr2[1]; // ফলাফল=[2, 5, 6]

এবং আরও, যতক্ষণ না ফলাফল সম্পূর্ণভাবে সাজানো অ্যারে হয়: {2, 5, 6, 17, 21, 19, 30, 45}।

বিভিন্ন দৈর্ঘ্যের অ্যারে একত্রিত হলে কিছু অসুবিধা দেখা দিতে পারে। যদি বর্তমান সূচীগুলির মধ্যে একটি শেষ উপাদানে পৌঁছে যায় এবং দ্বিতীয় অ্যারেতে এখনও সদস্য অবশিষ্ট থাকে তাহলে কী হবে?


int arr1={1, 4}; int arr2={2, 5, 6, 7, 9}; // 1 ধাপ index1=0, index2=0; 1 2 ফলাফল={1, 2}; // 3 ধাপ সূচক 1=1, সূচক 2=1; 4 < 5 ফলাফল={1, 2, 4}; //4 ধাপ সূচক 1=2, সূচক 2=1 ??

index1 ভেরিয়েবলটি মান 2 এ পৌঁছেছে, কিন্তু arr1 অ্যারেতে সেই সূচকের সাথে একটি উপাদান নেই। এখানে সবকিছুই সহজ: শুধুমাত্র দ্বিতীয় অ্যারের অবশিষ্ট উপাদানগুলিকে ফলাফলে স্থানান্তর করুন, তাদের অর্ডার সংরক্ষণ করুন।


ফলাফল={1, 2, 4, 5, 6, 7, 9};

এই পরিস্থিতি আমাদের প্রয়োজনীয়তা নির্দেশ করেমার্জ করা অ্যারের দৈর্ঘ্যের সাথে বর্তমান চেক ইনডেক্সের সাথে মেলে।

বিভিন্ন দৈর্ঘ্যের অর্ডারকৃত সিকোয়েন্সের (A এবং B) জন্য মার্জ স্কিম:

  • যদি উভয় সিকোয়েন্সের দৈর্ঘ্য 0-এর বেশি হয়, A[0] এবং B[0] তুলনা করুন এবং ছোটটিকে বাফারে নিয়ে যান।
  • যদি একটি সিকোয়েন্সের দৈর্ঘ্য 0 হয়, দ্বিতীয় ক্রমটির অবশিষ্ট উপাদানগুলি নিন এবং তাদের ক্রম পরিবর্তন না করে, বাফারের শেষে যান৷

দ্বিতীয় পর্যায়ের বাস্তবায়ন

জাভাতে দুটি সাজানো অ্যারেতে যোগদানের একটি উদাহরণ নীচে দেওয়া হল৷


int a1=new int {21, 23, 24, 40, 75, 76, 78, 77, 900, 2100, 2200, 2300, 2400, 2500}; int a2=new int {10, 11, 41, 50, 65, 86, 98, 101, 190, 1100, 1200, 3000, 5000}; int a3=নতুন int[a1.length + a2.length]; int i=0, j=0; জন্য (int k=0; k a1.length-1) { int a=a2[j]; a3[k]=a; j++; } অন্যথায় যদি (j > a2.length-1) { int a=a1; a3[k]=a; i++; } অন্যথায় যদি (a1 < a2[j]) { int a=a1; a3[k]=a; i++; } অন্য { int b=a2[j]; a3[k]=b; j++; } }

এখানে:

  • a1 এবং a2 হল মূল সাজানো অ্যারে যা মার্জ করা হবে;
  • a3 - চূড়ান্ত অ্যারে;
  • i এবং j হল a1 এবং a2 এর জন্য বর্তমান উপাদানগুলির সূচী৷

প্রথম এবং দ্বিতীয় যদি শর্তগুলি নিশ্চিত করে যে সূচীগুলি অ্যারের আকারের বাইরে না যায়। তৃতীয় এবং চতুর্থ শর্ত ব্লকগুলি, যথাক্রমে, ছোট উপাদানের ফলের অ্যারেতে সরানো হয়৷

বাছাই স্ট্রিং মার্জ
বাছাই স্ট্রিং মার্জ

ভাগ করুন এবং জয় করুন

সুতরাং, আমরা সাজানোকে মার্জ করতে শিখেছিমান সংগ্রহ। এটা বলা যেতে পারে যে মার্জ সর্ট অ্যালগরিদমের দ্বিতীয় অংশ - মার্জ নিজেই - ইতিমধ্যে সাজানো হয়েছে৷

তবে, আপনাকে এখনও বুঝতে হবে কিভাবে সংখ্যার মূল ক্রমবিহীন বিন্যাস থেকে একাধিক সাজানো সংখ্যায় যাবেন যা মার্জ করা যেতে পারে।

আসুন অ্যালগরিদমের প্রথম পর্যায়টি বিবেচনা করি এবং অ্যারেগুলিকে কীভাবে আলাদা করতে হয় তা শিখি।

এটি কঠিন নয় - মানের মূল তালিকা অর্ধেক বিভক্ত করা হয়, তারপর প্রতিটি অংশকেও বিভক্ত করা হয় এবং খুব ছোট ব্লক না পাওয়া পর্যন্ত চলতে থাকে।

এই ধরনের ন্যূনতম উপাদানগুলির দৈর্ঘ্য একের সমান হতে পারে, অর্থাৎ, তারা নিজেরাই একটি সাজানো অ্যারে হতে পারে, তবে এটি একটি প্রয়োজনীয় শর্ত নয়। ব্লকের আকার আগে থেকেই নির্ধারণ করা হয়, এবং যেকোনো উপযুক্ত সাজানোর অ্যালগরিদম যা ছোট আকারের অ্যারেগুলির সাথে দক্ষতার সাথে কাজ করে (উদাহরণস্বরূপ, কুইকসর্ট বা সন্নিবেশ সাজানোর) অর্ডার করতে ব্যবহার করা যেতে পারে৷

এটা এরকম দেখাচ্ছে।


// আসল অ্যারে {34, 95, 10, 2, 102, 70}; // প্রথম বিভক্ত {34, 95, 10} এবং {2, 102, 70}; // সেকেন্ড বিভক্ত {34} এবং {95, 10} এবং {2} এবং {102, 70}

1-2টি উপাদান সমন্বিত ফলস্বরূপ ব্লকগুলি সাজানো খুব সহজ৷

তারপর, আপনাকে ইতিমধ্যেই সাজানো ছোট অ্যারেগুলিকে জোড়ায় জোড়ায় একত্র করতে হবে, সদস্যদের ক্রম সংরক্ষণ করতে হবে, যা আমরা ইতিমধ্যেই শিখেছি।

মার্জ করে একটি অ্যারে সাজানোর স্কিম
মার্জ করে একটি অ্যারে সাজানোর স্কিম

প্রথম পর্যায়ের বাস্তবায়ন

একটি অ্যারের পুনরাবৃত্ত পার্টিশন নীচে দেখানো হয়েছে৷


অকার্যকর একত্রিতকরণ (Ta, দীর্ঘ শুরু, দীর্ঘ সমাপ্তি) { দীর্ঘ বিভক্ত; যদি(স্টার্ট < ফিনিস) { স্প্লিট=(স্টার্ট + ফিনিস)/2; mergeSort(a, start, split); মার্জসর্ট(a, split+1, finish); মার্জ (a, শুরু, বিভক্ত, শেষ); } }

এই কোডে কি হবে:

  1. mergeSort ফাংশনটি প্রারম্ভিক অ্যারে পায়

    a

    এবং অঞ্চলের বাম এবং ডান সীমানাগুলি সাজানোর জন্য (সূচকগুলি শুরু এবং

  2. সমাপ্তি).
  3. যদি এই বিভাগের দৈর্ঘ্য একের বেশি হয় (

    শুরু < শেষ

    ), তাহলে এটি দুটি ভাগে বিভক্ত হয় (সূচী অনুসারে

  4. বিভক্ত), এবং প্রত্যেকটি পুনরাবৃত্তিমূলকভাবে সাজানো হয়েছে।
  5. বাম দিকের জন্য রিকার্সিভ ফাংশন কলে, প্লটের প্রারম্ভিক সূচী এবং সূচক

    বিভক্ত

    পাস হয়। সঠিকটির জন্য, যথাক্রমে, শুরুটি হবে

  6. (বিভক্ত + 1), এবং শেষটি হবে মূল বিভাগের শেষ সূচক।
  7. ফাংশন

    মার্জন

    দুটি ক্রমানুযায়ী (

    a[শুরু]…a[বিভক্ত]

    এবং

  8. a[বিভক্ত +1]…a[সম্পন্ন) এবং সাজানোর ক্রমে তাদের মার্জ করে।

মার্জ ফাংশনের মেকানিক্স উপরে আলোচনা করা হয়েছে৷

অ্যালগরিদমের সাধারণ স্কিম

মার্জ সর্ট অ্যারে পদ্ধতিতে দুটি বড় ধাপ রয়েছে:

  • অবাছাই করা আসল অ্যারেকে ছোট ছোট টুকরো করে বিভক্ত করুন।
  • বাছাই নিয়ম অনুসরণ করে জোড়ায় জোড়ায় তাদের সংগ্রহ করুন।

একটি বৃহৎ এবং জটিল কাজকে অনেকগুলি সহজে বিভক্ত করা হয়, যা পর্যায়ক্রমে সমাধান করা হয়, যা পছন্দসই ফলাফলের দিকে নিয়ে যায়।

সাজানোর অ্যালগরিদম মার্জ করুন
সাজানোর অ্যালগরিদম মার্জ করুন

পদ্ধতি মূল্যায়ন

মার্জ সাজানোর সময় জটিলতা বিভক্ত গাছের উচ্চতা দ্বারা নির্ধারিত হয়অ্যালগরিদম এবং অ্যারের উপাদানের সংখ্যার সমান (n) এর লগারিদমের (লগ n) গুণ। এই ধরনের অনুমানকে লগারিদমিক বলা হয়।

এটি পদ্ধতির একটি সুবিধা এবং অসুবিধা উভয়ই। আসল অ্যারে বিপরীত ক্রমে সাজানো হলে এর চলমান সময় সবচেয়ে খারাপ ক্ষেত্রেও পরিবর্তিত হয় না। যাইহোক, সম্পূর্ণভাবে সাজানো ডেটা প্রক্রিয়া করার সময়, অ্যালগরিদম সময় লাভ দেয় না।

এটি মার্জ বাছাই পদ্ধতির মেমরি খরচ নোট করাও গুরুত্বপূর্ণ। এগুলি মূল সংগ্রহের আকারের সমান। এই অতিরিক্ত বরাদ্দকৃত এলাকায়, টুকরা থেকে একটি সাজানো অ্যারে একত্রিত হয়।

অ্যালগরিদমের বাস্তবায়ন

পাসকেল মার্জ বাছাই নীচে দেখানো হয়েছে৷


প্রক্রিয়া মার্জসোর্ট(নাম: স্ট্রিং; var f: পাঠ্য); Var a1, a2, s, i, j, kol, tmp: integer; f1, f2: পাঠ্য; b: বুলিয়ান বিগিনকল:=0; বরাদ্দ (f, নাম); রিসেট(f); EOF(f) না হলেও পড়া শুরু করবেন(f, a1); inc(col); শেষ; বন্ধ (f); বরাদ্দ (f1, '{1ম সহায়ক ফাইলের নাম}'); বরাদ্দ (f2, '{2য় সহায়ক ফাইলের নাম}'); s:=1; যখন (s<kol) রিসেট (f); পুনরায় লিখুন(f1); পুনরায় লিখুন(f2); i:=1 থেকে kol div 2 এর জন্য Read(f, a1); লিখুন (f1, a1, ''); শেষ; যদি (kol div 2) mod s0 হয় তাহলে শুরু করুন tmp:=kol div 2; tmp mod s0 শুরু করার সময় Read(f, a1); লিখুন (f1, a1, ''); inc(tmp); শেষ; শেষ; EOF(f) না হলেও Read(f, a2); লিখুন (f2, a2, ''); শেষ; বন্ধ (f); বন্ধ (f1); বন্ধ (f2); পুনর্লিখন(f); পুনরায় সেট করুন(f1); রিসেট(f2); পড়ুন(f1, a1); পড়ুন(f2, a2); যখন (EOF(f1) নয়) এবং (EOF(f2) নয়) শুরু হয় i:=0; j:=0; b:=সত্য; যখন (b) এবং (EOF(f1) নয়) এবং (EOF(f2) নয়) শুরু হয় যদি (a1<a2) তাহলে শুরু হয়লিখুন (f, a1, ''); পড়ুন(f1, a1); inc(i); শেষ অন্যথা শুরু লিখুন (f, a2, ''); পড়ুন(f2, a2); inc(j); শেষ; যদি (i=s) বা (j=s) তাহলে b:=false; শেষ; যদি b না হয় তবে শুরু করুন (i<s) এবং (EOF(f1) নয়) লিখতে শুরু করুন(f, a1, ''); পড়ুন(f1, a1); inc(i); শেষ; যখন (j<s) এবং (EOF(f2) নয়) লিখতে শুরু করে (f, a2, ' '); পড়ুন(f2, a2); inc(j); শেষ; শেষ; শেষ; EOF(f1) না হলেও শুরু করুন tmp:=a1; পড়ুন(f1, a1); EOF(f1) না হলে লিখুন(f, tmp, ' ') অন্যথা লিখুন(f, tmp); শেষ; EOF(f2) না হলেও শুরু করুন tmp:=a2; পড়ুন(f2, a2); EOF(f2) না হলে লিখুন(f, tmp, ' ') অন্যথা লিখুন(f, tmp); শেষ; বন্ধ (f); বন্ধ (f1); বন্ধ (f2); s:=s2; শেষ; মুছে ফেলুন(f1); মুছে ফেলা (f2); শেষ;

দৃষ্টিগতভাবে, অ্যালগরিদমের ক্রিয়াকলাপটি এইরকম দেখায় (শীর্ষ - ক্রমবিন্যস্ত ক্রম, নীচে - আদেশযুক্ত)।

সন্নিবেশ সাজানোর ভিজ্যুয়ালাইজেশন
সন্নিবেশ সাজানোর ভিজ্যুয়ালাইজেশন

বাহ্যিক ডেটা বাছাই

খুব প্রায়ই কম্পিউটারের বাহ্যিক মেমরিতে অবস্থিত কিছু ডেটা বাছাই করার প্রয়োজন হয়। কিছু ক্ষেত্রে, তারা চিত্তাকর্ষক আকারের হয় এবং তাদের অ্যাক্সেসের সুবিধার্থে RAM এ স্থাপন করা যায় না। এই ধরনের ক্ষেত্রে, বহিরাগত বাছাই পদ্ধতি ব্যবহার করা হয়৷

বাহ্যিক মিডিয়া অ্যাক্সেস করার প্রয়োজন প্রক্রিয়াকরণের সময় দক্ষতা হ্রাস করে।

কাজের জটিলতা হল যে অ্যালগরিদম একবারে ডেটা স্ট্রিমের শুধুমাত্র একটি উপাদান অ্যাক্সেস করতে পারে। এবং এই ক্ষেত্রে, সর্বোত্তম ফলাফলগুলির মধ্যে একটি মার্জ বাছাই পদ্ধতি দ্বারা দেখানো হয়, যা দুটি ফাইলের উপাদানগুলিকে ক্রমানুসারে একের পর এক তুলনা করতে পারে৷

থেকে ডেটা পড়াবাহ্যিক উত্স, তাদের প্রক্রিয়াকরণ এবং চূড়ান্ত ফাইলে লেখা অর্ডারকৃত ব্লকে (সিরিজ) সঞ্চালিত হয়। অর্ডারকৃত সিরিজের আকারের সাথে কাজ করার পদ্ধতি অনুসারে, দুটি ধরণের বাছাই করা হয়: সহজ এবং প্রাকৃতিক একত্রীকরণ।

বহিরাগত মার্জ সাজানোর
বহিরাগত মার্জ সাজানোর

সরল একত্রীকরণ

একটি সাধারণ মার্জ দিয়ে, সিরিজের দৈর্ঘ্য স্থির করা হয়েছে।

এইভাবে, মূল সাজানো ফাইলে, সমস্ত সিরিজ একটি উপাদান নিয়ে গঠিত। প্রথম ধাপের পরে, আকার দুটি বৃদ্ধি পায়। পরবর্তী - 4, 8, 16 এবং আরও অনেক কিছু৷

এটি এভাবে কাজ করে:

  1. সোর্স ফাইলটি (f) দুটি সহায়ক ফাইলে বিভক্ত - f1, f2।
  2. এগুলি আবার একটি ফাইলে একত্রিত হয় (f), কিন্তু একই সময়ে সমস্ত উপাদান জোড়া এবং ফর্ম জোড়ায় তুলনা করা হয়। এই ধাপে সিরিজের আকার দুই হয়ে যায়।
  3. ধাপ 1 পুনরাবৃত্তি করা হয়েছে।
  4. ধাপ 2 পুনরাবৃত্তি করা হয়েছে, কিন্তু ইতিমধ্যে অর্ডার করা 2গুলিকে সাজানো 4s তৈরিতে একত্রিত করা হয়েছে৷
  5. লুপটি চলতে থাকে, প্রতিটি পুনরাবৃত্তিতে সিরিজ বৃদ্ধি করে, যতক্ষণ না পুরো ফাইলটি সাজানো হয়।

আপনি কিভাবে জানেন যে একটি সাধারণ মার্জ সহ বাইরের সাজানো সম্পূর্ণ হয়েছে?

  • নতুন সিরিজের দৈর্ঘ্য (একত্রীকরণের পরে) মোট উপাদান সংখ্যার কম নয়;
  • মাত্র একটি পর্ব বাকি;
  • সহায়ক ফাইল f2 খালি রাখা হয়েছিল।

একটি সাধারণ একত্রিত হওয়ার অসুবিধাগুলি হল: যেহেতু প্রতিটি মার্জ পাসে রানের দৈর্ঘ্য স্থির করা হয়েছে, আংশিকভাবে অর্ডার করা ডেটা সম্পূর্ণরূপে র্যান্ডম ডেটা হিসাবে প্রক্রিয়া করতে ততক্ষণ সময় নেবে৷

প্রাকৃতিক লয়

এই পদ্ধতিটি দৈর্ঘ্য সীমাবদ্ধ করে নাসিরিজ, কিন্তু সর্বোচ্চ সম্ভাব্য বেছে নেয়।

বাছাই অ্যালগরিদম:

  1. ফাইল f থেকে প্রাথমিক ক্রম পড়া। প্রথম প্রাপ্ত উপাদান f1 ফাইলে লেখা হয়।
  2. যদি পরবর্তী এন্ট্রিটি সাজানোর শর্তকে সন্তুষ্ট করে, এটি সেখানে লেখা হয়, যদি না হয়, তাহলে দ্বিতীয় সহায়ক ফাইল f2-তে লেখা হয়।
  3. এইভাবে, সোর্স ফাইলের সমস্ত রেকর্ড বিতরণ করা হয়, এবং একটি ক্রমানুসারে f1 গঠিত হয়, যা সিরিজের বর্তমান আকার নির্ধারণ করে।
  4. ফাইল f1 এবং f2 একত্রিত হয়েছে।
  5. চক্রটি পুনরাবৃত্তি হয়।

সিরিজের অ-নির্দিষ্ট আকারের কারণে, একটি বিশেষ অক্ষর দিয়ে ক্রমটির শেষ চিহ্নিত করা প্রয়োজন। অতএব, একত্রিত করার সময়, তুলনার সংখ্যা বৃদ্ধি পায়। এছাড়াও, সহায়ক ফাইলগুলির একটির আকার আসল আকারের কাছাকাছি হতে পারে৷

গড়ে, প্রাকৃতিক একত্রীকরণ বাহ্যিক সাজানোর সাথে সাধারণ একত্রিত হওয়ার চেয়ে বেশি কার্যকর।

অ্যালগরিদমের বৈশিষ্ট্য

দুটি অভিন্ন মান তুলনা করার সময়, পদ্ধতিটি তাদের আসল ক্রম সংরক্ষণ করে, অর্থাৎ এটি স্থিতিশীল।

বাছাই প্রক্রিয়াটি খুব সফলভাবে একাধিক থ্রেডে বিভক্ত হতে পারে।

Image
Image

ভিডিওটি মার্জ সাজানোর অ্যালগরিদমের কার্যকারিতা স্পষ্টভাবে প্রদর্শন করে৷

প্রস্তাবিত: