Graphs basic definitions for CS

גרף

גרף הוא זוג סדור G=(V,E) כאשר V היא קבוצת קודקודים ו E קבוצת הקשתות - E={{u,v} | u,vV}
לגרף פשוט (גרפים שאין בהם לולאות כלומר קשת מקודקוד לאותו קודקוד, ואין קשתות מקבילות כלומר הקשת מ א ל ב שקולה לקשת מ ב ל א. ) עם n קודקודים יש לכל היותר (n2) קשתות.

גרף מכוון

גרף הוא מכוון אם סדר הקודקודים בקשת משנה , כלומר עבור קשת eE שמקשת u,v היא זוג סדור (u,v) . נאמר ש e מכוונת מ u ל v
Pasted image 20221128115421.png|100
בגרף מכוון ייתכן מקרה שבו קשת יוצאת מקודקוד לזה, זה נקרא self loop

גרף לא מכוון

גרף הוא לא מכוון אם סדר הקודקודים בקשת לא משנה , עבור קשת e={u,v}
Pasted image 20221128132722.png|100
בגרף לא מכוון אין לולאות עצמיות.

הדרגה של קודקוד

בגרף לא מכוון

הדרגה של uV בגרף לא מכוון היא מספר הקשתות שמכילות את u . סימון- deg(u) ומתקיים (למת לחיצת הידיים)

uVdeg(u)=2|E|

בגרף מכוון

הדרגה היוצאת של קודקוד uV הוא מספר הקשתות מ u ומסמנים outdeg(u) . באופן דומה, הדרגה הנכנסת של קודקוד uV היא מספר הקשתות ל u ומסומנת indeg(u) ומתקיים

uVindeg(u)=uVoutdeg(u)=|E|

קודקודים שכנים

בגרף מכוון ולא מכוון , אם יש קשת בין u,v נאמר שהם שכנים .

מסלול

מסלול P בגרף G(V,E) (מכוון או לא מכוון) הוא סדרה של קדוקדוים P=(v0,v1,,vn) כאשר 0in1:(vi,vi+1)E
ניתן לייצר מסלול גם על ידי קשתות P=(e1,e2,,en) כאשר 1ik:(vi1,vi)=ei. במקרה זה נאמר שהמסלול הוא מאורך n (מספר הקשתות)

  1. אם לכל ij מתקיים vivj נאמר ש המסלול פשוט .
  2. אם v0=vn נאמר ש P מהווה מעגל
  3. תת מסלול P של P P=(vi,vi+1,,vj) כאשר 0ijn .
  4. המסלול ההפוך של P מסומן PR=(vn,vn1,,v0)

רכיב קשירות

בגרף לא מכוון G=(V,E) רכיב קשירות של G הוא תת #גרף קשיר מקסימלי, כלומר קבוצת קודדקודים מקסימלית CV כך שלכל זוג קודקודים u,vC קיים מסלול מ u ל v ב G.

Pasted image 20221128144653.png|250

גרף קשיר

גרף לא מכוון 𝑮 נקרא קשיר אמ"מ 𝑉 רכיב קשירות.
Pasted image 20221128144759.png|250

רכיב קשירות חזק

עבור גרף מכוון G=(V,E) , רכיב קשירות חזק ב-𝐺 הוא קבוצה מקסימלית של קודקודים CV כך שלכל זוג קודקודים u,vC, קיים מסלול מ u ל v ומסלול מ v ל u ב G

Pasted image 20221128145318.png|450

גרף קשיר חזק

גרף מכוון G=(V,E) נקרא קשיר חזק אמ"מ 𝑉 רכיב קשירות חזק .

Pasted image 20221128145604.png|250

יער ועצים

יער : גרף לא מכוון ללא מעגלים

עץ : יער קשיר

עלה : ביער עלה הוא קודקוד עם דרגה 1.

Pasted image 20221128145724.png|250

תכונות

  1. אם גרף G=(V,E) הוא קשיר, אז |E||V|1
    נוכיח באינדוקצייה על מספר הקודקודים:
    בסיס :
    עבור |V|=0 אין קשתות ולכן |E|=001=1 .
    עבור |V|=1 , גרף קשיר שזה רק קודקוד אחד ולכן מתקיים באותו אופן כמו למעלה.
    צעד:
    נניח שהטענה נכונה עבור מספר קודקודים לפחות 2 כלומר |V|=n2,|E|n1 ונוכיח עבור גרף קשיר עם n+1 קודקודים כלומר |E|n
    נב״ש שמספר הקשתות E קטן מ n.
    לפי למת לחיצת הידיים מתקיים
vVdeg(v)<2n

ז״א שקיים לפחות קודקוד אחד u כך ש deg(u)1 (כי יש n+1 קודקודים)

|E|1n1|E|n

לא הגיוני שיש יותר או מספר זהה של קשתות מקודקודים בגרף לא מכוון בסתירה .

  1. יהי G(V,E) גרף קשיר לא ריק אזי: G עץ אמ״מ |E|=|V|1

  2. יהי G(V,E) גרף עם k רכיבי קשירות אזי: G יער אמ״מ |E|=|V|k

  3. יהי G=(V,E) גרף לא מכוון אזי G עץ אמ״מ עבור כל זוג קודקודים קיים בידיוק מסלול פשוט אחד בינהם.

  4. עבור גרף T=(V,E) עץ סופי עם |V|2 , עץ זה חייב להכיל עלה.
    נניח בשלילה שלא קיים עלה בT ויהיו P=(v0,v1,,vk) עם k קשתות המסלול הארוך ביותר בT . נתבונן ב v0 , לפי ההנחה הוא לא עלה ולכן דרגתו גדולה או שווה ל2, כלומר ישלו לפחות 2 שכנים שאחד מהם הוא v1 . נסמן את השני ב w .
    נשים לב ש wP אחרת היה מעגל בעץ וזו סתירה. כלומר נוכל להאריך את P על ידי הגדרתו באופן הבא

P=(w,v0,v1,,vk)

וקיבלנו מסלול ארוך יותר בגודל k+1 בסתירה לכך ש k הוא אורך המסלול הארוך ביותר.

עץ פורש

עץ פורש לגרף קשיר G=(V,E) הוא עץ T=(V,ET) כאשר ETE כלומר T הוא תת גרף של G שהוא עץ.

מולטי גרף

אם קבוצת הקשתות היא multi-set , כלומר קשתות יכולות להופיע יותר מפעם אחת, אז הגרף G נקרא מולטי גרף.
במולטי גרף ייתכנו יותר מקשת אחת בין שני קודקודים, גם אם הקשתות לא מכוונות.
Pasted image 20221128164414.png|150

ייצוג גרפים בקוד

מטריצת שכנויות adjacency matrix

מייצגים את הגרף על ידי מטריצה בוליאנית בגודל |V|×|V| כאשר התא (i,j) הוא 1 אמ״מ קיימת קשת בין vi ל vj ב G.
נשים לב שאם הגרף לא מכוון נקבל מטריצה סימטרית, בנוסף האלכסון כולו אפסים כי לא תתכן קשת מקודקוד לעצמו.
הייצוג הזה משתמש ב O(|V|2) זכרון.

Pasted image 20221128164728.png

רשימת שכנויות adjacency list

מייצגים את הגרף ע"י מערך של רשימות , המערך בגודל |V| והתא ה i במערך מצביע לרשימה של השכנים של vi , משתמשים בזכרון O(|V|+|E|)

Pasted image 20221128165704.png

זמני ריצה

מטריצת שכנויות רשימת שכנויות
מקום O(V2) O(V+E)
האם (u,v)E O(1) O(log(min(deg(u),deg(v))))
מעבר על כל שכני uV O(V) O(deg(u))
סריקת כל הקשתות O(V2) O(V+E)