ABA


"בהשראתו של פאביו ג'וניור - פתרון לחידת המרחקים."
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #15856 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 15856
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   13:36   29.04.10   
אל הפורום  
  בהשראתו של פאביו ג'וניור - פתרון לחידת המרחקים.  
 
קודם כל, אני באמת מתנצל שלקח לי זמן להביא פתרון.
לפעמים אתה נכנס לעומס גדול ופשוט מוצא את עצמך חסר זמן להביא את הפתרון.

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

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

בוא ניזכר בחידה ונפתור
קלט:
אוסף של n נק' במישור xy.
פלט:
המרחק הקצר ביותר בין 2 נקודות.

הגישה הנאיבית לעבור על כל זוגות הנק' עולה לנו O של n^2.
אני אתאר גישה אחת של הפרד ומשול ואתן רעיונות לגישות נוספות.

פתרון מלא בעזרת אלגוריתם הפרד ומשול:
1. נמיין את מערך הנק' עפ"י קורדינטת ה-X שלהם.
2. נפתור את הבעייה באופן רקורסיבי לשני חצאי המישור, כלומר נחלק את המישור בכל שלב ל-2 חלקים עם מספר שווה של נק' ונשאל מה המרחק המינימלי בכל צד. נסמן Lmin ו-Rmin בהתאמה עבור המרחק המינימלי של צד שמאל וימין.
[ תנאי העצירה הוא כמובן ברגע שיש לנו 2 נק' נחזיר את המרחק ביניהן ]
מה חסר?
הבעייה היא בכך שאי אפשר לומר שהמרחק המינימלי יהיה המינימום מבין Rmin ל-Lmin (הקטנים ביותר), מכיוון שברגע שאנחנו מחלקים את המישור לשני חצאים ייתכן שיהיה זוג נק' עם מרחק קטן יותר שכל אחת מהנק' שייכת לחצי אחר.

באדום ובכחול מסומן המרחק המינימלי בעוד שהמרחק המינימלי האמיתי הוא הסגמנט הסגול.
עומר בזמנו הגיע עד פה והציע כדי לפתור את הבעייה לבדוק את המרחק מהחציון לכל הנק' בכל שלב כדי לפתור את הבעייה. אולם אין זה נכון פשוט. אפשר לראות בציו שהמרחק המינימלי בכלל לא קשור במקרה זה לחציון.
אז מה כן אפשר לעשות
המטרה שלנו היא למצוא את המרחק המינימלי גם בין כל הנק' בצד שמאל לכל הנק' בצד ימין. אם נעבור שוב על כל הנק' בצד שמאל עם כל הנק' בצד ימין אז זה עדיין מקפיץ את הפתרון לריבועי. יתרה מזאת, אנחנו רוצים בכל איטרציה שזה ייקח לכל היותר n (עומק הרקורסיה הוא log n, ולכן O של n זה הגבול שנוכל לדרוש לצעד הזה).
מי שעקב עד לפה, מוזמן לחשוב לרגע כיצד לפתור את זה לפני שהוא קורא את ההסבר.
אז מה באמת נעשה?
אנחנו יודעים את המרחק Lmin ו-Rmin ויכולים להעזר במידע הזה. נסמן ב-d את המינימום מבין Rmin ו-Lmin. אז קודם כל נסתכל על החציון ונסתכל על המלבן האינסופי שנוצר מהסתכלות על mid+d ו-mid-d, כלומר:

זה האיזור ה"מסוכן" - נק' משני הצדדים במרחק קטן מ-d עלולות להמצא רק בקטע זה. ניקח נק' נק' בצד שמאל ונקיף סביב כל נק' רדיוס באורך d. כמה נקודות מצד ימין המעגל הזה יכול להכיל? זה דורש מחשבה קלה.
נסתכל על המעגל:

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

(נסו לצייר בעצמכם 4 נק' של צד ימין במעגל ותבינו איפה אתם נופלים).
לסיכום:
כאשר נעבור על כל נק' בצד שמאל ונעשה סביבם מעגל ברדיוס קטן כזה, יהיו לכל היותר 3 נק' מצד ימין. נותר לנו אם כן עבור כל מעגל כזה לבדוק את ה-3 נק' שהוא מכיל לכל היותר מצד מימין ולבדוק אותן. גם זה מתעתע, כי זה לא כזה פשוט למצוא את 3 הנק' האלה. אפשר למיין למשל את הסגמנט של כל הערכים עם ערך X פוטנציאלי (להיות ב-mid+d ו-mid-d) לפי קורדינטת ה-Y ואז לעבור באופן סדרתי על הנק' ולבדוק הימצאותן במעגלים. זה יעלה לנו nlog n.
כלומר באופן זה אני פותר את הבעייה ב-nlog ^2 n שזה כבר טוב יותר.
הערה אחרונה:
יכולנו לחסוך את העלות הזאת לו בכל איטרציה היינו ממיינים רקורסיבית את הערכים לפי ציר Y וממזגים את הערכים המתאימים במלבן בבואנו לבדוק את הנק' שנמצאות בתוך המעגלים - זה היה עולה לנו רק n, וכך היה נפתר האלגוריתם ב-nlog n.

לסיכום אלגוריתם הפרד ומשול:
1. חלק את אוסף הנק' ל-2 חלקים עם כמות שווה של נק'.
2. מצא בכל חלק את המרחק המינימלי.
3. מצא את הנק' ששוכבות במלבן mid+d ו-mid-d באשר d המרחק המינימלי מבין המרחק המינימלי בחצי מישור שמאלי וחצי מישור ימיני.
4. מתח מעגלים סביב כל נק' מצד שמאל הנמצאת במלבן האינסופי ובדוק אותה מול 3 הנק' שפוטנציאליות להיות בתוכה.
5. החזר את הערך המינימלי מבין Lmin, Rmin, Dmin.
עלות כוללת:
nlg ^2 n
ואם עובדים חכם יותר:
nlg n

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

גישות נוספות:
1. דיאגרמת Voronoi - כלי עצמתי יחסית. פותר בעייה גדולה יותר - בהנתן אוסף של אתרים מחזיר גרף המפריד את הנק' לאיזורי שליטה מהבחינה הזאת שאיזור השליטה של נק' p, נסמן Vp, מכיל את המקום הגיאומטרי של כל הנק' הקרובות ל-p לפחות כפי שהן קרובות לשאר האתרים. אפשר לחשוב על האתרים כבתי חולים ועל הגרף כחלוקה לאיזורים Vp כך שאם אדם נמצא באיזור Vp אז בית החולים הקרוב ביותר אליו הוא לכל הפחות p.
http://www-sop.inria.fr/prisme/fiches/Voronoi/voronoi.gif
אפשר לבנות גרף כזה ב-nlog n. מספר הקשתות שלו הוא O של n, ולכן אפשר פשוט להחזיר את המינימום מבין כל הקשתות (שאינן אינסופיות).
2. אלגוריתם של Sweep. גישה מאוד אלגנטית לפתרון בעיות בגיאומטריה חישובית. היא למעשה ממחישה כיצד לדמות סריקה רציפה של תחום בעזרת מעבר בדיד על הנקודות.

מקווה שהייתי מובן מספיק,
מקווה שהבנתם






                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  ידידי אני מתנצל אך טעות בדבריך, akoka2 29.04.10 14:15 1
     חחחח יוחאי אתה חסר תקנה ronen333  05.05.10 19:13 9
  תודה רבה :) פאביו ג'וניור 29.04.10 16:42 2
  עבדתי על הכתיבה דיי הרבה, שתדעו. Deuce  01.05.10 14:54 3
     כל הכבוד אייל =] ronen333  01.05.10 18:39 4
     מצטרף לאביעד. ממש אין זמן. ברגע שיהיה לי מבטיח שאתן את דעתי ;) ldan192  01.05.10 19:08 5
  אני קראתי הכל ואהבתי - כל הכבוד על הפיתרון המושקע Net_Boy  03.05.10 00:45 6
     תודה רבה :] Deuce  03.05.10 21:15 7
  קראתי הכל- ונשארתי עם פה פאור. כל הכבוד אייל ותודה :) ronen333  05.05.10 17:49 8
     *פעור ronen333  06.05.10 22:41 11
         שמח שנהנית :] Deuce  07.05.10 05:01 12
  עכשיו רק הזדמן לי לקרוא. יפה מאוד! זה נושא באמת שימושי ldan192  06.05.10 21:58 10
     מכתב Deuce  07.05.10 05:02 13

       
akoka2

   14:15   29.04.10   
אל הפורום  
  1. ידידי אני מתנצל אך טעות בדבריך,  
בתגובה להודעה מספר 0
 
   כאשר אתה מחשב נקודה פולימורפית מX^2 ומבצע על המישור אסמיפטוטה נאנסת מY עד Z אתה לא יכול להגיע לאפסים הלא שלמים במישור המרוכב, רימן אמר להשתמש בפונקצית זטא של עקרון האי וודאות של היזנברג, כאשר האלקטרונים מנקודה מסויימת לנקודה לא מסויימת הם שווים בגודלם, מה שאומר שאם אתה תעביר קוו בינתחומי בין 3 מישורים תלת מימדיים כול מה שתקבל זה פיתה עם שווארמה, אך לא רק, יכול להווצר מצב שהאסימפ-טוטה שלך לא תאנס בכלל, מה שכן תנסה להשתמש במשפט פיתגורס הדו מימדי, יכול ליהיות שבאמצעות פולימורפיזם תגיע לפלאפל עם טחינה, מה שגם זה טעים....


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   19:13   05.05.10   
אל הפורום  
  9. חחחח יוחאי אתה חסר תקנה  
בתגובה להודעה מספר 1
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
פאביו ג'וניור

   16:42   29.04.10   
אל הפורום  
  2. תודה רבה :)  
בתגובה להודעה מספר 0
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   14:54   01.05.10   
אל הפורום  
  3. עבדתי על הכתיבה דיי הרבה, שתדעו.  
בתגובה להודעה מספר 0
 
אם אתם באמת רוצים לעלות את הרמה ולפתור שאלות יותר מאתגרות ויותר קשות אז שווה לכם לקרוא את הדברים האלה. זה לא בעיות קלות ואני חושב שההסברים שלי יחסית ברורים.

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






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   18:39   01.05.10   
אל הפורום  
  4. כל הכבוד אייל =]  
בתגובה להודעה מספר 3
 
   ותודה רבה
הסיבה שלא הגבתי עד עכשיו, זה כי באמת לא יצא לי להעמק במה שכתבת מפאת זמן..

אכתוב תגובה רצינית יותר מאוחר יותר ;)


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   19:08   01.05.10   
אל הפורום  
  5. מצטרף לאביעד. ממש אין זמן. ברגע שיהיה לי מבטיח שאתן את דעתי ;)  
בתגובה להודעה מספר 3
 


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Net_Boy  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.4.02
17151 הודעות, 1 פידבק
   00:45   03.05.10   
אל הפורום  
  6. אני קראתי הכל ואהבתי - כל הכבוד על הפיתרון המושקע  
בתגובה להודעה מספר 0
 
   קיבלת ווינר


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   21:15   03.05.10   
אל הפורום  
  7. תודה רבה :]  
בתגובה להודעה מספר 6
 
שמח שנהנית.






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   17:49   05.05.10   
אל הפורום  
  8. קראתי הכל- ונשארתי עם פה פאור. כל הכבוד אייל ותודה :)  
בתגובה להודעה מספר 0
 
   מזל טוב על הווינר ;)


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   22:41   06.05.10   
אל הפורום  
  11. *פעור  
בתגובה להודעה מספר 8
 
   XD


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   05:01   07.05.10   
אל הפורום  
  12. שמח שנהנית :]  
בתגובה להודעה מספר 11
 






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   21:58   06.05.10   
אל הפורום  
  10. עכשיו רק הזדמן לי לקרוא. יפה מאוד! זה נושא באמת שימושי  
בתגובה להודעה מספר 0
 
יותר ממה שאנשים אולי מבינים.


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   05:02   07.05.10   
אל הפורום  
  13. מכתב  
בתגובה להודעה מספר 10
 
הבעייה הספציפית לה הצגתי פתרון לא חשובה בטירוף בתחום, אם כי הדברים הנוספים שהזכרתי (דיאגרמת VORONOI למשל) מאוד חשובים.

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






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

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



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net