חיפוש בינארי – הבדלי גרסאות

תוכן שנמחק תוכן שנוסף
מחיקת פקודות ופעולות מיותרות ('אחרת' לאחר תנאי המחזיר ערך, עיגול אוטומטי), המקשים על קריאת הקוד ועשויים להיחשב ככתיבה לקויה
שורה 97:
 
==חישוב ה[[סיבוכיות]]==
בידינו מערך בגודל <math>\ n</math> כלומר יש בו <math>\ n</math> איברים. בכל [[איטרציה]] (הפעלת האלגוריתם) אנו מצמצמים את המערך לחצי מגודלו, שכן אנו בטוחים שהאיבר אינו בחצי המערך השני ולכן אין אנו בודקים אותו יותר. לאחר איטרציה אחת יהיה גודל המערך <math>\frac{n}{2}</math>, לאחר שתי איטרציות יהיה גודלו <math>\frac{n}{2^2}</math>, לאחר שלוש איטרציות יהיה גודל המערך <math>\frac{n}{2^3}</math> וכן הלאה. התהליך ייגמר במקרה הגרוע ביותר כאשר גודליישאר המערךמערך הינובגודל 1. אם התהליך כולו יימשך <math>\ k</math> איטרציות, יהיה גודל המערך <math>\frac{n}{2^k}</math>. אנו דורשים שגודל זה יהיה 1 ולכן נדרוש <math>\frac{n}{2^k} = 1</math>. נוציא <math>\ log</math> משני אגפי המשוואה ונקבל כי <math>\ k = log(n)</math>.
 
קיבלנו כי סיבוכיות התהליך היא <math>\ O(log(n))</math>. כלומר מספר הפעולות שאנו עושים '''קטן משמעותית''' (לוגריתמית) ממספר איברי המערך.
שורה 112:
|}
 
שים לב שהערכים בשורה העליונה הם המקומות במערך (Indexes) ואילו הערכים בשורה התחתונה הינםהם הנתונים הנשמרים במערך (Values). לדוגמה במקום השלישי במערך שמור הערך 2.
 
ננסה לחפש כעת, באמצעות אלגוריתם אריה במדבר, האם המספר 2 מופיע במערך. במערך עשרה איברים ולכן <math>\ n=10 </math>.
שורה 119:
1. '''אמצע <- 2 / (תחילת_מערך + סוף_מערך)'''
 
תחילת_מערך הינוהוא מספורו של התא הראשון ובמקרה זה 1 ולו סוף_מערך הוא מיספורומספורו של התא האחרון, במקרה זה 10. 10+1=11 ואם נחלק ב-2 נקבל 5 (במידה ואנו מעגלים כלפי מטה). אמצע כעת יהיה שקול למספר 5.
 
2. '''אם מערך[אמצע] = ערך_מבוקש'''
שורה 140:
1. '''אמצע <- 2 / (תחילת_מערך + סוף_מערך)'''
 
תחילת_מערך הינוהוא מספורו של התא הראשון ובמקרה זה 1 ולו סוף_מערך הוא מיספורומספורו של התא האחרון, במקרה זה 5. 5+1=6 ואם נחלק ב-2 נקבל 3.
 
2. '''אם מערך[אמצע] = ערך_מבוקש'''