এলগরিদমের খুঁটিনাটি ৪র্থ পর্ব ( Mergesort Algorithm )

Author Topic: এলগরিদমের খুঁটিনাটি ৪র্থ পর্ব ( Mergesort Algorithm )  (Read 1853 times)

Offline Mehedifaruk

  • Newbie
  • *
  • Posts: 6
  • Test
    • View Profile
    আজ যে এলগরিদমটা নিয়ে আলোচনা করব , সেটার নাম মার্জ সর্ট এলগরিদম । শুরুতেই কিছু কথা বলে নেয়া যাক ~ একটা সমস্যা সমাধানের জন্য কয়েকটা এলগরিদম থাকতে পারে । এই যেমন সর্টিং এর জন্য
Bubble Sort , Insertion Sort  , Selection Sort , Quicksort , Mergesort , Heapsort  এলগরিদম রয়েছে ।
প্রশ্ন হচ্ছে এতগুলো এলগরিদমের মধ্যথেকে কোনটা বেছে নিব ? এলগরিদমের দুইটা বৈশিষ্টের উপর ভিত্তি করে আমরা বেস্ট এলগরিদম বেছে নিব ।
   Correctness
   Efficiency 

কিভাবে একটা এলগরিদমের কারেক্টনেস এবং ইফিসিয়েন্সি বের করে সেটা নিয়ে আরেক দিন লেখব । সর্টিং এলগরিদমের মধ্যে সবচেয়ে কার্যকর এলরিদম হচ্ছে Mergesort এলগরিদম । চলুন Mergesort এলগরিদমের সাথে পরিচয় পর্ব শেষ করা যাক । Mergesort এলগরিদমকে  Divide and Conquer  এলগরিদমও বলাহয়ে থাকে ।
১৯৪৫ সালে John von Neumann নামের হাঙ্গেরিয়ান - আমেরিকান গণিতবিদ Mergesort এলগরিদম আবিষ্কার করেন । চলুন শুরু করা যাক 
ধরুন আপনার কাছে আনসর্টেট একটা array আছে , নিচের চিত্রে খেয়াল করুন


আমরা গত পর্বে দেখেছিলাম কিভাবে বাবল সর্ট এলগরিদম ফলো করে খুব সহজেই একটা আনসর্টেড অ্যারে সর্ট করা যায় ।  Mergesort এলগরিদম পুরোপুরি ভিন্নভাবে কম সময়ে এই কাজটা সম্পন্ন করে ! এজন্য Divide and Conquer নিয়ম ফলো করতে হয় ।
প্রথমেই আনসর্টেড অ্যারেকে দুই ভাগে ভাগ করে নিতে হবে , নিচের চিত্রে খেয়াল করুন 

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

এভাবে আমরা সাবলিস্ট তিরী করতে থাকব যতক্ষণ পর্যন্ত আমাদের সাবলিস্ট বানানোর অপশন থাকবে , নিচের চিত্রে খেয়াল করুন –                             
 
       
এবারে আর কোন সাবলিস্ট তৈরী করা সম্ভব নয় , এবারে ভাগকরা সর্বশেষ দুইটা এলিমেন্টের মধ্যে কম্পেয়ারিং শুরু করব । যেহেতু ২ < ৪৫  , সেহেতু এখানে কোন পরিবর্তন হবে না । ২ আর ৪৫ কে আগের অবস্থায় রেখে দিব । আবার ৫ < ৫১ তাই এখানেও কোন পরিবর্তন হবে না , তাই তাদের কেও আগের অবস্থায় রেখে দিব  ।
এবারে ডান পাশের ১ এবং ৩৫ এর মধ্যে তুলনা করব , যেহেতু ১<৩৫ সেহেতু ১ এবং ৩৫ আগের অবস্থাতেই থাকবে ।  এবার ৬২ ও ১৫ এর মধ্যে তুলনা করব , এখানে ৬২ > ১৫ ,  তাই ১৫ আগে চলে আসবে এবং ৬২ পরে চলে যাবে । নিচের চিত্রে খেয়াল করুন ! 
 


 
   
 
এখন আমাদের হাতে দুইটা দুইটা করে মোট চারটা সেট রয়েছে যেখানে সবাই সর্টেড । এরা মূলত আমাদের ভাগকরা সাবসেট ! এবার বাম পাশের দুইটা সেটের প্রথম এলিমেন্টগুলোকে কম্পেয়ার করে সর্ট করব । প্রথমে ২ আর ৫ এর মধ্যে কম্পেয়ার করব , যেহেতু  ২< ৫  তাই ২ প্রথম স্থানেই থাকবে ! এবারে ৫ এর সাথে ৪৫ কে কম্পেয়ার করব । এখানে ৪৫ > ৫  , তাই ৫ চলে আসবে দ্বিতীয় স্থানে । বাকি রইল ৫১ , এবার আবার ৪৫ এর সাথে ৫১ কে তুলনা করব । ৪৫ < ৫১ তাই ৪৫ চলে আসবে তৃতীয় স্থানে এবং ৫১ চতুর্থ স্থানে ।

 
                       
   এবার বাম পাশের মতই ডান পাশের দুই সেটের প্রথম এলিমেন্ট একটার সাথে আরেকটার তুলনা করে সর্ট করব । প্রথমে ১ এবং ১৫ এর তুলনা করব । ১ < ১৫ তাই প্রথমে ১ থাকবে , এবার ১৫ এর সাথে ৩৫ এর তুলনা করব । ৩৫ > ১৫  , তাই ১৫ চলেযাবে দ্বিতীয় স্থানে । এবার ৩৫ এর সাথে ৬২ দিয়ে তুলনা করব , ৩৫ < ৬২ তাই যথারীতি ৩৫ তৃতীয় এবং ৬২ চতুর্থ স্থানে থাকবে । নিচের চিত্রে লক্ষ করুন ~



এখন আমাদের হাতে আছে দুইটা সেট , যাদের কে আমরা এতক্ষণ সর্ট করেছি । 

 
এবার আগের মতই দুই সেটের প্রথম দুইটা এলিমেন্ট একটার সাথে আরেকটার তুলনা করব , প্রথমে ২ এবং ১ এর তুলনা করব । ২> ১ তাই ১ চলে আসবে প্রথমে । এবার ২ এর সাথে ১৫ এর তুলনা করব , এখানে ২ < ১৫ তাই ২ সামনে চলে আসবে । এবার ১৫ এবং ৫ এর তুলনা করব , ১৫>৫ তাই ৫ আগে চলে আসবে । এবার ১৫ এর সাথে ৪৫ এর তুলনা করব , ১৫ <৪৫ তাই ১৫ আগে চলে আসবে ।
এবার ৪৫ এর সাথে ৩৫ এর তুলনা করব , ৪৫ > ৩৫ তাই ৩৫ আগে চলে আসবে । এবার ৪৫ এবং ৬২ এর তুলনা করব , ৪৫ < ৬২ তাই ৪৫ আগে চলে আসবে । এবার ৬২ এবং ৫১ এর তুলনা করব , ৬২ > ৫১ তাই ৫১ আগে  । এবারে ৬২র সাথে তুলনা করার মত কোন ইলিমেন্ট নেই তাই ৬২ সবার পরে চলে যাবে । নিচের চিত্রে খেয়াল করুন ~


পুরো ব্যাপারটা হচ্ছে , প্রথমে আমরা অ্যারেকে দুই ভাগে ভাগ করতে থাকব , যতক্ষণ  পর্যন্ত সিঙ্গেল এলিমেন্ট না হয় । তার পরে সর্ট করে করে নিচ থেকে উপর পর্যন্ত যাব । এটাকে রিকার্সন বলা হয় ।

আর এই পর্যন্তই , কোন প্রশ্ন থাকলে কমেন্টে অথবা মেইল করতে পারেন  !
http://facebook.com/sajibcpi

Offline mosfiqur.ns

  • Sr. Member
  • ****
  • Posts: 297
  • Test
    • View Profile
Md. Mosfiqur Rahman
Sr.Lecturer in Mathematics
Dept. of GED

Offline munira.ete

  • Hero Member
  • *****
  • Posts: 558
  • Test
    • View Profile