فصل ششم: گراف ها اهداف آشنايي با گراف ماتريس مجاورتي جستجوي گراف

Slides:



Advertisements
Similar presentations
Graph Theory.
Advertisements

Traversals A systematic method to visit all nodes in a tree Binary tree traversals: Pre-order: root, left, right In-order: left, root, right Post-order:
Data Structures Using C++
Breadth First Search
Using nextAdjacent() To list all vertices connected to a vertex u in graph G we can use the following loop: for (int v=G.nextAdjacent(u,-1); v>=0; v=G.nextAdjacent(u,v))
CS Data Structures Chapter 6 Graphs.
CS 206 Introduction to Computer Science II 03 / 30 / 2009 Instructor: Michael Eckmann.
GRAPHS Education is what remains after one has forgotten what one has learned in school. Albert Einstein Albert Einstein Smitha N Pai.
Graphs. Motivating Problem Konigsberg bridge problem (1736): Konigsberg bridge problem (1736): C A B D ab c d e f g Starting in one land area, is it possible.
Copyright Networking Laboratory Chapter 6. GRAPHS Horowitz, Sahni, and Anderson-Freed Fundamentals of Data Structures in C, 2nd Edition Computer.
Been-Chian Chien, Wei-Pang Yang, and Wen-Yang Lin 6-1 Chapter 6 Graphs Introduction to Data Structure CHAPTER 6 GRAPHS 6.1 The Graph Abstract Data Type.
E.G.M. PetrakisGraphs1  Graph G(V,E): finite set V of nodes (vertices) plus a finite set E of arcs (or edges) between nodes  V = {A, B, C, D, E, F, G}
Binary Search Trees Berlin Chen 陳柏琳 台灣師範大學資工系 副教授 參考資料來源:
 What is a graph? What is a graph?  Directed vs. undirected graphs Directed vs. undirected graphs  Trees vs graphs Trees vs graphs  Terminology: Degree.
Graphs – Part II CS 367 – Introduction to Data Structures.
Data Structures CSCI 132, Spring 2014 Lecture 38 Graphs
1 Directed Graphs Chapter 8. 2 Objectives You will be able to: Say what a directed graph is. Describe two ways to represent a directed graph: Adjacency.
Traversing a tree means visiting each node in a specified order. There are different ways to traverse a tree. Tree Traversing Depth first search Pre-orderIn-orderPost-order.
Graphs 2015, Fall Pusan National University Ki-Joune Li.
Lecture #13. Topics 1.The Graph Abstract Data Type. 2.Graph Representations. 3.Elementary Graph Operations.
Graphs. What is a graph? In simple words, A graph is a set of vertices and edges which connect them. A node (or vertex) is a discrete position in the.
Representing Graphs Depth First Search Breadth First Search Graph Searching Algorithms.
Review Graph Directed Graph Undirected Graph Sub-Graph Spanning Sub-Graph Degree of a Vertex Weighted Graph Elementary and Simple Path Link List Representation.
BCA-II Data Structure Using C Submitted By: Veenu Saini
Data Structures & Algorithm Analysis lec(8):Graph T. Souad alonazi
Graphs A New Data Structure
CSE 373 Data Structures and Algorithms
CSE 373, Copyright S. Tanimoto, 2002 Graphs 2 -
CS212: Data Structures and Algorithms
Instructor : Prof. Jyh-Shing Roger Jang
Chapter 13: The Graph Abstract Data Type
UNIT – III PART - II Graphs By B VENKATESWARLU, CSE Dept.
Data Structures 13th Week
Data Structures and Algorithms
Java Programming: Program Design Including Data Structures
Csc 2720 Instructor: Zhuojun Duan
Graph Search Lecture 17 CS 2110 Fall 2017.
Unit 3 Graphs.
CC 215 Data Structures Graph Searching
Data Structures and Algorithms for Information Processing
CSC 172 DATA STRUCTURES.
Graph Traversals Depth-First Traversals. Algorithms. Example.
CHAPTER 6 GRAPHS All the programs in this file are selected from
Graph Search Lecture 17 CS 2110 Spring 2018.
BFS,DFS Topological Sort
BFS,DFS Topological Sort
Tree data structure.
Can you get there from here?
Graph Representation (23.1/22.1)
6.1.3 Graph representation.
2018, Fall Pusan National University Ki-Joune Li
Graphs.
What is a Graph? a b c d e V= {a,b,c,d,e} E= {(a,b),(a,c),(a,d),
Graph Traversals Depth-First Traversals. Algorithms. Example.
Graphs Part 2 Adjacency Matrix
2017, Fall Pusan National University Ki-Joune Li
Teknik Informatika - Universitas Muhammadiyah Malang (UMM)
Graphs – Adjacency Matrix
Lecture 2 – Searching.
CSE 373 Data Structures Lecture 16
What is a Graph? a b c d e V= {a,b,c,d,e} E= {(a,b),(a,c),(a,d),
Algorithms: Design and Analysis
Depth-First Search CSE 2011 Winter April 2019.
GRAPHS G=<V,E> Adjacent vertices Undirected graph
Chapter 16 1 – Graphs Graph Categories Strong Components
Chapter 14 Graphs © 2011 Pearson Addison-Wesley. All rights reserved.
Graph Search in C++ Andrew Lindsay.
Graph Traversals Depth-First Traversals. Algorithms. Example.
INTRODUCTION A graph G=(V,E) consists of a finite non empty set of vertices V , and a finite set of edges E which connect pairs of vertices .
Presentation transcript:

فصل ششم: گراف ها اهداف آشنايي با گراف ماتريس مجاورتي جستجوي گراف شبکه ها 1

فصل ششم : گراف ها هر گراف G شامل دو مجموعه V وE است : V(G) و E(G) : مجموعه رئوس و لبه هاي گراف G را نمايش مي دهند. براي نمايش گراف هم مي توانيم بنويسيم G=(V ، E) 2

1-6 گراف ها در يک گراف بدون جهت، زوج رئوس ، زوج مرتب نيستند ، بنابراين زوج هاي با هم يکسانند. در يک گراف جهت دار هر لبه با زوج مرتب نمايش داده مي شود. vj انتها و vi ابتداي لبه هستند. بنابراين و دو لبه متفاوت را نمايش مي دهند. 3

1-6 گراف ها براي گراف بدون جهت ، لبه ها به صورت خطوط يا منحني نمايش داده مي شوند. براي گراف هاي جهت دار لبه ها به صورت فلش هايي که از انتها به ابتدا رسم شده است ، ارايه مي گردند. مثال 1 2 2 1 F 6 4 3 2 1 3 بدون جهت جهت دار 4

1-6 محدوديت هاي گراف ها محدوديت هاي زير بر روي گراف ها اعمال مي شود : يک گراف فاقد لبه اي از يک راس مانندi ، به خودش مي باشد. اين مطلب بدين معني است که لبه غير معتبر مي باشد. يک گراف فاقد رويداد چندگانه از يک لبه مي باشد. گراف کامل : گراف کامل گرافي است که داراي حداکثر تعداد لبه باشد. 5

1-6 گراف ها براي يک گراف بدون جهت با n راس ، حداکثر تعداد لبه ها ، تعداد متمايز و غيرمرتب زوج هاي ، i ≠ j مي باشد. اين تعداد برابر است با : n(n-1 ) / 2 اگرگراف جهت داري با n گره وجود داشته باشد، بيشترين تعداد لبه هاي آن برابر است با : n(n-1) 6

1-6 گراف ها اگر يک لبه در گراف بدون جهت باشد ، مي گوييم رئوس و دو راس مجاور و لبه يک لبه متلاقي روي و است . يک زير گراف G، گرافي است مانند به نحوي که و باشد. 7

1-6 گراف ها طول يک مسير تعداد لبه هاي موجود در آن است. مسير ساده ، مسيري است که همه رئوس آن به جز اولي و آخري مجزا باشند. حلقه يا سيکل ، يک مسيرساده است که اولين و آخرين راس آن يکي باشد. 2 1 3 براي مثال 0،1،2،0 يک حلقه در است. 8

1-6 گراف ها در گراف بدون جهت مانند G ، دو راس و را متصل مي گويند، اگر مسيري در G از به وجود داشته باشد. يک گراف بدون جهت را متصل مي ناميم اگر براي هر زوج راس در V(G) ،مسيري از به در G وجود داشته باشد. يک مولفه اتصال يا به طور ساده تر يک مولفه ، در گراف بدون جهت ، بزرگترين زيرگراف متصل آن است. 9

1-6 گراف ها يک گراف جهت دار کاملا متصل ناميده مي شود ، اگر براي هر زوج از رئوس در V(G) ، مسيري جهت دار از به و همچنين از به وجود داشته باشد. يک مولفه کاملا متصل ، بزرگترين زيرگرافي است که کاملا متصل باشد. 1 2 1 2 مولفه کاملا متصل مثال 10

1-6 گراف ها درجه يک راس تعداد لبه هاي متلاقي با آن راس است . اگر در گراف G با n راس ، درجه راس i و e تعداد لبه ها باشد ، به آساني مي توان ديد که تعداد لبه ها برابر است با : 11

1-6 نمايش گراف نمايش گراف ها به سه صورت است : ماتريس مجاورتي ليست هاي مجاورتي ليست هاي چندگانه 12

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

6-1 ماتريس مجاورتي (مثال ) 0 1 2 3 2 1 3 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 2 3 ماتريس مجاورتي 14

1-6 ماتريس مجاورتي براي گراف بدون جهت ، درجه هر راس مانند i مجموع عناصر سطري آن است : براي يک گراف جهت دار ، مجموع سطري ، درجه خارجه و مجموع ستوني ، درجه وارده خواهد بود. 15

6-1 ليست هاي مجاورتي با اين نمايش ، n سطر ماتريس مجاورتي در n ليست پيوندي قرار مي گيرد. براي هرراس از گراف G ، يک ليست وجود دارد. هر گره حداقل دو فيلد دارد : راس و اتصال در هر ليست مشخصي مانند i ، گره هاي ليست حاوي رئوس مجاور از راس i مي باشند. در يک گراف بدون جهت با n راس و e لبه ، n گره head و 2e گره ليست دارد. هر گره ليست دو فيلد لازم دارد. 16

6-1 ليست هاي مجاورتي(مثال) head nodes vertex link 1 2 3 . 1 2 3 NULL 2 1 3 17

6-1 ليست هاي مجاورتي درجه هر راس در يک گراف بدون جهت را مي توان به سادگي با شمارش تعداد گره هاي آن در ليست مجاورتي تعيين کرد. اگر تعداد رئوس گراف G برابر با n باشد ، تعداد کل لبه ها، در زمان O( n + e ) تعيين مي شود. 18

1-6 يال وزن دار (لبه هاي وزني ) در ماتريس مجاورتي ، کميت 1 که نشان دهنده وجود يک لبه است را با وزن يک لبه تعويض مي کنيم. در ليست هاي مجاورتي و ليست هاي مجاورتي چندگانه ، فيلد weight به ساختار گره اضافه مي شود. گرافي که لبه هايش داراي وزن باشد ، شبکه ناميده مي شود. 19

2-6 اعمال ابتدايي گراف با توجه به گراف بدون جهت G(V ، E) و راس v از V(G) ميخواهيم رئوسي از G را که از v قابل دسترسي هستند، به دست آوريم (يعني همه رئوس متصل به v) . براي اين کار دو روش وجود دارد : جستجوي عمقي: روش عمقي تا حدودي شبيه پيمايش preorder يک درخت است. جستجوي رديفي (سطحي) : اين روش تا حدودي پيمايش ترتيب سطحي درخت را مجسم مي کند. در پيمايش هاي عمقي و رديفي ، فرض مي کنيم که براي نمايش گراف ها از ليست مجاورتي پيوندي استفاده شده است. 20

2-6 جستجوي عمقي Depth-first search (DFS) در آغاز راس v را ملاقات مي کنيم. بعد راسي مانند w را که قبلا ملاقات نشده و مجاور به v است را انتخاب کرده و روش جستجوي عمقي را با w دنبال مي کنيم. موقعيت جاري راس v در ليست مجاورتي با قرار دادن آن در يک پشته صورت مي گيرد. در نهايت ، جستجو به راسي مانند u خواهد رسيد که فاقد هر گونه راس غيرملاقات شده در ليست مجاورتي باشد. در اين مرحله راسي از پشته انتخاب و و حذف شده و فرآيند فوق به همين صورت تا زماني كه پشته خالي نشده ادامه پيدا مي کند. بر اساس اين روش ، رئوس ملاقات شده، خارج شده و رئوس ملاقات نشده ، داخل پشته قرار مي گيرند. جستجو زماني پايان مي پذيرد که پشته تهي باشد.

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 ) ;

2-6 جستجوي عمقي(مثال) گراف G 1 2 3 4 5 6 7 . 1 2 NULL 3 5 7 4 6 نمايش ليست هاي مجاورتي ممكن است براي ذخيره سازي گراف از ماتريس مجاورتي استفاده شده باشد

2-6 جستجوي عمقي(مثال) اگر روش جستجوي عمقي را از راس آغاز کنيم ، رئوس گراف G به ترتيب زير ملاقات مي شوند.

2-6 تحليل DFS اگر G توسط ماتريس مجاورتي نمايش داده شود ، زمان لازم براي تعيين همه رئوس مجاور به v ، O(n) است. از آنجا که حداکثر n راس مشاهده مي شود ، کل زمان خواهد شد.

2-6 جستجوي رديفي breadth-first search (BFS) پيمايش را با راس v شروع نموده ، پس از ملاقات راس مزبور ، آنرا علامت گذاري مي کنيم. اول هر يک از رئوس مجاور به راس v را در ليست مجاورتي ملاقات ميکنيم. زماني که همه رئوس مجاور با راس v را ملاقات کرديم ، تمام رئوس ملاقات نشده که مجاور با اولين راس مجاور با v در ليست مجاورتي است را ملاقات مي کنيم. براي انجام اين کار ماداميکه هر راس ملاقات مي شود ، آنرا در يک صف قرار ميدهيم. هنگامي که ليست مجاورتي تمام شد، راسي را از صف حذف و با تست هر يک از رئوس در ليست مجاورتي اين فرآيند را ادامه مي دهيم. رئوس ملاقات نشده، ملاقات و سپس در صف قرار مي گيرند. رئوس ملاقات شده ناديده گرفته مي شوند. جستجو هنگامي که صف تهي گردد ، خاتمه مي يابد.

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;

2-6 جستجوي سطحي(مثال) اگر روش جستجوي سطحي را از راس آغاز کنيم ، رئوس گراف G به ترتيب زير ملاقات مي شوند.

محاسبه مولفه هاي همبند به بخشهاي مجزاي گراف كه با يكديگر اتصال نداشته باشند مولفه هاي گراف ميگويند و مولفه هاي يك گراف با يكديگر هيچ گونه اتصالي ندارند. با استفاده از پيمايش در عمق ميتوانيم مولفه هاي همبند گراف را بدست آوريم.

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;

2-6 درخت هاي پوشا تعريف درخت پوشا : درختي که تعدادي از لبه ها و تمام رئوس G را در بر دارد ، درخت پوشا ناميده مي شود : گراف سه درخت پوشاي آن

2-6 درخت هاي پوشا چنانچه گراف G متصل باشد ، پيمايش هاي جستجوي عمقي يا جستجوي رديفي ، تمام رئوس گراف G را ملاقات مي کنند. در اين حالت با اعمال هر يک از پيمايش ها لبه هاي گراف G به دو قسمت تقسيم مي شوند : T ( براي لبه هاي درخت ) : مجموعه لبه هاي به کار رفته يا پيموده شده در جستجو مي باشد. N (براي لبه هاي غير درخت ) : مجموعه لبه هاي باقي مانده مي باشد.

2-6 درخت هاي پوشا درخت پوشايي که از فراخواني dfs به دست مي آيد را درخت پوشاي عمقي مي نامند. چنانچه از روش bfs استفاده شود ، درخت پوشاي حاصل را درخت پوشاي عرضي (سطحي يا رديفي) مي نامند. درخت پوشاي dfs درخت پوشاي bfs

2-6 درخت هاي پوشا مقصود از زير گراف حداقل ، يعني زيرگرافي که تعداد لبه هايش کمترين باشد. هر گراف متصل با n راس ، بايستي حداقل n-1 لبه داشته باشد و همه گراف ها متصل با n-1 لبه ، درخت هستند. درخت پوشا داراي n-1 لبه مي باشد. ايجاد زيرگراف هاي حداقل ، کاربردهاي متعددي در طراحي شبکه هاي ارتباطي دارد. مثال : اگر رئوس گراف G نماينده شهرها و لبه ها معرف جاده هاي ارتباطي بين شهرها بلشد ، آنگاه حداقل تعداد خطوط مورد نياز براي اتصال n شهر به يکديگر n-1 خواهد بود.