Transcript
Page 1: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

:مدرسفرشید شیرافکن

دانشگاه تهران دانشجوی دکتری (بیو انفورماتیک: دکتری( )کامپیوتر نرم افزار: کارشناسی و کارشناسی ارشد )

فصل هفتم

گراف

1

فرادرس

FaraDars.org

Page 2: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

تعریف

2

Gگراف = (V,E)،مجموعهدوشاملVوEاست.V:رئوسازغيرتهيومحدودمجموعهE:(يال)رئوسزوجازمجموعه‌اي

گرافانواع:جهت دار-1

باشد،داشتهاهميتمرتبزوجدرگره‌هاترتيب:جهت دارغیر-2

.باشدنداشتهاهميتيالهامجموعهدررأسدوجايآندركهگرافي

فرادرس

FaraDars.org

Page 3: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

تعریف

3

مثال

فرادرس

FaraDars.org

Page 4: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

درجه گراف

مثال

4

ab

cd

deg-(a) = 1

deg+(a) = 2

deg-(d) = 2

deg+(d) = 1

deg-(c) = 0

deg+(c) = 2

deg-(b) = 4

deg+(b) = 2فرادرس

FaraDars.org

Page 5: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

گراف‌چند‌گانه

.‌‌مجاز‌باشد(Multi Edge)گرافي‌كه‌در‌آن‌يالهاي‌چندگانه‌

5

فرادرس

FaraDars.org

Page 6: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

گراف‌كامل

.‌آن‌رسم‌شده‌باشديالهاي‌گراف‌بدون‌جهتي‌كه‌همه‌

:‌‌يالهايتعداد‌n-1:‌هر‌يک‌از‌گره‌ها‌درجه‌

6

2

)1( nn فرادرس

FaraDars.org

Page 7: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

گراف‌همبند

.گرافي‌كه‌يک‌مسير‌بين‌هر‌دو‌گره‌آن‌وجود‌داشته‌باشد:يک‌گراف‌ناهمبند‌

و‌هم‌يکvبه‌uهم‌يک‌مسير‌از‌v,uجهت‌داري‌كه‌براي‌هر‌زوج‌گرهگراف‌: قوی همبند گراف .وجود‌داشته‌‌باشدuبه‌vمسير‌از‌

7

فرادرس

FaraDars.org

Page 8: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

(Bipartite)گراف‌دو‌قسمتي

مجموعهازنوديگرافايندريالهر.هستندVوUمستقلمجموعهدوبهبنديدستهقابلآننودهايكهگرافيUمجموعهدرنوديبهراVصورتبهمعموالراگرافاين.كندميوصلG=(V,U,E)دهندمينمايش.

8

v5

v1

v2

v3 v4

v6 v1 v6

v2v5

v3v4

فرادرس

FaraDars.org

Page 9: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

مثال

.داردفردطولبهسیکلدارایچون.نیستقسمتیدوزیرگراف•

9

فرادرس

FaraDars.org

Page 10: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

گراف دو قسمتی کامل

m=5,n=3:‌مثال•

10

فرادرس

FaraDars.org

Page 11: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

(subgraph)زیرگراف

:است‌كه‌H=(W,F)،‌يک‌گراف‌G=(V,E)يک‌زير‌گراف‌از‌گراف‌

WV

and

FE

11

فرادرس

FaraDars.org

Page 12: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

نمایش گراف

(Adjacency matrices)ماتريس‌همجواري‌-1

(Adjacency List)ليست‌همجواري‌‌-2

12

فرادرس

FaraDars.org

Page 13: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

ماتریس همجواری

مثال

13

فرادرس

FaraDars.org

Page 14: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

لیست همجواری

ليست‌همجواري

14

فرادرس

FaraDars.org

Page 15: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

(ماتريس‌برخورد)مثال‌

راjراسiلبهاگرچنانچهباشد،ميستونوسطرباماتريسيکجهت،بدونگرافيکبرايماتريساين.بودخواهد1برابرjستونوiسطردرواقعدرايهكند،آنگاهتالقي

15

a

b

c

d

12

4

53

6

001110

111000

000101

010011

654321

M

VE

فرادرس

FaraDars.org

Page 16: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

Connectivity

16

•a

b

c

d

a

b

c

d

Weakly connected

no path from b to d.

Strongly connected

فرادرس

FaraDars.org

Page 17: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

پیمایش گراف

DFS)(عمقـاولپيمايش)عمقي-1 : Depth First Search)

BFS)(عرض-اولپيمايش)سطحي-2 : Breadth First Search)

.مي‌شوداستفادهصفازBFSپيمايشدروپشتهازDFSپيمايشدر

17

فرادرس

FaraDars.org

Page 18: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

(BFS)پيمايش‌سطحي

بهچپازگرهفرزندان)آنبامجاورگره‌هايكليهسپسوكردهصفواردراگرهابتداگره،يکازشروعبا.كنيمميدرجصفدررا(راست.كنيمميدرجراآنمجاورهايگرهوكردهحذفراصفازبعديعنصرحال.شوندپيمايشهاگرههمهتادادهادامهراعملاين

.نیستفردبهمنحصرسطحیپیمایش

18

فرادرس

FaraDars.org

Page 19: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

پيمايش‌سطحي

فرادرس

FaraDars.org

Page 20: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

مثال

.گراف‌زير‌را‌مشخص‌كنيدBFSيكي‌از‌پيمايش‌هاي‌

A B C D E F G H

20

فرادرس

FaraDars.org

Page 21: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

مثال

مثال

21

فرادرس

FaraDars.org

Page 22: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

مثال

.را‌مشخص‌كنيد2گراف‌زير‌با‌شروع‌از‌گره‌شماره‌BFSيكي‌از‌پيمايش‌هاي‌

2 , 6 , 1 , 3 , 7 , 5 , 4 , 8

22

2

16

731

573

457

845

84

8

فرادرس

FaraDars.org

Page 23: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

مثال

r s t u

v w x y

فرادرس

FaraDars.org

Page 24: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

r s t u

v w x y

sQ:

فرادرس

FaraDars.org

Page 25: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

r s t u

v w x y

wQ: r

فرادرس

FaraDars.org

Page 26: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

r s t u

v w x y

rQ: t x

فرادرس

FaraDars.org

Page 27: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

r s t u

v w x y

Q: t x v

فرادرس

FaraDars.org

Page 28: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

r s t u

v w x y

Q: x v u

فرادرس

FaraDars.org

Page 29: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

r s t u

v w x y

Q: v u y

فرادرس

FaraDars.org

Page 30: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

r s t u

v w x y

Q: u y

فرادرس

FaraDars.org

Page 31: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

r s t u

v w x y

Q: y

فرادرس

FaraDars.org

Page 32: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

1r s t u

v w x y

Q: Ø

فرادرس

FaraDars.org

Page 33: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

مثال

.گراف‌زير‌مشخص‌كنيدبراي‌BFSچند‌پيمايش‌

A B C D E F

A D B C E F

A D B C F E

33

فرادرس

FaraDars.org

Page 34: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

سطحیتابع پیمایش

bfs(v){

front = rear = NULL;

cout << v;

visited[v] = TRUE;

addq ( &front , &rear , v );

while ( front) {

v = deleteq (&front);

for ( w = graph[v] ; w ; w = w->link )

if ( !visited[w -> vertex] ) {

cout << w -> vertex;

addq ( &front , &rear , w -> vertex );

visited[ w -> vertex ]=TRUE;

}}}

34

فرادرس

FaraDars.org

Page 35: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

(DFS)پيمايش‌عمقي‌

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

.دمي‌شوتكرارفوقروندومي‌گيرندانجامباالسطحيکبهبرگشتباشد،شدهمالقاتآنهمجوار

.نيستفردبهمنحصرعمقيپيمايش

35

فرادرس

FaraDars.org

Page 36: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

Depth-First Search (DFS)

فرادرس

FaraDars.org

Page 37: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

مثال

.زير‌را‌مشخص‌كنيدگراف‌ DFSيكي‌از‌پيمايش‌هاي‌

A B D F E C G

37

فرادرس

FaraDars.org

Page 38: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

مثال

.زير‌را‌مشخص‌كنيدگراف‌ DFSيكي‌از‌پيمايش‌هاي‌

a b c g d e f i h

38

فرادرس

FaraDars.org

Page 39: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

مثال

.گراف‌زير‌مشخص‌كنيدبراي‌ DFSسه‌پيمايش‌

1 , 4 , 7 , 8 , 9 , 6 , 5 , 2 , 3

1 , 2 , 3 , 6 , 9 , 8 , 7 , 4 , 5

1 , 2 , 3 , 6 , 5 , 4 , 7 , 8 , 9

39

فرادرس

FaraDars.org

Page 40: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

مثال

.گراف‌زير‌مشخص‌كنيدبراي‌ DFSچند‌پيمايش‌

A B E D F C

A B D F E C

A D E F B C

40

فرادرس

FaraDars.org

Page 41: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

مثال

.آوريدزير‌را‌به‌دست‌گراف‌DFSيكي‌از‌پيمايش‌هاي‌

A B F I H G C D E

41

فرادرس

FaraDars.org

Page 42: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

مثال

مثال•

42

فرادرس

FaraDars.org

Page 43: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

عمقیتابع پیمایش

dfs (v)

{

visited[v] = TRUE;

cout << v;

for ( w = graph[v] ; w ; w = w->link )

if ( ! Visited [w -> vertex] )

dfs ( w -> vertex );

}

43

فرادرس

FaraDars.org

Page 44: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

طبقه‌بندي‌يال‌ها‌

.كردبنديطبقهرده،4به(DFS)عمقاولجستجويوسيلهبهتوانميراهايالtree)درختی-1 edge):كهياليDFSكندميمالقاتراآن.

forward)جلورو-2 edge):يال(a,b)كهDFSحاصل،جنگلدروكندنميمالقاتراآنbنوادهaاست.

back)برگشتی-3 edge):يال(a,b)كهDFSحاصل،جنگلدروكندنميمالقاتراآنaنوادهbاست.

cross)تقاطعی-4 edge):نباشندباالبنديدسته3دركههايييال.

.گويندمينيزطرفهدويالتقاطعي،يالبهوروپسيالبرگشتي،يالبه:تذكر

44

فرادرس

FaraDars.org

Page 45: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

مثال

مثال

45

فرادرس

FaraDars.org

Page 46: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

مثال

مشخص‌كردن‌نوع‌يالها‌بر‌اساس‌پيمايش‌عمقي

46

فرادرس

FaraDars.org

Page 47: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

مثال

tree edge : (s,z) , (z,y) , (y,x) , (z,w) , (t,v) , (t,u)

forward edge : (s,w)

back edge : (x,z) , (u,t)cross edge : (w,x) , (v,w) , (v,s) , (u,v)

47

فرادرس

FaraDars.org

Page 48: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

مثال

48

فرادرس

FaraDars.org

Page 49: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

زمان کشف و زمان خاتمه

d[u] : when u is discoveredf[u] : when searching adj of u is finished

u

v w

فرادرس

FaraDars.org

Page 50: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

d[u] = 1 u

v w

فرادرس

FaraDars.org

Page 51: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

d[u] = 1 u

v w

d[v] = 2

فرادرس

FaraDars.org

Page 52: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

d[u] = 1

d[v] = 2

f[v] = 3

u

v w

فرادرس

FaraDars.org

Page 53: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

d[u] = 1

d[v] = 2

f[v] = 3

u

v w

d[w] = 4

فرادرس

FaraDars.org

Page 54: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

d[u] = 1

d[v] = 2

f[v] = 3d[w] = 4

f[v] = 5

u

v w

فرادرس

FaraDars.org

Page 55: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

d[u] = 1

f[u] = 6

d[v] = 2

f[v] = 3d[w] = 4

f[w] = 5

u

v w

فرادرس

FaraDars.org

Page 56: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

مثال

1/u x

v y

zw

فرادرس

FaraDars.org

Page 57: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

1/u x

2/v y

zw

فرادرس

FaraDars.org

Page 58: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

1/u x

2/v 3/ y

zw

فرادرس

FaraDars.org

Page 59: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

1/u 4/ x

2/v 3/ y

zw

فرادرس

FaraDars.org

Page 60: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

1/u 4/5 x

2/v 3/ y

zw

فرادرس

FaraDars.org

Page 61: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

1/u 4/5 x

2/v 3/6 y

zw

فرادرس

FaraDars.org

Page 62: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

1/u 4/5 x

2/7v 3/6 y

zw

فرادرس

FaraDars.org

Page 63: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

1/8u 4/5 x

2/7v 3/6 y

zw

فرادرس

FaraDars.org

Page 64: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

1/8u 4/5 x

2/7v 3/6 y

z9/w

فرادرس

FaraDars.org

Page 65: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

1/8u 4/5 x

2/7v 3/6 y

10/ z9/w

فرادرس

FaraDars.org

Page 66: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

1/8u 4/5 x

2/7v 3/6 y

10/11 z9/w

فرادرس

FaraDars.org

Page 67: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

1/8u 4/5 x

2/7v 3/6 y

10/11 z9/12w

فرادرس

FaraDars.org

Page 68: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

مثال

68

فرادرس

FaraDars.org

Page 69: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

نکات

:دار گراف جهت یک در جستجوی اول عمق

:‌است‌اگر‌و‌فقط‌اگر‌ Forwardيا‌ Treeنوع از‌(u,v)يال‌-1

:‌‌‌است‌اگر‌و‌فقط‌اگر‌ Backاز‌نوع‌(u,v)يال‌-2

:‌‌‌‌‌‌است‌اگر‌و‌فقط‌اگر‌Crossاز‌نوع‌(u,v)يال‌-3

69

uvvu ffdd

vuuv ffdd

uuvv fdfd

فرادرس

FaraDars.org

Page 70: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

(topological sort)مرتب سازی توپولوژیکی

(Directed Acyclic Graph):قابل‌اجرا‌است‌DAGسازي‌توپولوژي‌فقط‌بر‌روي‌مرتب‌

70

فرادرس

FaraDars.org

Page 71: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

مثال

:توپولوژيكيترتيبچند

0 1 3 2 4 5

0 1 3 2 5 4

0 1 2 3 4 5

71

فرادرس

FaraDars.org

Page 72: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402مثال

:توپولوژيكيترتيبچند

72

فرادرس

FaraDars.org

Page 73: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

(بر اساس زمان خاتمه)توپولوژیکیمرتب سازی

.مي‌كنيممالقات‌خاتمهها‌را‌به‌ترتيب‌نزولي‌زمان‌گره‌

t u v s z w y x

73

فرادرس

FaraDars.org

Page 74: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

الگوریتم مرتب سازی توپولوژیکی

Topological-Sort(G)

1 call DFS(G) to compute finishing times f[v] for each vertex v

2 as each vertex is finished, insert it onto the front of a linked list

3 return the linked list of vertices

74

فرادرس

FaraDars.org

Page 75: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

کمینهپوشای درخت

:گرافيکبراي(فراگير)پوشادرخت.دباشنداشتهچرخهيعنيباشددرختيکوبودهگرافدرموجودرئوسهمهحاويكهاستمتصلگرافزيريک

(MST)كمينهوزنباپوشادرخت:كمينهپوشايدرخت

MSTتعيينهايالگوريتم

كروسكال-1

پريم-2

75

فرادرس

FaraDars.org

Page 76: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

(کروسکال)مثال

مثال•

76

5

1

A

H

B

F

E

D

C

G3

2

4

6

34

3

4

8

4

3

فرادرس10

FaraDars.org

Page 77: آموزش ساختمان داده ها - بخش هفتم

امرتب کردن صعودی یال ه

edge dv

(D,E) 1

(D,G) 2

(E,G) 3

(C,D) 3

(G,H) 3

(C,F) 3

(B,C) 4

5

1

A

HB

F

E

D

C

G3

2

4

6

34

3

48

4

3

10edge dv

(B,E) 4

(B,F) 4

(B,H) 4

(A,H) 5

(D,F) 6

(A,B) 8

(A,F) 10

فرادرس

FaraDars.org

Page 78: آموزش ساختمان داده ها - بخش هفتم

edge dv

(D,E) 1

(D,G) 2

(E,G) 3

(C,D) 3

(G,H) 3

(C,F) 3

(B,C) 4

5

1

A

HB

F

E

D

C

G3

2

4

6

34

3

48

4

3

10edge dv

(B,E) 4

(B,F) 4

(B,H) 4

(A,H) 5

(D,F) 6

(A,B) 8

(A,F) 10

فرادرس

FaraDars.org

Page 79: آموزش ساختمان داده ها - بخش هفتم

edge dv

(D,E) 1

(D,G) 2

(E,G) 3

(C,D) 3

(G,H) 3

(C,F) 3

(B,C) 4

5

1

A

HB

F

E

D

C

G3

2

4

6

34

3

48

4

3

10edge dv

(B,E) 4

(B,F) 4

(B,H) 4

(A,H) 5

(D,F) 6

(A,B) 8

(A,F) 10

فرادرس

FaraDars.org

Page 80: آموزش ساختمان داده ها - بخش هفتم

edge dv

(D,E) 1

(D,G) 2

(E,G) 3

(C,D) 3

(G,H) 3

(C,F) 3

(B,C) 4

5

1

A

HB

F

E

D

C

G3

2

4

6

34

3

48

4

3

10edge dv

(B,E) 4

(B,F) 4

(B,H) 4

(A,H) 5

(D,F) 6

(A,B) 8

(A,F) 10

فرادرس

FaraDars.org

Page 81: آموزش ساختمان داده ها - بخش هفتم

edge dv

(D,E) 1

(D,G) 2

(E,G) 3

(C,D) 3

(G,H) 3

(C,F) 3

(B,C) 4

5

1

A

HB

F

E

D

C

G3

2

4

6

34

3

48

4

3

10edge dv

(B,E) 4

(B,F) 4

(B,H) 4

(A,H) 5

(D,F) 6

(A,B) 8

(A,F) 10

فرادرس

FaraDars.org

Page 82: آموزش ساختمان داده ها - بخش هفتم

edge dv

(D,E) 1

(D,G) 2

(E,G) 3

(C,D) 3

(G,H) 3

(C,F) 3

(B,C) 4

5

1

A

HB

F

E

D

C

G3

2

4

6

34

3

48

4

3

10edge dv

(B,E) 4

(B,F) 4

(B,H) 4

(A,H) 5

(D,F) 6

(A,B) 8

(A,F) 10

فرادرس

FaraDars.org

Page 83: آموزش ساختمان داده ها - بخش هفتم

edge dv

(D,E) 1

(D,G) 2

(E,G) 3

(C,D) 3

(G,H) 3

(C,F) 3

(B,C) 4

5

1

A

HB

F

E

D

C

G3

2

4

6

34

3

48

4

3

10edge dv

(B,E) 4

(B,F) 4

(B,H) 4

(A,H) 5

(D,F) 6

(A,B) 8

(A,F) 10

فرادرس

FaraDars.org

Page 84: آموزش ساختمان داده ها - بخش هفتم

edge dv

(D,E) 1

(D,G) 2

(E,G) 3

(C,D) 3

(G,H) 3

(C,F) 3

(B,C) 4

5

1

A

HB

F

E

D

C

G3

2

4

6

34

3

48

4

3

10edge dv

(B,E) 4

(B,F) 4

(B,H) 4

(A,H) 5

(D,F) 6

(A,B) 8

(A,F) 10

فرادرس

FaraDars.org

Page 85: آموزش ساختمان داده ها - بخش هفتم

edge dv

(D,E) 1

(D,G) 2

(E,G) 3

(C,D) 3

(G,H) 3

(C,F) 3

(B,C) 4

5

1

A

HB

F

E

D

C

G3

2

4

6

34

3

48

4

3

10edge dv

(B,E) 4

(B,F) 4

(B,H) 4

(A,H) 5

(D,F) 6

(A,B) 8

(A,F) 10

فرادرس

FaraDars.org

Page 86: آموزش ساختمان داده ها - بخش هفتم

edge dv

(D,E) 1

(D,G) 2

(E,G) 3

(C,D) 3

(G,H) 3

(C,F) 3

(B,C) 4

5

1

A

HB

F

E

D

C

G3

2

4

6

34

3

48

4

3

10edge dv

(B,E) 4

(B,F) 4

(B,H) 4

(A,H) 5

(D,F) 6

(A,B) 8

(A,F) 10

فرادرس

FaraDars.org

Page 87: آموزش ساختمان داده ها - بخش هفتم

edge dv

(D,E) 1

(D,G) 2

(E,G) 3

(C,D) 3

(G,H) 3

(C,F) 3

(B,C) 4

5

1

A

HB

F

E

D

C

G3

2

4

6

34

3

48

4

3

10edge dv

(B,E) 4

(B,F) 4

(B,H) 4

(A,H) 5

(D,F) 6

(A,B) 8

(A,F) 10

فرادرس

FaraDars.org

Page 88: آموزش ساختمان داده ها - بخش هفتم

edge dv

(D,E) 1

(D,G) 2

(E,G) 3

(C,D) 3

(G,H) 3

(C,F) 3

(B,C) 4

5

1

A

HB

F

E

D

C

G3

2

4

6

34

3

48

4

3

10edge dv

(B,E) 4

(B,F) 4

(B,H) 4

(A,H) 5

(D,F) 6

(A,B) 8

(A,F) 10

فرادرس

FaraDars.org

Page 89: آموزش ساختمان داده ها - بخش هفتم

edge dv

(D,E) 1

(D,G) 2

(E,G) 3

(C,D) 3

(G,H) 3

(C,F) 3

(B,C) 4

5

1

A

HB

F

E

D

C

G2

3

3

3

edge dv

(B,E) 4

(B,F) 4

(B,H) 4

(A,H) 5

(D,F) 6

(A,B) 8

(A,F) 10

Total Cost = 21

4

}not

considered

فرادرس

FaraDars.org

Page 90: آموزش ساختمان داده ها - بخش هفتم

(پریم)مثال

A F

B C

D

E

2

7

45

8 6 4

5

3

8 فرادرس

FaraDars.org

Page 91: آموزش ساختمان داده ها - بخش هفتم

A F

B C

D

E

2

7

45

8 6 4

5

3

8 فرادرس

FaraDars.org

Page 92: آموزش ساختمان داده ها - بخش هفتم

A F

B C

D

E

2

7

45

8 6 4

5

3

8 فرادرس

FaraDars.org

Page 93: آموزش ساختمان داده ها - بخش هفتم

A F

B C

D

E

2

7

45

8 6 4

5

3

8 فرادرس

FaraDars.org

Page 94: آموزش ساختمان داده ها - بخش هفتم

A F

B C

D

E

2

7

45

8 6 4

5

3

فرادرس8

FaraDars.org

Page 95: آموزش ساختمان داده ها - بخش هفتم

Total weight of tree: 18

A F

B C

D

E

2

7

45

8 6 4

5

3

فرادرس8

FaraDars.org

Page 96: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

(cبه زبان )پیاده سازی گراف با لیست همجواری

int main ( ){

int v = 5;

struct Graph* g ;

g= createGraph(v);

addEdge (g , 0 , 1);

addEdge (g , 0 , 4);

addEdge (g , 1 , 2);

addEdge (g , 1 , 3);

addEdge (g , 1 , 4);

addEdge (g , 2 , 3);

addEdge (g , 3 , 4);

printGraph(g);

}

96

فرادرس

FaraDars.org

Page 97: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

تعریف استراکچرها

struct Node {

int data;struct Node* next;

};

struct AdjList {

struct Node *head;};

struct Graph{int v;

struct AdjList* array;};

97

فرادرس

FaraDars.org

Page 98: آموزش ساختمان داده ها - بخش هفتم

98

struct Node* newNode(int a){

struct Node* n;n = malloc(sizeof(struct Node));

n->data = a;n->next = NULL;return n;

}

فرادرس

FaraDars.org

Page 99: آموزش ساختمان داده ها - بخش هفتم

99

Struct Graph* createGraph(int V){

struct Graph* g ;g= malloc(sizeof(struct Graph));g->v = v;g->array = malloc(v * sizeof(struct AdjList));int i;for (i = 0 ; i < v ; ++i)

g->array[i].head = NULL;return g;

}

فرادرس

FaraDars.org

Page 100: آموزش ساختمان داده ها - بخش هفتم

100

void addEdge(struct Graph* g, int s, int d){

// Add an edge from source to dest.

struct Node* n = newNode(d);n->next = g->array[s].head;g->array[s].head = n;

// Since graph is undirected, add an edge from dest to source also

n = newNode(s);n->next = g->array[d].head;g->array[d].head = n;

}

فرادرس

FaraDars.org

Page 101: آموزش ساختمان داده ها - بخش هفتم

101

void printGraph ( struct Graph* g ){

int i; struct Node* p ;for (i = 0 ; i < g->v ; ++i){

p= g->array[i].head;printf("vertex %d : ", i);while (p){

printf("-> %d", p-> data);p = p->next;

}printf("\n");

}}

فرادرس

FaraDars.org

Page 102: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402كاربردهاي‌پيمايش‌DFSFollowing are the problems that use DFS as a bulding block.

1) Topological Sorting

2) Detecting cycle in a graph

A graph has cycle if and only if we see a back edge during DFS.

3) For an unweighted graph, DFS traversal of the graph produces the minimum spanning

tree and all pair shortest path tree.

4) Finding Strongly Connected Components of a graph

102

فرادرس

FaraDars.org

Page 103: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402كاربردهاي‌گراف5) Path Finding

We can specialize the DFS algorithm to find a path between two given vertices u and z.i) Call DFS(G, u) with u as the start vertex.ii) Use a stack S to keep track of the path between the start vertex and the current vertex.iii) As soon as destination vertex z is encountered, return the path as the contents of the stack

6) Solving puzzles with only one solution, such as mazes.

7) To test if a graph is bipartite

We can augment either BFS or DFS when we first discover a new vertex, color itopposited its parents, and for each other edge, check it doesn’t link two vertices of the

same color. The first vertex in any connected component can be red or black!

103

فرادرس

FaraDars.org

Page 104: آموزش ساختمان داده ها - بخش هفتم

ساختمان داده ها

faradars.org/fvds9402

104

این اسالید ها بر مبنای نکات مطرح شده در فرادرس« مجموعه فرادرس های ساختمان داده ها»

.تهیه شده است

.نماییدلینک زیر مراجعه برای کسب اطالعات بیشتر در مورد این آموزش به

faradars.org/fvds9402

فرادرس

FaraDars.org