הסריקה של גראהם

מתוך ויקיפדיה, האנציקלופדיה החופשית

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

תיאור האלגוריתם[עריכת קוד מקור | עריכה]

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

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

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

סיבוכיות האלגוריתם[עריכת קוד מקור | עריכה]

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

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

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

ראו גם[עריכת קוד מקור | עריכה]

קישורים חיצוניים[עריכת קוד מקור | עריכה]