logo

אלגוריתם חיפוש בינארי

במאמר זה נדון באלגוריתם החיפוש הבינארי. חיפוש הוא תהליך של מציאת אלמנט מסוים ברשימה. אם האלמנט קיים ברשימה, התהליך נקרא מוצלח, והתהליך מחזיר את המיקום של אותו אלמנט. אחרת, החיפוש נקרא לא מוצלח.

חיפוש לינארי וחיפוש בינארי הן שתי טכניקות החיפוש הפופולריות. כאן נדון באלגוריתם החיפוש הבינארי.

חיפוש בינארי הוא טכניקת החיפוש שעובדת ביעילות על רשימות ממוינות. לפיכך, כדי לחפש אלמנט לתוך רשימה כלשהי באמצעות טכניקת החיפוש הבינארי, עלינו לוודא שהרשימה ממוינת.

החיפוש הבינארי עוקב אחר גישת ההפרדה והכיבוש שבה הרשימה מחולקת לשני חצאים, והפריט מושווה לאלמנט האמצעי של הרשימה. אם ההתאמה נמצאה אז, המיקום של האלמנט האמצעי מוחזר. אחרת, אנו מחפשים בכל אחד מהחצאים בהתאם לתוצאה שהופקה במהלך ההתאמה.

string.replaceall ב-java

הערה: ניתן ליישם חיפוש בינארי על רכיבי מערך ממוינים. אם רכיבי הרשימה אינם מסודרים בצורה ממוינת, עלינו תחילה למיין אותם.

כעת, בואו נראה את האלגוריתם של החיפוש הבינארי.

אַלגוֹרִיתְם

 Binary_Search(a, lower_bound, upper_bound, val) // 'a' is the given array, 'lower_bound' is the index of the first array element, 'upper_bound' is the index of the last array element, 'val' is the value to search Step 1: set beg = lower_bound, end = upper_bound, pos = - 1 Step 2: repeat steps 3 and 4 while beg val set end = mid - 1 else set beg = mid + 1 [end of if] [end of loop] Step 5: if pos = -1 print 'value is not present in the array' [end of if] Step 6: exit 

עבודה של חיפוש בינארי

כעת, בואו נראה את פעולתו של אלגוריתם החיפוש הבינארי.

כדי להבין את פעולתו של אלגוריתם החיפוש הבינארי, ניקח מערך ממוין. יהיה קל להבין את פעולת החיפוש הבינארי בעזרת דוגמה.

ישנן שתי שיטות ליישם את אלגוריתם החיפוש הבינארי -

  • שיטה איטרטיבית
  • שיטה רקורסיבית

השיטה הרקורסיבית של חיפוש בינארי עוקבת אחר גישת ההפרדה והכיבוש.

פקודת chown

תן לרכיבי המערך להיות -

אלגוריתם חיפוש בינארי

תן לאלמנט לחפש הוא, K = 56

עלינו להשתמש בנוסחה שלהלן כדי לחשב את בֵּינוֹנִי של המערך -

 mid = (beg + end)/2 

אז במערך הנתון -

לְהִתְחַנֵן = 0

סוֹף = 8

np.random.rand

בֵּינוֹנִי = (0 + 8)/2 = 4. לכן, 4 הוא אמצע המערך.

אלגוריתם חיפוש בינארי
אלגוריתם חיפוש בינארי
אלגוריתם חיפוש בינארי

כעת, נמצא האלמנט לחיפוש. אז האלגוריתם יחזיר את האינדקס של האלמנט המותאם.

מורכבות החיפוש הבינארי

כעת, בואו נראה את מורכבות הזמן של חיפוש בינארי במקרה הטוב, במקרה הממוצע והמקרה הגרוע ביותר. נראה גם את מורכבות החלל של החיפוש הבינארי.

1. מורכבות זמן

מקרה מורכבות זמן
המקרה הטוב ביותר O(1)
מקרה ממוצע O(לוגן)
במקרה הגרוע ביותר O(לוגן)
    מורכבות המקרה הטוב ביותר -בחיפוש בינארי, המקרה הטוב ביותר מתרחש כאשר האלמנט לחיפוש נמצא בהשוואה ראשונה, כלומר כאשר האלמנט האמצעי הראשון עצמו הוא האלמנט שיש לחפש. מורכבות הזמן הטובה ביותר של חיפוש בינארי היא O(1). מורכבות מקרה ממוצע -מורכבות הזמן הממוצעת של חיפוש בינארי היא O(לוגן). מורכבות המקרה הגרוע ביותר -בחיפוש בינארי, המקרה הגרוע ביותר מתרחש, כאשר אנחנו צריכים להמשיך לצמצם את שטח החיפוש עד שיש לו רק אלמנט אחד. מורכבות הזמן הגרועה ביותר של חיפוש בינארי היא O(לוגן).

2. מורכבות החלל

מורכבות החלל O(1)
  • מורכבות החלל של החיפוש הבינארי היא O(1).

יישום חיפוש בינארי

כעת, בואו נראה את התוכניות של חיפוש בינארי בשפות תכנות שונות.

תכנית: כתוב תוכנית ליישום חיפוש בינארי בשפת C.

javascript לתפריט נפתח
 #include int binarySearch(int a[], int beg, int end, int val) { int mid; if(end &gt;= beg) { mid = (beg + end)/2; /* if the item to be searched is present at middle */ if(a[mid] == val) { return mid+1; } /* if the item to be searched is smaller than middle, then it can only be in left subarray */ else if(a[mid] <val) { return binarysearch(a, mid+1, end, val); } * if the item to be searched is greater than middle, then it can only in right subarray else beg, mid-1, -1; int main() a[]="{11," 14, 25, 30, 40, 41, 52, 57, 70}; given array val="40;" value n="sizeof(a)" sizeof(a[0]); size of res="binarySearch(a," 0, n-1, store result printf('the elements are - '); for (int i="0;" < n; i++) printf('%d ', a[i]); printf('
element %d', (res="=" -1) not present array'); at %d position array', res); 0; pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/ds-tutorial/10/binary-search-algorithm-5.webp" alt="Binary Search Algorithm"> <p> <strong>Program:</strong> Write a program to implement Binary search in C++.</p> <pre> #include using namespace std; int binarySearch(int a[], int beg, int end, int val) { int mid; if(end &gt;= beg) { mid = (beg + end)/2; /* if the item to be searched is present at middle */ if(a[mid] == val) { return mid+1; } /* if the item to be searched is smaller than middle, then it can only be in left subarray */ else if(a[mid] <val) { return binarysearch(a, mid+1, end, val); } * if the item to be searched is greater than middle, then it can only in right subarray else beg, mid-1, -1; int main() a[]="{10," 12, 24, 29, 39, 40, 51, 56, 70}; given array val="51;" value n="sizeof(a)" sizeof(a[0]); size of res="binarySearch(a," 0, n-1, store result cout<<'the elements are - '; for (int i="0;" < n; i++) cout< <a[i]<<' cout<<'
element '<<val; (res="=" -1) not present array'; at '<<res<<' position 0; pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/ds-tutorial/10/binary-search-algorithm-6.webp" alt="Binary Search Algorithm"> <p> <strong>Program:</strong> Write a program to implement Binary search in C#.</p> <pre> using System; class BinarySearch { static int binarySearch(int[] a, int beg, int end, int val) { int mid; if(end &gt;= beg) { mid = (beg + end)/2; if(a[mid] == val) { return mid+1; /* if the item to be searched is present at middle */ } /* if the item to be searched is smaller than middle, then it can only be in left subarray */ else if(a[mid] <val) { return binarysearch(a, mid+1, end, val); } * if the item to be searched is greater than middle, then it can only in right subarray else beg, mid-1, -1; static void main() int[] a="{9," 11, 23, 28, 38, 45, 50, 56, 70}; given array int val="70;" value n="a.Length;" size of res="binarySearch(a," 0, n-1, store result console.write('the elements are - '); for (int i="0;" < n; i++) console.write(a[i] + ' console.writeline(); console.writeline('element (res="=" -1) not present array'); at position pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/ds-tutorial/10/binary-search-algorithm-7.webp" alt="Binary Search Algorithm"> <p> <strong>Program:</strong> Write a program to implement Binary search in Java.</p> <pre> class BinarySearch { static int binarySearch(int a[], int beg, int end, int val) { int mid; if(end &gt;= beg) { mid = (beg + end)/2; if(a[mid] == val) { return mid+1; /* if the item to be searched is present at middle */ } /* if the item to be searched is smaller than middle, then it can only be in left subarray */ else if(a[mid] <val) { return binarysearch(a, mid+1, end, val); } * if the item to be searched is greater than middle, then it can only in right subarray else beg, mid-1, -1; public static void main(string args[]) int a[]="{8," 10, 22, 27, 37, 44, 49, 55, 69}; given array val="37;" value n="a.length;" size of res="binarySearch(a," 0, n-1, store result system.out.print('the elements are: '); for (int i="0;" < n; i++) system.out.print(a[i] + ' system.out.println(); system.out.println('element is: (res="=" -1) not present array'); at position pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/ds-tutorial/10/binary-search-algorithm-8.webp" alt="Binary Search Algorithm"> <p> <strong>Program:</strong> Write a program to implement Binary search in PHP.</p> <pre> = $beg) { $mid = floor(($beg + $end)/2); if($a[$mid] == $val) { return $mid+1; /* if the item to be searched is present at middle */ } /* if the item to be searched is smaller than middle, then it can only be in left subarray */ else if($a[$mid] <$val) { return binarysearch($a, $mid+1, $end, $val); } * if the item to be searched is greater than middle, then it can only in right subarray else $beg, $mid-1, -1; $a="array(7," 9, 21, 26, 36, 43, 48, 54, 68); given array $val="68;" value $n="sizeof($a);" size of $res="binarySearch($a," 0, $n-1, store result echo 'the elements are: '; for ($i="0;" $i < $n; $i++) ' , $a[$i]; <br>&apos; , &apos;Element to be searched is: &apos; , $val; if ($res == -1) echo &apos; <br>&apos; , &apos;Element is not present in the array&apos;; else echo &apos; <br>&apos; , &apos;Element is present at &apos; , $res , &apos; position of array&apos;; ?&gt; </$val)></pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/ds-tutorial/10/binary-search-algorithm-9.webp" alt="Binary Search Algorithm"> <p>So, that&apos;s all about the article. Hope the article will be helpful and informative to you.</p> <hr></val)></pre></val)></pre></val)></pre></val)>

תְפוּקָה

אלגוריתם חיפוש בינארי

אז, זה הכל לגבי המאמר. מקווה שהמאמר יהיה מועיל ואינפורמטיבי עבורך.