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

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

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





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





עבור מאמר זה, האלגוריתמים יתרכזו בקביעה אם קיים ערך.





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

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

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



אלגוריתם חיפוש רציף לוקח רשימת ערכים והפריט הרצוי ברשימה כפרמטרים שלו. תוצאת ההחזרה מאתחלת כ- שֶׁקֶר וישתנה ל נָכוֹן כאשר נמצא הערך הרצוי.

ראה דוגמה ליישום Python להלן:





def linearSearch(mylist, item):
found = False
index = 0
while index if mylist[index] == item:
found = True
else:
index = index+1
return found

ניתוח אלגוריתם

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

תרחיש המקרים הממוצע באלגוריתם לעיל הוא n/2.





קָשׁוּר: מהו סימון Big-O?

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

יציאת usb לא עובדת windows 10

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

קח דוגמא לחיפוש 19 ברשימה הנתונה: [2, 5, 6, 11, 15, 18, 23, 27, 34]. לאחר שהגיעו ל -23, יתברר כי הפריט אותו מחפשים אינו קיים ברשימה. לכן כבר לא יהיה חשוב להמשיך ולחפש את שאר פריטי הרשימה.

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

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

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

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

קשור: מהו רקורסיה וכיצד אתה משתמש בה?

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

איך אני יכול לדעת אם מישהו חסם אותי בפייסבוק

תהליך זה חוזר על עצמו עד שנמצא ערך אם הוא קיים.

יישום Python להלן מיועד לאלגוריתם החיפוש הבינארי.

def binarySearch (mylist, item):

low = 0
high = len(mylist) - 1
found = False
while low <= high and not found: mid = (low + high) // 2
if mylist[mid] == item:found = True
elif item else:low = mid + 1
return found

ניתוח אלגוריתם

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

לאחר ההשוואה הראשונה יישארו n/2 פריטים. לאחר השני יישארו n/4 פריטים. לאחר השלישי, n/8.

שימו לב שמספר הפריטים ממשיך במחצית עד שהם מגיעים ל- n/2i כאשר i הוא מספר ההשוואות. אחרי כל הפיצול, יש לנו רק פריט אחד.

זה מרמז:

n/2i = 1 לכן, חיפוש בינארי הוא O (log n).

ממשיכים למיון

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

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

לַחֲלוֹק לַחֲלוֹק צִיוּץ אימייל אופן השימוש במיון בחירה

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

קרא הבא
נושאים קשורים
  • תִכנוּת
  • הסבר על הטכנולוגיה
  • תִכנוּת
  • אלגוריתמים
  • ניתוח נתונים
על הסופר ג'רום דוידסון(22 מאמרים פורסמו)

ג'רום הוא כותב צוות ב- MakeUseOf. הוא מכסה מאמרים בנושא תכנות ולינוקס. הוא גם חובב קריפטו ותמיד עוקב אחרי תעשיית הקריפטו.

עוד מאת ג'רום דוידסון

הירשם לניוזלטר שלנו

הצטרף לניוזלטר שלנו לקבלת טיפים, סקירות, ספרים אלקטרוניים בחינם ומבצעים בלעדיים!

לחצו כאן להרשמה