কম্পিউটার

অনেক বাইনারি অনুসন্ধান বাস্তবায়নে একটি সমস্যা?


আমরা জানি যে বাইনারি সার্চ অ্যালগরিদম লিনিয়ার সার্চ অ্যালগরিদমের চেয়ে ভালো। এই অ্যালগরিদমটি কার্যকর করতে O(log n) পরিমাণ সময় নেয়। যদিও বেশিরভাগ ক্ষেত্রে বাস্তবায়িত কোডের কিছু সমস্যা রয়েছে। নিচের মত একটি বাইনারি সার্চ অ্যালগরিদম ফাংশন বিবেচনা করা যাক −

উদাহরণ

int binarySearch(int array[], int start, int end, int key){
   if(start <= end){
      int mid = (start + end) /2); //mid location of the list
      if(array[mid] == key)
         return mid;
      if(array[mid] > key)
         return binarySearch(array, start, mid-1, key);
         return binarySearch(array, mid+1, end, key);
   }
   return -1;
}

এই অ্যালগরিদমটি সূক্ষ্মভাবে কাজ করবে যতক্ষণ না শুরু এবং শেষ একটি বড় সংখ্যায় পৌঁছায়। যদি (শুরু + শেষ) 2 32 এর মান অতিক্রম করে - 1 তারপর এটি মোড়ানোর পরে একটি ঋণাত্মক সংখ্যা ফেরত দিতে পারে। এবং যেহেতু নেতিবাচক সংখ্যাগুলি অ্যারে সূচক হিসাবে সমর্থিত নয়, তাই এটি কিছু সমস্যা সৃষ্টি করতে পারে৷

এই সমস্যাটি কাটিয়ে উঠতে, কয়েকটি ভিন্ন উপায় রয়েছে।

পদ্ধতি 1

int mid = start + ((end - start) / 2)

দ্বিতীয় পদ্ধতিটি শুধুমাত্র জাভাতে কাজ করবে কারণ C বা C++ এর কোন>>> অপারেটর নেই।

পদ্ধতি 2 (শুধুমাত্র জাভা)

int mid = (start + end) >>> 1

যেহেতু>>> C বা C++ সমর্থিত নয়, তাহলে আমরা নিম্নলিখিত পদ্ধতি ব্যবহার করতে পারি।

পদ্ধতি 3

int mid = ((unsigned int) low + (unsigned int) high) >> 1

  1. সর্বোত্তম বাইনারি অনুসন্ধান গাছ

  2. C++ প্রোগ্রামে বাইনারি অনুসন্ধান?

  3. ডেটা স্ট্রাকচারে সর্বোত্তম বাইনারি অনুসন্ধান গাছ

  4. C# এ বাইনারি অনুসন্ধান