* התחבר | הרשם עכשיו | מה זה Brain Kingdom? *
Brain Kingdom[Brain Logo]
יום שלישי, 6 בינואר 2009
  חפש שאל
קדימה
purple corner purple corner
   אתה נמצא כאן: דף ראשי :: מדעי המחשב ברוך הבא אורח, התחבר או הרשם עכשיו.  
white corner
 
MAIL שלח שאלה לחבר
PRINT הדפס את התשובה
MY QUESTIONS הוסף לשאלות שלי

תשובות קשורות לשאלה
הערות/הוספת הערות

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

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

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

Position := -1;
For I := 1 to Size do
If Table[I] = Key then Position := I;

תחילה אנו מציבים במשתנה Position את הערך 1-, ואז אנו סורקים את המערך בעזרת לולאה. אם נמצא הערך בטבלה, המשתנה Position שומר את מיקומו. אם לא נמצא, המשתנה מחזיק את הערך 1- שמסמל שהערך לא נמצא.
שיטה נוספת לחיפוש סדרתי ויעילה יותר היא שיטה המבוססת על הלולאה while, כך שהחיפוש נעצר כאשר הערך נמצא:

Position := -1;
I := 1;
While (I <= Size) and (Table [I] <> Key)
do I := I + 1;
If I <= Size then Position := I;

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

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

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

Key := a;
Low := 1;
High := Size;
Repeat
I := (Low + High) div 2;
If Table[I] < Key then Low := I;
If Table[I] > Key then High := I;
Until (Table[I] = Key) Or (Low = High);
Position := I;

 

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


הערות הערות            WRITE NOTE הוסף הערה חדשה   Edit Settings שנה את ההגדרות בנוגע להערות
לא נמצאו הערות.
 
TOP בחזרה לראשית הדף
WRITE NOTE הוסף הערה

 

Copyright © Brain-Kingdom.com 2005-2009. כל הזכויות שמורות ל-Brain Kingdom. ראה הצהרת זכויות יוצרים | הצהרת פרטיות | תנאי שימוש | יצירת קשר | פרטי החברה | מפת האתר | צור קשר עם מנהל האתר