Download presentation
Presentation is loading. Please wait.
Published byYuliana Hadiman Modified over 6 years ago
1
فصل ششم: گراف ها اهداف آشنايي با گراف ماتريس مجاورتي جستجوي گراف
شبکه ها 1
2
فصل ششم : گراف ها هر گراف G شامل دو مجموعه V وE است :
V(G) و E(G) : مجموعه رئوس و لبه هاي گراف G را نمايش مي دهند. براي نمايش گراف هم مي توانيم بنويسيم G=(V ، E) 2
3
1-6 گراف ها در يک گراف بدون جهت، زوج رئوس ، زوج مرتب نيستند ، بنابراين زوج هاي با هم يکسانند. در يک گراف جهت دار هر لبه با زوج مرتب نمايش داده مي شود. vj انتها و vi ابتداي لبه هستند. بنابراين و دو لبه متفاوت را نمايش مي دهند. 3
4
1-6 گراف ها براي گراف بدون جهت ، لبه ها به صورت خطوط يا منحني نمايش داده مي شوند. براي گراف هاي جهت دار لبه ها به صورت فلش هايي که از انتها به ابتدا رسم شده است ، ارايه مي گردند. مثال 1 2 2 1 F 6 4 3 2 1 3 بدون جهت جهت دار 4
5
1-6 محدوديت هاي گراف ها محدوديت هاي زير بر روي گراف ها اعمال مي شود :
يک گراف فاقد لبه اي از يک راس مانندi ، به خودش مي باشد. اين مطلب بدين معني است که لبه غير معتبر مي باشد. يک گراف فاقد رويداد چندگانه از يک لبه مي باشد. گراف کامل : گراف کامل گرافي است که داراي حداکثر تعداد لبه باشد. 5
6
1-6 گراف ها براي يک گراف بدون جهت با n راس ، حداکثر تعداد لبه ها ، تعداد متمايز و غيرمرتب زوج هاي ، i ≠ j مي باشد. اين تعداد برابر است با : n(n-1 ) / 2 اگرگراف جهت داري با n گره وجود داشته باشد، بيشترين تعداد لبه هاي آن برابر است با : n(n-1) 6
7
1-6 گراف ها اگر يک لبه در گراف بدون جهت باشد ، مي گوييم رئوس و دو راس مجاور و لبه يک لبه متلاقي روي و است . يک زير گراف G، گرافي است مانند به نحوي که و باشد. 7
8
1-6 گراف ها طول يک مسير تعداد لبه هاي موجود در آن است.
مسير ساده ، مسيري است که همه رئوس آن به جز اولي و آخري مجزا باشند. حلقه يا سيکل ، يک مسيرساده است که اولين و آخرين راس آن يکي باشد. 2 1 3 براي مثال 0،1،2،0 يک حلقه در است. 8
9
1-6 گراف ها در گراف بدون جهت مانند G ، دو راس و را متصل مي گويند، اگر مسيري در G از به وجود داشته باشد. يک گراف بدون جهت را متصل مي ناميم اگر براي هر زوج راس در V(G) ،مسيري از به در G وجود داشته باشد. يک مولفه اتصال يا به طور ساده تر يک مولفه ، در گراف بدون جهت ، بزرگترين زيرگراف متصل آن است. 9
10
1-6 گراف ها يک گراف جهت دار کاملا متصل ناميده مي شود ، اگر براي هر زوج از رئوس در V(G) ، مسيري جهت دار از به و همچنين از به وجود داشته باشد. يک مولفه کاملا متصل ، بزرگترين زيرگرافي است که کاملا متصل باشد. 1 2 1 2 مولفه کاملا متصل مثال 10
11
1-6 گراف ها درجه يک راس تعداد لبه هاي متلاقي با آن راس است .
اگر در گراف G با n راس ، درجه راس i و e تعداد لبه ها باشد ، به آساني مي توان ديد که تعداد لبه ها برابر است با : 11
12
1-6 نمايش گراف نمايش گراف ها به سه صورت است : ماتريس مجاورتي
ليست هاي مجاورتي ليست هاي چندگانه 12
13
1-6 ماتريس مجاورتي فرض کنيد G=(V,E) يک گراف با n راس باشد ، n ≥ 1، ماتريس مجاورتي گراف G يک آرايه دوبعدي n × n به نام adj_mat مي باشد. اگر لبه (براي گراف جهت دار ) در E(G) باشد ، آنگاه adj_mat[i] [j]= 0 خواهد بود. ماتريس مجاورتي براي يک گراف بدون جهت متقارن است زيرا لبه در E(G) خواهد بود ، اگر و تنها اگر لبه نيز در E(G) باشد 13
14
6-1 ماتريس مجاورتي (مثال )
2 1 3 1 2 3 ماتريس مجاورتي 14
15
1-6 ماتريس مجاورتي براي گراف بدون جهت ، درجه هر راس مانند i مجموع عناصر سطري آن است : براي يک گراف جهت دار ، مجموع سطري ، درجه خارجه و مجموع ستوني ، درجه وارده خواهد بود. 15
16
6-1 ليست هاي مجاورتي با اين نمايش ، n سطر ماتريس مجاورتي در n ليست پيوندي قرار مي گيرد. براي هرراس از گراف G ، يک ليست وجود دارد. هر گره حداقل دو فيلد دارد : راس و اتصال در هر ليست مشخصي مانند i ، گره هاي ليست حاوي رئوس مجاور از راس i مي باشند. در يک گراف بدون جهت با n راس و e لبه ، n گره head و 2e گره ليست دارد. هر گره ليست دو فيلد لازم دارد. 16
17
6-1 ليست هاي مجاورتي(مثال)
head nodes vertex link 1 2 3 . 1 2 3 NULL 2 1 3 17
18
6-1 ليست هاي مجاورتي درجه هر راس در يک گراف بدون جهت را مي توان به سادگي با شمارش تعداد گره هاي آن در ليست مجاورتي تعيين کرد. اگر تعداد رئوس گراف G برابر با n باشد ، تعداد کل لبه ها، در زمان O( n + e ) تعيين مي شود. 18
19
1-6 يال وزن دار (لبه هاي وزني )
در ماتريس مجاورتي ، کميت 1 که نشان دهنده وجود يک لبه است را با وزن يک لبه تعويض مي کنيم. در ليست هاي مجاورتي و ليست هاي مجاورتي چندگانه ، فيلد weight به ساختار گره اضافه مي شود. گرافي که لبه هايش داراي وزن باشد ، شبکه ناميده مي شود. 19
20
2-6 اعمال ابتدايي گراف با توجه به گراف بدون جهت G(V ، E) و راس v از V(G) ميخواهيم رئوسي از G را که از v قابل دسترسي هستند، به دست آوريم (يعني همه رئوس متصل به v) . براي اين کار دو روش وجود دارد : جستجوي عمقي: روش عمقي تا حدودي شبيه پيمايش preorder يک درخت است. جستجوي رديفي (سطحي) : اين روش تا حدودي پيمايش ترتيب سطحي درخت را مجسم مي کند. در پيمايش هاي عمقي و رديفي ، فرض مي کنيم که براي نمايش گراف ها از ليست مجاورتي پيوندي استفاده شده است. 20
21
2-6 جستجوي عمقي Depth-first search (DFS)
در آغاز راس v را ملاقات مي کنيم. بعد راسي مانند w را که قبلا ملاقات نشده و مجاور به v است را انتخاب کرده و روش جستجوي عمقي را با w دنبال مي کنيم. موقعيت جاري راس v در ليست مجاورتي با قرار دادن آن در يک پشته صورت مي گيرد. در نهايت ، جستجو به راسي مانند u خواهد رسيد که فاقد هر گونه راس غيرملاقات شده در ليست مجاورتي باشد. در اين مرحله راسي از پشته انتخاب و و حذف شده و فرآيند فوق به همين صورت تا زماني كه پشته خالي نشده ادامه پيدا مي کند. بر اساس اين روش ، رئوس ملاقات شده، خارج شده و رئوس ملاقات نشده ، داخل پشته قرار مي گيرند. جستجو زماني پايان مي پذيرد که پشته تهي باشد.
22
void Graph::DFS() //Driver
{ visited = new Boolean[n]; for(int j=0 ; j<n ; j++) visited[i] = FALSE; DFS(0); delete [] visited; } void Graph::DFS(int v) visited[v] = TRUE ; print f ( “ %5d “ ، V ) ; for ( each vertex w adjacent to v) if ( !visited [w] ) DFS (w ) ;
23
2-6 جستجوي عمقي(مثال) گراف G 1 2 3 4 5 6 7 . 1 2 NULL 3 5 7 4 6 نمايش ليست هاي مجاورتي ممكن است براي ذخيره سازي گراف از ماتريس مجاورتي استفاده شده باشد
24
2-6 جستجوي عمقي(مثال) اگر روش جستجوي عمقي را از راس آغاز کنيم ، رئوس گراف G به ترتيب زير ملاقات مي شوند.
25
2-6 تحليل DFS اگر G توسط ماتريس مجاورتي نمايش داده شود ، زمان لازم براي تعيين همه رئوس مجاور به v ، O(n) است. از آنجا که حداکثر n راس مشاهده مي شود ، کل زمان خواهد شد.
26
2-6 جستجوي رديفي breadth-first search (BFS)
پيمايش را با راس v شروع نموده ، پس از ملاقات راس مزبور ، آنرا علامت گذاري مي کنيم. اول هر يک از رئوس مجاور به راس v را در ليست مجاورتي ملاقات ميکنيم. زماني که همه رئوس مجاور با راس v را ملاقات کرديم ، تمام رئوس ملاقات نشده که مجاور با اولين راس مجاور با v در ليست مجاورتي است را ملاقات مي کنيم. براي انجام اين کار ماداميکه هر راس ملاقات مي شود ، آنرا در يک صف قرار ميدهيم. هنگامي که ليست مجاورتي تمام شد، راسي را از صف حذف و با تست هر يک از رئوس در ليست مجاورتي اين فرآيند را ادامه مي دهيم. رئوس ملاقات نشده، ملاقات و سپس در صف قرار مي گيرند. رئوس ملاقات شده ناديده گرفته مي شوند. جستجو هنگامي که صف تهي گردد ، خاتمه مي يابد.
27
void Graph::BFS(int v)
{ visited = new Boolean[n]; for (int j=0 ; j<n ; j++) visited[i] = FALSE; Queue<int> q; q.Add(v); while (!q.IsEmpty()) q.Delete(v); print f ( “ %5d “ ، v) ; for ( all vertex w adjacent to v) if ( !visited [w] ) q.Add(w); visited[w] = TRUE ; } delete [] visited;
28
2-6 جستجوي سطحي(مثال) اگر روش جستجوي سطحي را از راس آغاز کنيم ، رئوس گراف G به ترتيب زير ملاقات مي شوند.
29
محاسبه مولفه هاي همبند به بخشهاي مجزاي گراف كه با يكديگر اتصال نداشته باشند مولفه هاي گراف ميگويند و مولفه هاي يك گراف با يكديگر هيچ گونه اتصالي ندارند. با استفاده از پيمايش در عمق ميتوانيم مولفه هاي همبند گراف را بدست آوريم.
30
void Graph::Components()
{ visited = new Boolean[n]; for(int j=0 ; j<n ; j++) visited[i] = FALSE; for(j=0 ; j<n ; j++) if (! visited[j]) DFS(j); OutputNewComponent(); } delete [] visited;
31
2-6 درخت هاي پوشا تعريف درخت پوشا : درختي که تعدادي از لبه ها و تمام رئوس G را در بر دارد ، درخت پوشا ناميده مي شود : گراف سه درخت پوشاي آن
32
2-6 درخت هاي پوشا چنانچه گراف G متصل باشد ، پيمايش هاي جستجوي عمقي يا جستجوي رديفي ، تمام رئوس گراف G را ملاقات مي کنند. در اين حالت با اعمال هر يک از پيمايش ها لبه هاي گراف G به دو قسمت تقسيم مي شوند : T ( براي لبه هاي درخت ) : مجموعه لبه هاي به کار رفته يا پيموده شده در جستجو مي باشد. N (براي لبه هاي غير درخت ) : مجموعه لبه هاي باقي مانده مي باشد.
33
2-6 درخت هاي پوشا درخت پوشايي که از فراخواني dfs به دست مي آيد را درخت پوشاي عمقي مي نامند. چنانچه از روش bfs استفاده شود ، درخت پوشاي حاصل را درخت پوشاي عرضي (سطحي يا رديفي) مي نامند. درخت پوشاي dfs درخت پوشاي bfs
34
2-6 درخت هاي پوشا مقصود از زير گراف حداقل ، يعني زيرگرافي که تعداد لبه هايش کمترين باشد. هر گراف متصل با n راس ، بايستي حداقل n-1 لبه داشته باشد و همه گراف ها متصل با n-1 لبه ، درخت هستند. درخت پوشا داراي n-1 لبه مي باشد. ايجاد زيرگراف هاي حداقل ، کاربردهاي متعددي در طراحي شبکه هاي ارتباطي دارد. مثال : اگر رئوس گراف G نماينده شهرها و لبه ها معرف جاده هاي ارتباطي بين شهرها بلشد ، آنگاه حداقل تعداد خطوط مورد نياز براي اتصال n شهر به يکديگر n-1 خواهد بود.
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.