170 likes | 361 Views
Points on a perimeter (Convex Hull). קורס – מבוא לעבוד מקבילי מבצעים – אריאל פנדלר יאיר ברעם. הגדרת הבעיה:. המטרה: מציאת המצולע המינימלי שיכיל את כל הנקודות במישור המתואר ( Convex Hull ). הקלט: S - סדרת נקודות (שני מימדים).
E N D
Points on a perimeter(Convex Hull) קורס – מבוא לעבוד מקבילי מבצעים – אריאל פנדלר יאיר ברעם
הגדרת הבעיה: • המטרה:מציאת המצולע המינימלי שיכיל את כל הנקודות במישור המתואר (Convex Hull). • הקלט:S - סדרת נקודות (שני מימדים). • הפלט: סדרת נקודות נבחרת היוצרת מצולע שמקיף את כל הנקודות במרחב. • לדוגמא:
למה זה טוב? • אדם יצליח למצוא את הדרך הקצרה ביותר. • אבל,הרובוט... • הוא צריך קצת עזרה.
איך פותרים? • יש מגוון אלגוריתמים שפותרים את הבעיה,כמו: Quick Hull .1 Gift Wrap .2 Divide and Conquer .3 ועוד רבים אחרים. • בעבודתנו נשתמש בשיטתQuick Hull.
דוגמא פשוטה למציאת :Convex Hull • קלט: רשימת הנקודות המרכיבות את המרחב P. • פלט: הנקודות שמרכיבות את ההיקף של P. • בדוגמא: Input = [a,b,c,d] Output = [a,b,d] a מרחב P b c d
H B M F G D I E C איך Quick Hullעובדת? J • נמצא את שתי הנקודות הקיצוניות ביותר על ציר ה –X. O K P A L N מישור P [A B C D E F G H I J K L M N O P]
H B M F G D I E C סינון: • חותך את המישור –P לשני חלקים: מעל לישר AP ומתחת לישר AP. J O K P A L N [ A B D F G H J K M O P]
H B M F G D I E C מציאת קיצון: • מחפש את הנקודה המרוחקת ביותר מהקו AP. אם נמצאה נקודה היא תמוקם ב-.Convex Hull J O K P A L N [A B D F G H J K M O P]
H B M F G D I E C סינון נוסף: • מותחים קו חדש בין הנקודה החדשה לבין נק' הקיצון הקיימות. J O K P A L N [ [A B F J ] [J O P] ]
H M F G D I E C מציאת קיצון נוסף: • הפעם מוצאים נק' קיצון המרוחקת מהקו AJ. במקרה הזה נמצאה הנק' B. הנק' מתווספת ל- Convex Hull. J O B K P A L N [[A B F J] [J O P] ]
H M F G D I E C עצירה: • לא נמצאו יותר נק' בחלק [ABJF] נחפש נק' קיצון בחלק [JOP]. J O B K P A L N [ [A B] [B J] [J O P] ]
H M F G D I E C מציאת קיצון מהקו JP: • הנק' O היא הנק' האחרונה!!! מצאנו את היקף החצי העליון !!! • נחזור על פעולת החיפוש עבור החלק התחתון. J O B K P A L N [ [A B] [B J] [J O] [O P] ]
כיצד ניתן "למקבל" את זה? • נחלק את המישור למספר חלקים. • כל מעבד "יסדר" את החלק שלו. • חיבור כל החלקים לקבלת המצולע השלם. • שימוש ב: 1. Embarrassingly Parallel Computations Master Workers.2
כמה זה מסובך? • לשיטת Quick Hullסיבוכיות מסדר O(n*Log(n)) • בתוכנית המקבילית נקבל סיבוכיות[O{n*Log(n)}] / N
כיצד נממש? • האלגוריתם שתואר קודם יעבור מקבול בשפת PVM. • נחלק את מספר הנקודות בין שני מעבדים וכל אחד ימצא • את המעטפת השייכת לו. • לאחר מכן נאסוף את הנתונים ונייצר מערך של נקודות • הקצה. • מערך זה יכתב לקובץ בנוסף למערך של כל שאר הנקודות • ויוצג ע"י תוכנה נפרדת שתיכתב בשפת C.
תודה רבה שאלות ?