Presentation is loading. Please wait.

Presentation is loading. Please wait.

ساختمان داده ها گرافها.

Similar presentations


Presentation on theme: "ساختمان داده ها گرافها."— Presentation transcript:

1 ساختمان داده ها گرافها

2 Konigsberg bridge problem (1736):

3 جواب این سوال خیر است، اما چگونه آنرا ثابت کنیم؟
پلهای کوینسبرگ اگر از یکی از خشکیها شروع کنید آیا امکان دارد که از تمام پلها حداکثر یکبار استفاده کرد و به سر جای اول بازگشت؟ C d c g A D e a b f B جواب این سوال خیر است، اما چگونه آنرا ثابت کنیم؟

4 Konigsberg = Graph Problem
مساله ی پلهای کویسنبرگ یک گراف است. تعریف گراف: گراف G شامل دو مجموعه ی V و E است. V یک مجموعه ی محدود و غیرپوچ از راسها است. E یک مجموعه از جفت-راس ها است که به هر جفت یک یال می گوییم.

5 مثال: V: 0, 1, 2, 3 E: (0,1), (0,2), (0,3) (1,2), (1,3), (2,3)
E: Empty 1 2 3 1 2 3 V: 0, 1, 2, 3 E: (0,1), (0,2), (1,3) درختان زیر مجموعه ی گرافها هستند. 1 2 3

6 تعاریف گراف: گراف بدون جهت: جفت راس ها که نماینده ی یالها هستند نامرتب هستند. (u,v) و (v,u)یکی هستند. گراف جهتدار: هر یال توسط یک زوج مرتب نمایش داده می شود. (u,v) و (v,u)یکی نیستند.

7 جهتدار و بدون جهت گراف Aبدون جهت است.
1 2 1 2 1 2 3 3 3 گراف Aبدون جهت است. (1,0) و (0,1) دو یال یکسان هستند. گراف C جهت دار است و با گراف A معادل است. گراف B جهتدار است و با A معادل نیست. یال (1,0) وجود ندارد.

8 محدودیتهای گراف فرض کنید که یالها و راسها مجموعه هستند.
دو راس یال یکسان نیستند. یال تکراری نداریم. Self 1 2 Repeated 3

9 تعاریف گراف حداکثر تعداد یالهای غیر تکراری در گراف بدون جهت با n نود برابر است با: n*(n-1) / 2 به این گراف کامل گفته می شود. Complete: 6 edges = (4 * 3) / 2 1 2 1 2 Not Complete: (4*3)/2 != 4 edges 3 3

10 تعاریف گراف اگر (u, v) یکی از یالهای E(G) باشد: مثال:
یال (u,v) با راسهای u و v تلاقی دارد. مثال: Vertex 0 is adjacent to 1 and 2 Vertex 1 is adjacent to 0, 2, and 3 Vertex 2 is adjacent to 0 and 1 Vertex 3 is adjacent to 1 Edges incident on vertex 2: (0,2), (1,2) Edges incident on vertex 3: (1,3) 1 2 3

11 تعاریف گراف زیرگراف G’ از گراف G یک گراف است که V(G ’) زیر مجموعه ی V(G) و E(G’) زیر مجموعه ی E(G) است. زیرگرافها 1 1 2 1 2 3 3 1 2

12 تعاریف گراف مسیر از راس u به راس v در گراف G دنباله ای از راسها مثل u, i1, i2, …, ik, v است که یالهای (u,i1), (i1,i2)…(ik,v) در گراف G هستند. در گراف جهتدار، جهت تمام یالها باید یکسان و درست باشد. طول مسیر برابر تعداد یالها است. مسیر ساده مسیری است که تمام راسها به جز اولی و آخری متفاوت هستند.

13 تعاریف گراف Paths from 1 to 3: (1,3) 1,3 [Simple] Length = 1
(1,0),(0,2),(2,1),(1,3) 1,0,2,1,3 Length = 4 (1,2),(2,0),(0,1),(1,3) 1,2,0,1,3 (1,0),(0,2),(2,3) 1,0,2,3 [Simple] Length = 3 Many more that repeat internally, Not simple, Length > 4 1 2 3

14 تعاریف گراف دور مسیری است که ابتدا و انتهای آن یکی هستند. Cycles to 1:
Cycles to 1: 1,0,2,3,1 1,0,2,1 1,3,2,1 1,2,1 1,0,1 1,3,1 1 2 3

15 تعاریف گراف اگر مسیری بین راسهای u و v در گراف G برقرار باشد می گوییم این دو گره متصل هستند. می گوییم گراف بدون جهت G یکپارچه است اگر و فقط اگر برای هر زوج u و v متعلق به گراف یک مسیر از u به v موجود باشد. یک جزء یکپارچه ی گراف یک زیرگراف یکپارچه ی حداکثر است. هر گراف می تواند یک یا چند جزء یکپارچه داشته باشد.

16 تعاریف گراف گراف G4: V(G4): 0,1,2,3,4,5,6,7
4 1 2 5 6 3 7 گراف G4: V(G4): 0,1,2,3,4,5,6,7 E(G4): (0,1), (0,2), (1,3), (2,3), (4,5), (5,6), (6,7) گراف G4 دو جزء یکپارچه دارد (H1 (0-3) و H2 (4-7)).

17 تعاریف گراف درخت یک گراف یکپارچه ی بدون دور است.
از هر نود یک مسیر به بقیه ی نودها وجود دارد. به خاطر عدم وجود دور این مسیر یکتا است. 1 4 2 3

18 تعاریف گراف می گوییم گراف جهتدار G قویاً یکپارچه است اگر برای هر زوج راس متعلق به V(G) مثل u و v یک مسیر جهتدار از u به v و از v به u موجود باشد. یک جزء قویاً یکپارچه یک زیرگراف بیشینه از گراف است که قویاً یکپارچه است.

19 تعاریف گراف Graph G5: V(G5): 0,1,2 E(G5): (0,1), (1,0), (1,2)
1 2 Graph G5: V(G5): 0,1,2 E(G5): (0,1), (1,0), (1,2) G5 قویاً یکپارچه نیست. (بین ۲ و ۱ مسیری وجود ندارد). زیرگرافهای H1 (0-1) و H2 (2) قویاً متصل هستند.

20 تعاریف گراف درجه ی هر نود برابر تعداد یالهایی است که با نود تلاقی دارند. در گرافهای جهتدار: درجه ی ورودی هر راس برابر یالهای وارده به آن راس هستند. درجه ی خروجی هر راس برابر یالهای خارج شده از آن راس هستند.

21 تعاریف گراف Degree of Vertices: 0, 3 => Degree 2
Degree of Vertices: 0, 3 => Degree 2 1, 2 => Degree 3 1 2 3 0 Out-Degree : 1 In-Degree: 0 1 Out-Degree : 1 In-Degree: 0 2 Out-Degree : 0 In-Degree: 2 1 2

22 تعاریف گراف برای یک گراف بدون جهت که در آن درجه ی گره ی viبا di برابر است. تعداد یالها برابر است با:

23 تعاریف گراف Degree of Vertices: 0, 3 => Degree 2
Degree of Vertices: 0, 3 => Degree 2 1, 2 => Degree 3 |E| = Sum of Degrees / 2 = ( )/2 = 10/2 = 5 {Correct!} 1 2 3 |E| max = Sum of Degrees / 2 = ( ) / 2 = 6/2 = 3 {Correct!} 1 |E| Max = ?, All Binary 2

24 نمایش گراف به چه عملکردهای نیاز داریم؟ دو طرز نمایش عمده:
مجموعه ی راسها. مجموعه ی یالها. دو طرز نمایش عمده: ماتریس مجاورت. لیست مجاورت.

25 ماتریس مجاورت گراف G = (V,E) دارای |V| = n, n >= 1
ماتریس مجاورت: یک بردار n در n دو بعدی است و A[i][j] = 1 اگر یک یال (i,j) بین i و j در E وجود داشته باشد. V0 V1 V2 V3 1 1 2 3

26 ماتریس مجاورت در ماتریس مجاورت ردیفها نماینده ی درجه ی خروجی هستند. V0
1 1 2 3

27 ماتریس مجاورت ماتریس مجاورت گرافهای بدون جهت متقارن است.
در گراف بدون جهت مجموع اعداد هر ردیف برابر درجه ی آن نود است. V0 V1 V2 V3 1 1 2 3

28 ماتریس مجاورت در گراف جهتدار درجه ی خروجی هر نود برابر جمع ردیفها و درجه ی ورودی هر نود برابر جمع ستونها است. V0 V1 V2 V3 1 1 2 3

29 ماتریس مجاورت V0 V1 V2 V3 1 جواب سوالات زیر چه می تواند باشد؟
تعداد یالهای گراف؟ O(n2-n) آیا گراف یکپارچه است؟ V0 V1 V2 V3 1 1 2 3

30 ماتریس مجاورت اگر گراف پراکنده باشد ماتریس چگونه است؟ V0 V1 V2 V3 V4
اگر گراف پراکنده باشد ماتریس چگونه است؟ V0 V1 V2 V3 V4 V5 V6 V7 1 4 5 6 1 2 7 3

31 ماتریس مجاورت ما دوست داریم برای شمردن یالها O(|E|) عمل انجام دهیم.
اما استفاده از ماتریس مجاورت منجر به O(n2) می‌شود. در گرافهای مجتمع n2 و |E| به هم نزدیک هستند. اما در گرافهای پراکنده |E| خیلی از n2 کمتر است. راه حل: استفاده از لیست پیوندی فقط یالهای موجود را ذخیره کنید. پیاده سازی آن کمی پیچیده تر است ولی موجب کاهش زمان می شود.

32 لیست مجاورت به ازای هر نود یک لیست پیوندی داریم که نشان دهنده ی نودهایی است که با این نود همسایه هستند. 1 2 1 3 1 2 2 3 3 1 2 3 ترتیب نودها در لیست پیوندی مهم نیست.

33 لیست مجاورت گراف بدون جهت: n راس و e یال.
برای محاسبه ی درجه ی هر راس باید تعداد عناصر لیست مربوطه را پیدا کنیم. هزینه ی محاسبه ی تعداد یالهای گراف برابر O(n + 2*e) است.

34 لیست مجاورت برای گرافهای جهتدار
فقط نودهایی در لیست پیوندی هر نود قرار دارند که می توان از این نود به آنها رسید و با نود همسایه هستند. محاسبه ی تعداد یالها و درجه ی خروجی هر نود راحت است. محاسبه ی درجه ی ورودی نودها راحت نیست. Array of Head Node Pointers 2 1 2 1 3 2 3 3 2 ترتیب لیست پیوندی اهمیتی ندارد.

35 لیست مجاورت برای محاسبه ی درجه ی ورودی هر نود مجبوریم لیست مجاورت را به طور معکوس بسازیم. Array of Head Node Pointers 1 1 2 1 2 3 3 3 1

36 اعمال گراف InsertVertex(Vertex v);
// Insert v into graph with no incident edges InsertEdge(Vertex u, Vertex v); // Insert edge (u,v) into graph DeleteVertex(Vertex v); // Delete v and all edges incident to it DeleteEdge(Vertex u, Vertex v); //Delete edge (u,v) from graph IsEmpty(); // if graph has no vertices return true List<Vertex> Adjacent(Vertex v); // return list of all vertices adjacent to vertex v

37 گراف وزندار Could store weights in adjacency matrix
(just need a non-zero entry) If using lists, add another field to node Mehran Ilam 1 60 40 Sarableh 2 55 50 3 Ivan


Download ppt "ساختمان داده ها گرافها."

Similar presentations


Ads by Google