Presentation is loading. Please wait.

Presentation is loading. Please wait.

גרפים - Graphs גרף G(V,E) מורכב מקבוצת צמתים V וקבוצת קשתות E.

Similar presentations


Presentation on theme: "גרפים - Graphs גרף G(V,E) מורכב מקבוצת צמתים V וקבוצת קשתות E."— Presentation transcript:

1 amirrub@cs - אמיר רובינשטיין
גרפים - Graphs גרף G(V,E) מורכב מקבוצת צמתים V וקבוצת קשתות E. V={u,v,w,x,y} E={(v,v), (u,v), (v,x), (u,x), (u,y)} |V| = n , |E| = m סוגי גרפים - גרף מכוון / לא מכוון - גרף פשוט / מולטי גרף - עם או בלי לולאות עצמיות - גרף קשיר v y x w u קשר בין n ל- m בגרף פשוט לא מכוון ללא לולאות עצמיות – מכוון עם לולאות עצמיות - - אמיר רובינשטיין אמיר

2 amirrub@cs - אמיר רובינשטיין
ייצוגים של גרפים א. מטריצת סמיכויות. ב. רשימת סמיכויות. - אמיר רובינשטיין

3 פעולות על גרפים רשימת סמיכויות מטריצת סמיכויות הפעולה
מעבר על רשימת האיבר i בדיקת M[i][j] בדיקת קיום קשת (i,j) (מספר שכני i )O O(1) מעבר על שורה i במטריצה מעבר על כל שכני i O(n) בדיקה אם הקשת קיימת והוספה/הסרה הוספת/הסרת קשת O(m+n) O(n2) סיבוכיות מקום ואם רוצים להוסיף קשת שידוע שהיא לא במבנה? - אמיר רובינשטיין

4 רשימת סמיכויות – שיפורים
- הרשימה תהיה ממוינת - במקום רשימה עץ חיפוש מאוזן - ייצוג משולב (מטריצה עם מצביע מכל תא דלוק לאיבר ברשימה המתאימה, שתהיה דו כוונית). כאן הזכרון n2, מציאת קשת והוספה/הסרה O(1), מציאת שכנים O(d). מה זה משפר? (יכול לשפר רק את הפעולות הראשונה והשלישית) - רשימה ממוינת – יכול לשפר את הפעולה Find(i,j) (אם הגענו לקשת שהולכת לצומת גדול יותר אז מפסיקים את החיפוש ומחזירים "אין קשת"), אבל זה לא עוזר במקרה הגרוע. - עץ - הופך את הפעולות לזמן לוגריתמי. אם הוספת דורשת O(1) (כשידוע שהקשת לא במבנה) והגרף מאוד דינמי, אז זה פחות טוב. - ייצוג משולב פחות טוב בזכרון. - אמיר רובינשטיין

5 פתרון ראשון – Union/Find
גרף קשיר גרף לא מכוון נקרא קשיר אם בין כל זוג קדקדים u ו- v קיים מסלול uv. (לגבי גרף מכוון קיים המושג קשיר היטב – אם יש מסלול בשני הכיוונים). בעיה: מצא ייצוג לגרף לא מכוון שיאפשר לקבוע ביעילות האם הגרף קשיר או לא זמן אתחול לא נכלל. פתרון ראשון – Union/Find x=n //מספר רכיבי הקשירות for each (u,v) E if ( Find(u)  Find(v) ) Union(u,v) x-- if x=1 return “קשיר“ else return “לא קשיר" O(m log*n) - אמיר רובינשטיין

6 פתרון שני ב- O(m) נבצע סריקה מקדקד מסויים – "נצבע" את כל הצמתים שניתן להגיע אליהם ממנו (למעשה זה BFS). אם צבענו n צמתים הגרף קשיר, אחרת לא קשיר. מטריצה או רשימה? עדיף רשימה בגלל שהמעבר על שכנים יעיל יותר. שלב ראשון: נבדוק אם לצומת 1 יש שכנים. אם לא הגרף אינו קשיר. מיזוג רכיבי קשירות ע"י מיזוג רשימות שכנים: - מספר רכיבי קשירות x=n// אתחל מצביע p לתחילת רשימת השכנויות של צומת 1. סמן את 1 כממוזג. כל עוד pNULL אם הצומת u המוצבע ע"י p אינו ממוזג עדיין: - הוסף את רשימת u לסוף רשימת 1. - סמן את u כממוזג. - קדם את המצביע p לאיבר הבא ברשימת 1. - x--. קדם את p איבר אחד קדימה. - אם x==1 הדפס "קשיר" אחרת הדפס "לא קשיר". בשביל שזה יהיה ב- O(1) נחזיק מצביעים לסופי הרשימות - אמיר רובינשטיין

7 amirrub@cs - אמיר רובינשטיין
פתרון שני ב- O(m) ואם רוצים גם להחזיר כמה רכיבי קשירות ישנם בגרף? נחזיק מונה למספר הרכיבים. לאחר סיום הפרוצדורה הנ"ל שהתחילה מצומת 1 נגדיל את המונה, ונעבור לצומת הבא שלא מוזג, ונעשה אותו דבר, עד שנסיים. המעבר לצומת הבא שלא מוזג לוקח O(n). ניתן לשפר ע"י החזקת רשימה מקושרת במקום מערך, וכאשר צומת ממוזג נמחק אותו מהרשימה. כך מעבר לצומת הבא שלא מוזג עדיין לוקח O(1). האם זה משפר באמת? אם הגרף קשיר  mn-1 אז זה לא משפר. - אמיר רובינשטיין

8 amirrub@cs - אמיר רובינשטיין
אלגוריתמים בגרפים בהרצאות: 1. מיון טופולוגי: O(m+n). 2. מציאת עץ-פורש-מינימום: O(m+nlogn), O(n2). בתרגול: מציאת מסלול קל ביותר מצומת נתון: O((m+n)logn), O(n2). מציאת מסלול קל ביותר - Shortest Path נתון: גרף G(V,E) ופונקציה w המגדירה לכל קשת משקל אי-שלילי משקלו של מסלול מוגדר כסכום משקלי הקשתות עליו. מטרה: למצוא מסלול קל ביותר מצומת מסויים s לכל צומת אחר בגרף. לדוגמא: מהם המסלולים הקלים ביותר מ- s לשאר צמתי הגרף? - אמיר רובינשטיין

9 amirrub@cs - אמיר רובינשטיין
מציאת מסלול קל ביותר נתון: גרף G(V,E) ופונקציה w המגדירה לכל קשת משקל אי-שלילי משקלו של מסלול מוגדר כסכום משקלי הקשתות עליו. מטרה: למצוא מסלול קל ביותר מצומת מסויים s לכל צומת אחר בגרף. האלגוריתם של Dijkstra - אמיר רובינשטיין

10 amirrub@cs - אמיר רובינשטיין
האלגוריתם של Dijkstra סיבוכיות: 1. רשימת סמיכויות ומערך של ערכי d(v). O(n2 ) + O(m) = O(m+ n2) = O(n2) 2. במקום מערך נשמור את ערכי d(v) בערימה. O(nlogn) + O(mlogn) = O((m+n) logn) 3א' 3ב' 3א' 3ב' - אמיר רובינשטיין


Download ppt "גרפים - Graphs גרף G(V,E) מורכב מקבוצת צמתים V וקבוצת קשתות E."

Similar presentations


Ads by Google