Transcript Document

‫ساختمان داده‬
‫گراف‬
‫حسین دهقان‬
‫دانشکده فنی و مهندس ی جم‬
‫حسین دهقان‬
‫دانشکده فنی و مهندس ی جم‬
‫‪2‬‬
‫درخت‬
‫‪AVL‬‬
‫انگیزه‬
‫حسین دهقان‬
‫دانشکده فنی و مهندس ی جم‬
‫• درخت دودويي جستجو (‪ )BST‬در حالتي كه كامل باشد ساختار مناسبي‬
‫براي عمليات ديكشنري است ()‪)O(lgn‬‬
‫• در بدترين حالت‪ ،‬درخت دودويي جستجو به يك ليست پيوندي تبديل‬
‫مي شود ()‪)O(n‬‬
‫• روشهايي وجود دارد كه درخت دودويي جستجو (نزديك به) دودويي كامل‬
‫نگهداري شود‬
‫• )‪AVL (Adelson, Velskii, Landis‬‬
‫• درخت ‪(2-3- Tree) 2-3‬‬
‫• درخت ‪(2-3-4- Tree) 2-3-4‬‬
‫‪3‬‬
‫• درخت قرمز سياه )‪(Red Black Tree‬‬
‫درخت ‪AVL‬‬
‫حسین دهقان‬
‫دانشکده فنی و مهندس ی جم‬
‫‪4‬‬
‫• ضريب تعادل (‪ )BF: Balance Factor‬براي هر گره ‪ T‬در درخت‬
‫دودويي برابر است با ‪ BF=hL-hR‬كه در آن ‪ hL‬و ‪ hR‬به ترتيب ارتفاع‬
‫زيردرختان چپ و راست ‪ T‬است‪.‬‬
‫• در ‪ BF ، AVL tree‬براي هر گره درخت يكي از مقادير ‪ ،0،1‬يا ‪-1‬‬
‫است‪.‬‬
‫مثال‬
H=0
BF=0
H=1
BF=1
12
H=0
BF=0
62
H=1
55
BF=1
H=0 50
BF=0
32
H=1
BF=-1
37
H=0
BF=0
H=2
BF=1
67
H=1
48 BF=0
H=0 43
BF=0
62
H=0
BF=0
H=0
55
BF=0
H=0
49 BF=0
‫حسین دهقان‬
‫دانشکده فنی و مهندس ی جم‬
15
H=2
BF=-1
67
H=1
BF=-1
50
H=0
BF=0
5
‫مثال‬
‫‪H=4‬‬
‫‪44 BF=-1‬‬
‫‪H=3‬‬
‫‪78 BF=1‬‬
‫حسین دهقان‬
‫دانشکده فنی و مهندس ی جم‬
‫‪H=1‬‬
‫‪BF=0‬‬
‫‪90‬‬
‫‪H=2‬‬
‫‪BF=-1‬‬
‫‪H=2‬‬
‫‪BF=0‬‬
‫‪88‬‬
‫‪80‬‬
‫‪H=1‬‬
‫‪BF=0‬‬
‫‪H=1‬‬
‫‪BF=0‬‬
‫‪50‬‬
‫‪H=1‬‬
‫‪48 BF=0‬‬
‫‪62‬‬
‫‪37‬‬
‫‪6‬‬
‫‪67‬‬
‫‪55‬‬
‫‪49‬‬
‫‪43‬‬
‫‪12‬‬
‫‪32‬‬
‫‪28‬‬
‫اضافه کردن یک گره‬
‫• با اضافه شدن گره اي به درخت ‪ AVL‬ممكن است تعادل درخت از بین‬
‫برود (گره اي با ‪ BF= 2‬به وجود آيد)‬
‫• براي متعادل ساختن درخت پس از اضافه شدن گره اي چرخش‬
‫(‪ )rotation‬انجام مي شود‪.‬‬
‫حسین دهقان‬
‫دانشکده فنی و مهندس ی جم‬
‫‪7‬‬
‫• انواع چرخش (‪ )rotation‬در درخت ‪ AVL‬بر اساس محل اضافه شده‬
‫گره ‪ Y‬نسبت به گره ‪ A‬است‪.‬‬
‫• گره ‪ A‬نزديكترين جد به گره اضافه شده ‪ Y‬است كه پس از اضافه‬
‫شدن ‪ BF ،Y‬براي آن گره ‪ 2‬مي شود‪.‬‬
‫‪A‬‬
‫چرخش‬
‫‪B‬‬
‫‪h+2‬‬
‫حسین دهقان‬
‫دانشکده فنی و مهندس ی جم‬
‫‪8‬‬
‫‪B‬‬
‫‪0‬‬
‫‪0‬‬
‫‪A‬‬
‫‪h‬‬
‫‪BL‬‬
‫‪BR‬‬
‫درخت متعادل‬
‫بعد از چرخش‪LL ( LL‬‬
‫‪)rotation‬‬
‫‪BR‬‬
‫‪BR‬‬
‫درخت‬
‫متعادل‬
‫‪B‬‬
‫‪AR‬‬
‫‪AR‬‬
‫‪2‬‬
‫‪A‬‬
‫‪AR‬‬
‫‪1‬‬
‫‪1‬‬
‫‪BL‬‬
‫درخت‬
‫نامتعادل‬
‫بعد از‬
‫‪0‬‬
‫‪BL‬‬
‫‪A‬‬
‫چرخش‬
‫‪0B‬‬
‫‪h+2‬‬
‫حسین دهقان‬
‫دانشکده فنی و مهندس ی جم‬
‫‪B‬‬
‫‪0‬‬
‫‪AL‬‬
‫درخت متعادل‬
‫بعد از چرخش‪RR ( RR‬‬
‫‪)rotation‬‬
‫‪BR‬‬
‫‪A‬‬
‫‪0A‬‬
‫‪BR‬‬
‫‪BL‬‬
‫‪9‬‬
‫‪-1‬‬
‫درخت‬
‫‪ -2‬متعادل‬
‫‪-1 B‬‬
‫‪BBR‬‬
‫‪L‬‬
‫‪BL‬‬
‫‪BL‬‬
‫‪AL‬‬
‫‪AL‬‬
‫درخت‬
‫نامتعادل‬
‫بعد از‬
‫‪h‬‬
‫چرخش‬
‫‪C‬‬
‫حسین دهقان‬
‫دانشکده فنی و مهندس ی جم‬
‫‪10‬‬
‫‪0 A‬‬
‫‪0‬‬
‫‪LR rotation‬‬
‫‪1‬‬
‫‪2 A‬‬
‫‪0 B‬‬
‫‪B‬‬
‫‪0 C‬‬
‫‪1‬‬
‫‪0 B‬‬
‫چرخش‬
-1
B
0C
h
h
AL
BL
CL
0
AL
CL
1 A
-1
B
0C
h
BL
h
AL
CL
CR
CR
CL
BL
CR
0C
A 2
h+2
0
-1 A
B
1C
BL
CR
0C
A
B
h+2
0
2
A
1
B
0 A
B
AL
‫حسین دهقان‬
‫دانشکده فنی و مهندس ی جم‬
1
-1 C
BL
AL
CL
CR
BL
CL
CR
AL
11
‫‪-1‬‬
‫مثال‬
‫‪1‬‬
‫‪-1‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪-1‬‬
‫حسین دهقان‬
‫دانشکده فنی و مهندس ی جم‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪12‬‬
‫‪2‬‬
‫‪-1‬‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫‪-1‬‬
‫‪1‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪1‬‬
‫‪-1‬‬
‫‪-1‬‬
‫گره اضافه‬
‫شده‬
‫مثال‬
)non AVL( ‫• اضافه كردن ماههاي ميالدي در درخت دودويي جستجو‬
• Jan, Feb, Mar, Apr, May, June, July, Aug, Sept, Oct, Nov, Dec
Feb
Apr
Mar
June
Aug
Dec
May
Sept
July
Oct
Nov
‫حسین دهقان‬
‫دانشکده فنی و مهندس ی جم‬
Jan
13
Jan
Jan
Feb
Apr
June
Aug
Aug
Mar
Feb
Apr
May
Mar
June
May
Sept
July
July
Oct
Mar
Jan
Aug
Apr
Feb
June
July
Oct
Jan
Mar
Aug
Oct
May
Nov
Sept
June
Feb
Apr
July
May
Sept
Nov
Dec
)AVL( ‫مثال‬
14
‫گراف‬
‫حسین دهقان‬
‫دانشکده فنی و مهندس ی جم‬
‫‪15‬‬
‫گراف‬
‫حسین دهقان‬
‫دانشکده فنی و مهندس ی جم‬
‫‪16‬‬
‫تعریف‬
‫• يک گراف از دو مجموعه تشکيل مي شود‪:‬‬
‫• يک مجموعه محدود غیر تهي از رئوس )‪V(G‬‬
‫• يک مجموعه (احيانا تهي) از يالها )‪E(G‬‬
‫حسین دهقان‬
‫دانشکده فنی و مهندس ی جم‬
‫‪17‬‬
‫• )‪ G(V,E‬يک گراف را نشان مي دهد‬
‫• يک گراف بدون جهت گرافي است که در آن ترتيب رئوس در يک يال‬
‫اهميت ندارد‪(v0, v1) = (v1,v0) .‬‬
‫• يک گراف جهت دار گرافي است که در آن يک يال متناظر با يک زوج‬
‫مرتب از رئوس است >‪<v0, v1> != <v1, v0‬‬
‫انتها‬
‫ابتدا‬
‫گراف کامل‬
‫• گراف کامل ‪ :‬گرافي است که داراي حداکثر تعداد لبه باشد‪.‬‬
‫• گراف بدون جهت کامل‪:‬‬
‫‪0‬‬
‫• گراف جهت دار کامل‪:‬‬
‫‪0‬‬
‫حسین دهقان‬
‫دانشکده فنی و مهندس ی جم‬
‫‪1‬‬
‫‪2‬‬
‫‪G3‬‬
‫‪ n(n-1)/2‬يال‬
‫‪2‬‬
‫‪6‬‬
‫‪1‬‬
‫‪5‬‬
‫‪4‬‬
‫‪G2‬‬
‫گراف غیر کامل‬
‫)‪n(n-1‬‬
‫‪0‬‬
‫‪2‬‬
‫‪3‬‬
‫يال‬
‫‪0‬‬
‫‪1‬‬
‫‪1‬‬
‫‪2‬‬
‫‪3‬‬
‫‪3‬‬
‫‪G1‬‬
‫گراف کامل‬
‫}‪V(G1)={0,1,2,3‬‬
‫‪E(G1)={(0,1),(0,2),(0,3),(1,2),(1,3),(2,3)}18‬‬
‫})‪V(G2)={0,1,2,3,4,5,6} E(G2)={(0,1),(0,2),(1,3),(1,4),(2,5),(2,6‬‬
‫}‪V(G3)={0,1,2‬‬
‫}>‪E(G3)={<0,1>,<1,0>,<1,2‬‬
‫گراف‬
‫• در يک گراف نمي توان يالي از یک راس به خودش داشت‪.‬‬
‫• در يک گراف يک يال نمي تواند چند بار ظاهر شود‪.‬‬
‫حسین دهقان‬
‫دانشکده فنی و مهندس ی جم‬
‫‪19‬‬
‫زير گراف‬
‫‪• V(G’`)  V(G) and E(G’`)  E(G).‬‬
‫‪0‬‬
‫‪2‬‬
‫حسین دهقان‬
‫دانشکده فنی و مهندس ی جم‬
‫‪0‬‬
‫‪1‬‬
‫‪20‬‬
‫‪2‬‬
‫‪G3‬‬
‫‪1‬‬
‫‪3‬‬
‫‪G1‬‬
‫مسیر‬
‫• يک مسیر از راس ‪ vp‬به راس ‪ vq‬در گراف ‪ G‬دنباله اي از رئوس به‬
‫صورت ‪ vp, vi , vi , ..., vi , vq‬است به نحوي که‬
‫)‪ (vp, vi ), (vi , vi ), ..., (vi , vq‬يالهاي گراف ‪ G‬باشند‪.‬‬
‫• طول يک مسیر به صورت تعداد لبه هاي درون آن تعريف مي شود‪.‬‬
‫‪n‬‬
‫‪n‬‬
‫حسین دهقان‬
‫دانشکده فنی و مهندس ی جم‬
‫‪21‬‬
‫‪2‬‬
‫‪2‬‬
‫‪1‬‬
‫‪1‬‬
‫‪1‬‬
‫‪0‬‬
‫‪0‬‬
‫‪1‬‬
‫‪2‬‬
‫‪3‬‬
‫‪2‬‬
‫‪0‬‬
‫‪1‬‬
‫‪3‬‬
‫‪1‬‬
‫‪2‬‬
‫‪3‬‬
‫مسیر‬
‫حسین دهقان‬
‫دانشکده فنی و مهندس ی جم‬
‫• مسیر ساده (جهت دار)‬
‫• مسیري است که در آن تمام راس ها احتماال به جز راس اول و آخر‬
‫متمايز باشند‪.‬‬
‫• دور يا حلقه‬
‫• مسیر ساده اي است که راس اول و آخر آن يکي است‪.‬‬
‫‪0‬‬
‫‪2‬‬
‫‪22‬‬
‫‪1‬‬
‫‪3‬‬
‫‪0‬‬
‫درجه گراف‬
‫‪1‬‬
‫• درجه‬
‫• تعداد يالهايي است که با آن تالقي دارند‬
‫• براي گراف جهت دار‬
‫‪2‬‬
‫حسین دهقان‬
‫دانشکده فنی و مهندس ی جم‬
‫• درجه ورودي راس‪ :‬تعداد يالهايي است که سر آنها به راس مذکور متصل باشد‪.‬‬
‫• درجه خروجي راس‪ :‬تعداد يالهايي است که ته آنها به راس مذکور متصل باشد‪.‬‬
‫• اگر ‪ di‬درجه راس ‪ i‬در گراف ‪ G‬با ‪ n‬راس و ‪ e‬يال باشد‪ ،‬تعداد يالها برابر‬
‫است با‬
‫‪n 1‬‬
‫‪23‬‬
‫‪d ) / 2‬‬
‫‪i‬‬
‫‪0‬‬
‫(‪e‬‬
‫ذخیره گراف‬
‫• ماتريس همسايگي‬
‫• ليست همسايگي‬
‫حسین دهقان‬
‫دانشکده فنی و مهندس ی جم‬
‫‪24‬‬
‫ذخیره گراف‬
‫• ماتريس همسايگي‬
‫حسین دهقان‬
‫دانشکده فنی و مهندس ی جم‬
‫‪25‬‬
‫‪1‬‬
‫‪1‬‬
‫‪‬‬
‫‪1‬‬
‫‪‬‬
‫‪0‬‬
‫‪1‬‬
‫‪1‬‬
‫‪0‬‬
‫‪1‬‬
‫‪1‬‬
‫‪0‬‬
‫‪1‬‬
‫‪1‬‬
‫‪0‬‬
‫‪1‬‬
‫‪‬‬
‫‪1‬‬
‫‪‬‬
‫‪1‬‬
‫‪0‬‬
‫‪1‬‬
‫‪2‬‬
‫‪3‬‬
‫• پيچيدگي زماني تشخيص تعداد يال گراف و يا تشخيص همبند بودن گراف‬
‫• گراف بدون جهت‬
‫• گراف جهت دار‬
‫)‪O(n2/2‬‬
‫)‪O(n2‬‬
‫ذخیره گراف (ليست همسايگي)‬
‫‪0‬‬
‫‪1‬‬
‫‪2‬‬
‫‪3‬‬
‫‪0‬‬
‫حسین دهقان‬
‫دانشکده فنی و مهندس ی جم‬
‫‪1‬‬
‫‪4‬‬
‫‪0‬‬
‫‪5‬‬
‫‪2‬‬
‫‪6‬‬
‫‪1‬‬
‫‪2‬‬
‫‪3‬‬
‫‪26‬‬
‫‪7‬‬
‫عمليات روي گراف ها‬
‫• پيمايش (جستجو)‬
‫• جستجوي عمقي‬
‫)‪• Depth First Search (DFS‬‬
‫• جستجوي عرض ي‬
‫حسین دهقان‬
‫دانشکده فنی و مهندس ی جم‬
‫‪27‬‬
‫)‪• Breadth First Search (BFS‬‬
‫• درخت پوشا‬
‫پيمايش گراف‬
‫حسین دهقان‬
‫دانشکده فنی و مهندس ی جم‬
depth first search (DFS): v0, v1, v3, v7, v4, v5, v2, v6
breadth first search (BFS): v0, v1, v2, v3, v4, v5, v6, v7
28
‫جستجوي عمقي‬
w
Data structure
adjacency list: O(e)
adjacency matrix: O(n2)
#define FALSE
0
#define TRUE
1
short int visited[MAX_VERTICES];
visited:
[0] [1] [2 [3] [4] [5 [6] [7]
]
]
output: 0 1 3 7 4 5 2 6
‫جستجوي عرض ي‬
‫• براي پياده سازي نياز به‬
‫• يک صف‬
‫• يک آرايه سراسري ‪: visited‬که در ابتدا به صفر مقدار دهي اوليه مي‬
‫شود‪.‬‬
‫حسین دهقان‬
‫دانشکده فنی و مهندس ی جم‬
‫‪30‬‬
‫جستجوي عرض ي‬
visited:
out
[0] [1] [2 [3] [4] [5 [6] [7]
]
]
0 1 2 3 4 5 6 7
in
output: 0 1 2 3 4 5 6 7
adjacency list: O(e)
adjacency matrix: O(n2)
w
‫عمليات روي گراف ها‬
‫• مولفه هاي همبند‬
‫• اگر ‪ G‬يک گراف بدون جهت باشد مي توان تعيین کرد که آيا گراف همبند است يا نه‪.‬‬
‫• يکي از دو تابع ‪ dfs‬يا ‪ bfs‬را احضار کنيم و سپس تعيین کنيم آيا راس مالقات نشده اي وجود دارد يا نه‪.‬‬
‫• مولفه هاي همبند يک گراف را مي توان با احضارهاي مکرر يکي از دو تابع )‪ bfs(v‬يا )‪dfs(v‬‬
‫تعيین کرد که در آن ‪ v‬راس ي است که هنوز مالقات نشده است‪.‬‬
‫)‪adjacency list: O(n+e‬‬
‫)‪adjacency matrix: O(n2‬‬
‫درخت پوشا‬
‫حسین دهقان‬
‫دانشکده فنی و مهندس ی جم‬
‫‪33‬‬
‫• چنانچه ‪ G‬يک گراف همبند باشد‬
‫• پيمايش آن به صورت جستجوي عمقي يا عرض ي‪ ،‬با شروع از هر راس‬
‫دلخواه تمام رئوس گراف ‪ G‬را مالقات مي کنند‪.‬‬
‫• درختي که تعدادي از لبه ها و تمام رئوس ‪ G‬را در بر دارد‪ ،‬درخت پوشا‬
‫ناميده مي شود‪.‬‬
‫درخت پوشا‬
‫حسین دهقان‬
‫دانشکده فنی و مهندس ی جم‬
‫‪34‬‬
‫• با استفاده از جستجوي عمقي يا جستجوي عرض ي مي توان درخت‬
‫پوشا را ايجاد کرد‬
‫• درخت حاصل از جستجوي عمقي ← درخت پوشاي عمقي‬
‫• درخت حاصل از جستجوي عرض ي ← درخت پوشاي عرض ي‬
‫عمليات روي گراف ها‬
‫• درخت پوشا‬
‫• با استفاده از جستجوي عمقي يا جستجوي عرض ي مي توان درخت پوشا را‬
‫ايجاد کرد‬
‫درخت حاصل از جستجوي عمقي درخت پوشاي عمقي نام دارد‬
‫درخت حاصل از جستجوي عرض ي درخت پوشاي عرض ي نام دارد‬