Graphs - ‫גרפי - ‪Graphs‬‬ ‫גר )‪...

Info iconThis preview shows page 1. Sign up to view the full content.

View Full Document Right Arrow Icon
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: ‫גרפי - ‪Graphs‬‬ ‫גר )‪ G(V,E‬מורכב מקבוצת צמתי ‪ V‬וקבוצת קשתות ‪.E‬‬ ‫לדוגמא:‬ ‫‪v‬‬ ‫‪u‬‬ ‫‪y‬‬ ‫}‪V={u,v,w,x,y‬‬ ‫‪w‬‬ ‫‪x‬‬ ‫})‪E={(v,v), (u,v), (v,x), (u,x), (u,y‬‬ ‫‪|V| = n , |E| = m‬‬ ‫סוגי גרפי‬ ‫ גר ממושקל / לא ממושקל‬‫ גר מכוו / לא מכוו‬‫ גר פשוט / מולטי גר‬‫ ע או בלי לולאות עצמיות‬‫ גר קשיר‬‫1‬ ‫הקשר בי ‪ n‬ל- ‪ m‬בגר פשוט‬ ‫מכוו ע לולאות עצמיות –‬ ‫‪n‬‬ ‫‪0≤m≤ ‬‬ ‫‪ 2‬‬ ‫לא מכוו ללא לולאות עצמיות –‬ ‫2‪0 ≤ m ≤ n‬‬ ‫ייצוגי של גרפי‬ ‫א. מטריצת סמיכויות‬ ‫‪M‬‬ ‫ב. רשימת סמיכויות‬ ‫בתא ה- ‪ i‬יהיה מצביע לרשימה‬ ‫מקושרת שאיבריה ה שכני צומת ‪.i‬‬ ‫‪1 (i, j) ∈ E‬‬ ‫‪∀(i, j) ∈{1,2,..., n}2 M[i, j] = ‬‬ ‫‪0 (i, j) ∉ E‬‬ ‫ייצוג משקלי על הקשתות:‬ ‫ייצוג משקלי על הקשתות: ברשומות‬ ‫נשמור ג את משקלי הקשתות.‬ ‫}‪∀(i, j) ∈{1,2,..., n‬‬ ‫2‬ ‫‪w(i, j) (i, j) ∈ E‬‬ ‫‪M[i, j] = ‬‬ ‫‪(i, j) ∉ E‬‬ ‫0‪‬‬ ‫בגר לא מכוו המטריצה תהיה סימטרית.‬ ‫2‬ ‫בגר לא מכוו כל קשת מופיעה‬ ‫פעמיי )פרט לחוגי עצמיי (.‬ ‫פעולות על גרפי‬ ‫מטריצת סמיכויות‬ ‫בדיקת ]‪M[i][j‬‬ ‫)1(‪O‬‬ ‫שינוי התא המתאי .‬ ‫)1(‪O‬‬ ‫מעבר על שורה ‪ i‬במטריצה‬ ‫)‪O(n‬‬ ‫)2‪O(n‬‬ ‫הפעולה‬ ‫בדיקת קיו קשת )‪(i,j‬‬ ‫)‪Find(i,j‬‬ ‫הוספת/הסרת קשת‬ ‫)‪Insert/remove(i,j‬‬ ‫מעבר על כל שכני ‪i‬‬ ‫)‪neighbors(i‬‬ ‫סיבוכיות מקו‬ ‫רשימת סמיכויות‬ ‫מעבר על רשימת האיבר ‪i‬‬ ‫)‪ di) O(di‬היא דרגת צומת ‪(i‬‬ ‫בדיקה א הקשת קיימת )‪O(di‬‬ ‫והוספה/הסרה )1(‪O‬‬ ‫)‪O(di‬‬ ‫)‪O(m+n‬‬ ‫מעבר על רשימת האיבר ‪i‬‬ ‫הערה: ‪ di‬במקרה הגרוע שווה ל- ‪.n‬‬ ‫3‬ ‫רשימת סמיכויות – שיפורי‬ ‫1.‬ ‫2.‬ ‫3.‬ ‫הרשימה יכולה להיות ממוינת לפי הצמתי )מניחי שיש סדר בי השמות/מפתחות(.‬ ‫במקו רשימה - ע חיפוש מאוז‬ ‫ייצוג משולב: מכל תא "דלוק" במטריצה יהיה מצביע לאיבר ברשימה המתאימה,‬ ‫שתהיה דו-כוונית.‬ ‫מה זה משפר? )יכול לשפר רק את הפעולות הראשונה והשנייה(‬ ‫1.‬ ‫רשימה ממוינת - יכול לשפר את הפעולה )‪) Find(i,j‬א הגענו לקשת שהולכת לצומת‬ ‫בעל אינדקס גדול יותר אז מפסיקי את החיפוש ומחזירי "אי קשת"(.‬ ‫במקרה הגרוע זה לא משפר.‬ ‫ע - הופ את הפעולות לזמ לוגריתמי.‬ ‫א הוספת קשת מתבצעת ב- )1(‪) O‬כשידוע שהקשת אינה במבנה( אז זה פחות טוב.‬ ‫משפיע במיוחד כאשר הגר מאוד דינאמי )כלומר פעולות הוספה והסרה ה שכיחות(.‬ ‫2.‬ ‫ייצוג משולב – "נהני משני העולמות": מציאת קשת והוספה/הסרה ב- )1(‪,O‬‬ ‫מעבר על שכני ב- )‪ .O(d‬המחיר: זיכרו )2‪.O(n‬‬ ‫3.‬ ‫4‬ ‫גר קשיר‬ ‫גר לא מכוו נקרא קשיר א בי כל זוג קדקדי ‪ u‬ו- ‪ v‬קיי מסלול ‪.u v‬‬ ‫)לגבי גר מכוו קיי המושג "קשיר היטב" – א יש מסלול בשני הכיווני (.‬ ‫בעיה: מצאו ייצוג לגר לא מכוו שיאפשר לקבוע ביעילות הא הגר קשיר או לא.‬ ‫זמ אתחול לא נכלל בניתוח הסיבוכיות.‬ ‫פתרו ראשו – ‪Union/Find‬‬ ‫בהינת גר נאתחל מבנה ‪Union-Find‬‬ ‫שבו כל צומת הוא קבוצה.‬ ‫האלגורית הבא עונה על השאלה הא‬ ‫הגר קשיר.‬ ‫מה עדי ? מטריצה או רשימת סמיכויות?‬ ‫מטריצה - )‪O(n2+m·log*n‬‬ ‫רשימה - )‪) O(n+m·log*n‬עדי או שקול(‬ ‫5‬ ‫מספר רכיבי הקשירות בהתחלה // ‪x=n‬‬ ‫‪for each (u,v)Œ E‬‬ ‫) )‪if ( Find(u) π Find(v‬‬ ‫)‪Union(u,v‬‬ ‫-‪x‬‬‫1=‪if x‬‬ ‫“קשיר“ ‪return‬‬ ‫‪else‬‬ ‫"לא קשיר“ ‪return‬‬ ‫פתרו שני ב- )‪O(m‬‬ ‫נתחיל מצומת מסוי , ונבצע סריקה שבמהלכה "נצבע" את כל הצמתי שנית להגיע‬ ‫אליה מצומת זה )בשיטת ‪ BFS‬למי שמכיר(.‬ ‫א צבענו ‪ n‬צמתי הגר קשיר, אחרת הגר אינו קשיר.‬ ‫כדי שהפתרו יהיה ב- )‪ O(m‬נייצג את הגר ברשימת סמיכויות.‬ ‫6‬ ‫דוגמת הרצה‬ ‫1‬ ‫4‬ ‫5‬ ‫2‬ ‫3‬ ‫6‬ ‫‪p‬‬ ‫‪ok‬‬ ‫3‬ ‫2‬ ‫1‬ ‫‪ok‬‬ ‫1‬ ‫3‬ ‫‪ok‬‬ ‫2‬ ‫5‬ ‫1‬ ‫שלב ראשו : נבדוק א לצומת 1 יש שכני . א לא הגר לא קשיר.‬ ‫6‬ ‫‪ok‬‬ ‫3‬ ‫1‬ ‫2‬ ‫3‬ ‫4‬ ‫5‬ ‫6‬ ‫4‬ ‫3=‪X‬‬ ‫4=‪X‬‬ ‫5=‪X‬‬ ‫6=‪X‬‬ ‫בשביל שזה יהיה ב-‬ ‫)1(‪ O‬נחזיק בכל תא‬ ‫מצביע לסו הרשימה‬ ‫מיזוג רכיבי קשירות ע"י מיזוג רשימות שכני :‬ ‫ מספר רכיבי קשירות התחלתי // ‪x=n‬‬‫ אתחל מצביע ‪ p‬לתחילת רשימת הסמיכויות של צומת 1.‬‫ סמ את 1 כממוזג.‬‫ כל עוד ‪:pπNULL‬‬‫א הצומת ‪ u‬המוצבע ע"י ‪ p‬אינו ממוזג עדיי :‬ ‫ הוס את רשימת ‪ u‬לסו רשימת צומת 1.‬‫ סמ את ‪ u‬כממוזג.‬‫ קד את המצביע ‪ p‬לאיבר הבא ברשימת צומת 1.‬‫ --‪.x‬‬‫אחרת קד את ‪ p‬איבר אחד קדימה.‬ ‫ א 1==‪ x‬הדפס "קשיר" אחרת הדפס "לא קשיר".‬‫7‬ ‫מציאת מספר רכיבי הקשירות בגר‬ ‫וא רוצי ג להחזיר כמה רכיבי קשירות ישנ בגר ?‬ ‫פתרו :‬ ‫נחזיק מונה למספר הרכיבי הקשירי בגר )מאותחל ל-0(.‬ ‫לאחר סיו הפרוצדורה הנ"ל שהתחילה מצומת 1, נגדיל את המונה, ונעבור לצומת‬ ‫הבא שלא מוזג, ונעשה אותו דבר, עד שלא נותרו עוד צמתי שלא מוזגו, ונחזיר את‬ ‫ער המונה.‬ ‫סיבוכיות:‬ ‫)‪) O(m+n‬עוברי על כל ‪ m‬הקשתות וג על כל ‪ n‬התאי במער (.‬ ‫8‬ ...
View Full Document

Ask a homework question - tutors are online