ppt - دانشگاه شهید بهشتی

Download Report

Transcript ppt - دانشگاه شهید بهشتی

‫درخت ها و الگوریتم های ‪ DFS‬و ‪BFS‬‬
‫درس‪ :‬نظریه الگوریتمی گراف‬
‫گروه علوم کامپیوتر دانشگاه شهید بهشتی‬
‫تعریفها و نتایج اولیه‬
‫‪ ‬درخت یک گراف همبند بدون دور است‪.‬‬
‫‪ ‬جنگل یک گراف بدون دور است‪ .‬پس هر مولفه همبندی جنگل‪ ،‬درخت است‪.‬‬
‫‪ ‬هر راس درجه ‪ 1‬در درخت را یک برگ مینامیم‪.‬‬
‫نظریه الگوریتمی گراف‪ -‬گروه علوم کامپیوتر دانشگاه شهید بهشتی‬
‫‪2‬‬
‫تعریفها و نتایج اولیه‬
‫‪ ‬یک درخت فراگیر از گراف ‪ G‬یک زیردرخت فراگیر از آن است که درخت باشد‪.‬‬
‫‪ ‬درخت با یک راس را درخت بدیهی مینامیم‪.‬‬
‫نظریه الگوریتمی گراف‪ -‬گروه علوم کامپیوتر دانشگاه شهید بهشتی‬
‫‪3‬‬
‫تعریفها و نتایج اولیه‬
‫‪ ‬قضیه‪ :‬درخت ‪ T‬دارای ‪ n‬راس و ‪ n-1‬یال است‪.‬‬
‫‪ ‬قضیه‪ :‬بین هر دو راس از درخت دقیقا یک مسیر وجود دارد‪.‬‬
‫‪ ‬نتیجه‪ :‬هر یال درخت یک پل است‪.‬‬
‫‪ ‬قضیه‪ :‬هر درخت غیر بدیهی دارای حداقل ‪ 2‬برگ است‪.‬‬
‫‪ ‬قضیه‪ :‬اگر بزرگترین درجه راس ی درخت ‪ T‬برابر با ‪ ‬باشد‪ ،‬آنگاه ‪ T‬دارای حداقل ‪‬‬
‫برگ است‪.‬‬
‫نظریه الگوریتمی گراف‪ -‬گروه علوم کامپیوتر دانشگاه شهید بهشتی‬
‫‪4‬‬
‫درخت ریشه‌دار‬
‫‪ ‬درخت جهتدار ‪ T‬گراف جهتداری است که گراف زمینه آن درخت باشد‪.‬‬
‫ی است که راس ی مانند ‪ r‬به نام ریشه داشته باشد‬
‫‪ ‬درخت ریشه‌دار ‪ T‬درخت جهتدار ‌‬
‫ی وجود داشته باشد‪.‬‬
‫مسیر جهتدار ‌‬
‫دیگر ‌‬
‫هر راس ‌‬
‫به طوری که ‌از ریشه به ‌‬
‫نظریه الگوریتمی گراف‪ -‬گروه علوم کامپیوتر دانشگاه شهید بهشتی‬
‫‪5‬‬
‫درخت ریشهدار‬
‫در‬
‫دار باشد‪ ،‬معمو ‌ل است ‪ T‬طوری رسم شود که ریشه ‌‬
‫‪ ‬اگر ‪ T‬یک درخت ریشه ‌‬
‫در سطح یک ‌و به همین صورت‬
‫باالترین سطح (سطح صفر)‪ ،‬راس‌های مجاو ‌ر آن ‌‬
‫در این صورت جهت‬
‫در سطح ‪ i+1‬قر ‌ار گیرند‪‌ .‬‬
‫هر سطح ‪‌ i‬‬
‫راسهای مجاور‌ راسهای ‌‬
‫در نمایش حذف می‌شود‪.‬‬
‫کمان ها ‌‬
‫در درخت را ارتفاع درخت مینامیم‪.‬‬
‫‪ ‬بزرگترین سطح ‌‬
‫نظریه الگوریتمی گراف‪ -‬گروه علوم کامپیوتر دانشگاه شهید بهشتی‬
‫‪6‬‬
‫درخت ریشه‌دار‬
‫اگر ‌و تنها اگر ‪ T‬شامل راس ی مانند ‪ r‬باشد‬
‫دار است ‌‬
‫‪ ‬قضیه‪ :‬درخت جهتدار ‪ T‬ریشه ‌‬
‫هر راس دیگر ‪ u‬داشته باشیم ‪id(u) = 1‬‬
‫به طوری که ‪‌ id(r) = 0‬و برای ‌‬
‫ایده اثبات‪ :‬اگر ‪ T‬درخت ریشه دار باشد‪ ،‬حکم به وضوح برقرار است‪.‬‬
‫جهتدار با شرط داده شده باشد‪ .‬یک راس دلخواه ‪ u‬انتخاب کنید‪.‬‬
‫‌‬
‫فرض کنید ‪ T‬درخت‬
‫در‬
‫‪ ،id(u) = 1‬پس کمان ورودی )‪ (v,u‬وجود دارد‪ .‬اگر ‪ v = r‬مساله حل شده است‪‌ .‬‬
‫جهتدار از ‪ r‬به ‪u‬‬
‫‌‬
‫غیر این صورت ‪ v‬هم یک کمان ورودی دارد‪ .‬با ادامه این روند مسیری‌‬
‫‌‬
‫تعیین میشود‪.‬‬
‫نظریه الگوریتمی گراف‪ -‬گروه علوم کامپیوتر دانشگاه شهید بهشتی‬
‫‪7‬‬
‫درخت ریشهدار‬
‫‪ ‬در درخت ریشه دار ‪،T‬‬
‫اگر کمان )‪ (w,v‬وجود داشته باشد‪ v ،‬فرزند ‪ w‬و ‪ w‬پدر ‪ v‬است‪.‬‬
‫اگر مسیر جهتداری از ‪ u‬به ‪ v‬وجود داشته باشد‪ u ،‬جد ‪ v‬و‬
‫‪ V‬نوه ‪ u‬است‪.‬‬
‫زیردرخت ریشهداری که از راس ‪ u‬و همه نوادگان‬
‫آن تشکیل میشود‪ ،‬زیردرخت ماکسیمال ‪ T‬با ریشه‬
‫‪ u‬نام دارد و با نماد ) ‪ T( u‬نشان داده میشود‪.‬‬
‫نظریه الگوریتمی گراف‪ -‬گروه علوم کامپیوتر دانشگاه شهید بهشتی‬
‫‪8‬‬
‫درخت ریشه‌دار‬
‫هر راس آن حداکثر ‪ m‬فرزند داشته‬
‫‪ ‬درخت ریشه دار ‪ T‬را ‪-m‬تایی مینامیم هرگاه ‌‬
‫باشد‪.‬‬
‫صفر فرزند داشته باشد‪.‬‬
‫هر راس ‪ m‬یا ‌‬
‫‪ ‬درخت ‪-m‬تایی را تام مینامیم هرگاه ‌‬
‫در سطح ‪ h‬یا ‪ h-1‬قر ‌ار‬
‫‪ ‬درخت ‪-m‬تایی را متعادل مینامیم هرگاه همه برگهای آن ‌‬
‫داشته باشند‪.‬‬
‫‪ ‬اگر ‪ m=2‬باشد درخت را دودویی مینامیم‪.‬‬
‫نظریه الگوریتمی گراف‪ -‬گروه علوم کامپیوتر دانشگاه شهید بهشتی‬
‫‪9‬‬
‫درخت ریشهدار‬
‫درخت دودویی متعادل‬
‫درخت دودویی‬
‫درخت دودویی تام‬
‫نظریه الگوریتمی گراف‪ -‬گروه علوم کامپیوتر دانشگاه شهید بهشتی‬
‫‪10‬‬
‫درخت ریشه‌دار‬
‫‪ ‬قضیه‪ :‬هر درخت ‪ -m‬تایی تام با ‪ i‬راس داخلی دارای ‪ mi+1‬راس است‪.‬‬
‫‪ ‬نتیجه‪ :‬هر درخت دودویی با ‪ i‬راس داخلی دارای ‪ i+1‬برگ است‪.‬‬
‫‪ ‬قضیه‪ :‬اگر ‪ T‬یک درخت دودویی با ارتفاع ‪ h‬و ‪ p‬راس باشد‪ ،‬آنگاه‬
‫‪h 1 p  2h 1 1‬‬
‫ایده اثبات‪ :‬کران پایین برای مسیر جهتدار به طول ‪ p-1‬برقرار است‪.‬‬
‫در هر درخت دودویی تعداد راسها در هر سطح حداکثر دو برابر تعداد راسها در سطح قبل‬
‫است‪.‬‬
‫نظریه الگوریتمی گراف‪ -‬گروه علوم کامپیوتر دانشگاه شهید بهشتی‬
‫‪11‬‬
‫الگوریتم ‪DFS‬‬
‫‪ ‬ورودی‪ :‬گراف ‪G‬‬
‫‪ ‬خروجی‪ :‬جنگل فراگیر ‪( T‬برای حفظ اطالعات پدر و فرزندی در جنگل از متغیر ‪pred‬‬
‫استفاده میکنیم‪).‬‬
‫‪ ‬به هر راس ‪ u‬اندیس )‪ dfi(u‬نسبت داده میشود‬
‫نظریه الگوریتمی گراف‪ -‬گروه علوم کامپیوتر دانشگاه شهید بهشتی‬
‫‪12‬‬
‫الگوریتم ‪DFS‬‬
‫‪ -1‬به ازای هر راس ‪ u‬قرار دهید ‪ dfi(u)= 0‬و ‪. pred(u) = 0‬‬
‫)}‪O(max{n,m‬‬
‫‪ -2‬قرار دهید ‪. k = 1‬‬
‫‪ -3‬یک راس ‪ r‬با ‪ dfi(r) = 0‬انتخاب کنید‪ .‬قرار دهید ‪ dfi(u) = k ،u = r‬و ‪k = k+1‬‬
‫‪ -4‬تا زمانی که ‪ u ≠ r‬مراحل زیر را تکرار کنید‪.‬‬
‫‪ ‬اگر همه راسهای مجاور ‪ u‬مشاهده شدهاند‪ ،‬قرار دهید )‪.u= pred(u‬‬
‫‪‬‬
‫در غیر این صورت‪ ،‬فرض کنید ‪ v‬راس مجاور ‪ u‬و مشاهده نشده باشد‪ ،‬قرار دهید‬
‫‪ dfi(v) = k ،pred(v) = u‬و ‪ u = v‬و ‪k = k+1‬‬
‫‪ -5‬اگر برای هر راس ‪ u‬داریم ‪ dfi(u) ≠ 0‬الگوریتم تمام شده‪ .‬در غیر این صورت به مرحله‬
‫‪ 3‬بروید‪.‬‬
‫نظریه الگوریتمی گراف‪ -‬گروه علوم کامپیوتر دانشگاه شهید بهشتی‬
‫‪13‬‬
‫الگوریتم ‪ - DFS‬مثال‬
‫نظریه الگوریتمی گراف‪ -‬گروه علوم کامپیوتر دانشگاه شهید بهشتی‬
‫‪14‬‬
‫الگوریتم ‪ - DFS‬مثال‬
‫نظریه الگوریتمی گراف‪ -‬گروه علوم کامپیوتر دانشگاه شهید بهشتی‬
‫‪15‬‬
‫اجرای الگوریتم ‪DFS‬‬
‫نظریه الگوریتمی گراف‪ -‬گروه علوم کامپیوتر دانشگاه شهید بهشتی‬
‫‪16‬‬
‫الگوریتم ‪DFS‬‬
‫در درخت (جنگل) ‪ DFS‬قر ‌ار دارند را ‌از راس با اندیس بزرگتر (پدر) به‬
‫‪ ‬یالهایی که ‌‬
‫‌دار به‬
‫جهتدار میکنیم‪ .‬یک درخت (جنگل) ریشه ‌‬
‫‌‬
‫راس با اندیس کوچکتر (فرزند)‬
‫دست میآید که آن را درخت (جنگل) ‪ DFS‬گراف می‌نامیم‪.‬‬
‫جهتدار میکنیم و‬
‫‌‬
‫در جنگل ‪ DFS‬قر ‌ار ندارند را ‌از نوه به طرف جد‬
‫‪ ‬یال‌هایی که ‌‬
‫یال‌های بازگشتی مینامیم‪.‬‬
‫‪ ‬نقطه پایین راس ‪ v‬که با نماد ) ‪(v‬نشان داده میشود‪ ،‬کمترین مقدار )‪ dfi(u‬است‬
‫حداکثر یک یال بازگشتی است‪ ،‬به ‪u‬‬
‫‌‬
‫مسیر جهتداری‌ که شامل‬
‫‌‬
‫به طوری که ‪ v‬با‬
‫متصل باشد‪.‬‬
‫نظریه الگوریتمی گراف‪ -‬گروه علوم کامپیوتر دانشگاه شهید بهشتی‬
‫‪17‬‬
‫الگوریتم ‪DFS‬‬
‫نظریه الگوریتمی گراف‪ -‬گروه علوم کامپیوتر دانشگاه شهید بهشتی‬
‫‪18‬‬
‫یادآوری‬
‫‪ ‬یک بلوک در گراف زیرگراف ماکسیمال بدون راس برش ی است‪.‬‬
‫‪ ‬اشتراک هر دو بلوک تنها یک راس برش ی است‪.‬‬
‫‪ ‬بلوکی که فقط یک راس برش ی داشته باشد‪ ،‬بلوک پایانی نام دارد‪.‬‬
‫نظریه الگوریتمی گراف‪ -‬گروه علوم کامپیوتر دانشگاه شهید بهشتی‬
‫‪19‬‬
‫الگوریتم ‪ DFS‬برای تعیین راسهای برش ی‬
‫‪ ‬قضیه‪ :‬فرض کنید ‪ T‬درخت ‪ DFS‬گراف ‪ G‬و ‪ r‬ریشه ‪ T‬باشد‪ .‬آنگاه ‪ r‬راس برش ی‬
‫است اگر و تنها اگر ‪ r‬در ‪ T‬دارای حداقل دو فرزند باشد‪.‬‬
‫ایده اثبات‪ :‬فرض کنید ‪ r‬دارای دو فرزند ‪ u‬و ‪ v‬باشد‪ T(u) .‬و )‪ T(v‬هرکدام یک بلوک از‬
‫گراف هستند‪.‬‬
‫برعکس‪ ،‬اگر ‪ r‬راس برش ی باشد‪ ،‬وقتی ‪ DFS‬وارد یک بلوک متصل به ‪ r‬میشود‪ ،‬تا زمانی‬
‫در آن بلوک باقی میماند ‌و برای مشاهده راس‬
‫که همه راس‌های بلوک را مشاهده نکرده ‌‬
‫باز میگردد‪ .‬پس ‪ r‬دارای د ‌و فرزند میشود‪.‬‬
‫دیگر به ‪‌ r‬‬
‫های بلوک ‌‬
‫نظریه الگوریتمی گراف‪ -‬گروه علوم کامپیوتر دانشگاه شهید بهشتی‬
‫‪20‬‬
‫الگوریتم ‪ DFS‬برای تعیین راسهای برش ی‬
‫‪ ‬قضیه‪ :‬فرض کنید ‪ T‬یک درخت ‪ DFS‬از گراف همبند ‪ G‬و ‪ u‬یک راس به جز ریشه ‪T‬‬
‫باشد‪ .‬در این صورت‪ u ،‬راس برش ی است اگر و تنها اگر ‪ u‬در ‪ T‬فرزندی مانند ‪ v‬داشته‬
‫) ‪(v )  dfi (u‬‬
‫باشد به طوری که‬
‫نظریه الگوریتمی گراف‪ -‬گروه علوم کامپیوتر دانشگاه شهید بهشتی‬
‫‪21‬‬
‫الگوریتم ‪ DFS‬برای تعیین راسهای برش ی‬
‫‪ ‬قضیه‪ :‬فرض کنید ‪ T‬یک درخت ‪ DFS‬از گراف همبند ‪ G‬و ‪ u‬یک راس به جز ریشه ‪T‬‬
‫باشد‪ .‬در این صورت‪ u ،‬راس برش ی است اگر و تنها اگر ‪ u‬در ‪ T‬فرزندی مانند ‪ v‬داشته‬
‫) ‪(v )  dfi (u‬‬
‫باشد به طوری که‬
‫ایده اثبات‪ :‬فرض کنید ‪ u‬برش ی باشد و برای هر فرزند ‪ v‬از ‪،u‬‬
‫پس یک یال‬
‫) ‪(v )  dfi (u‬‬
‫بازگشتی از راس ی از )‪ T(v‬به یک جد ‪ u‬متصل است‪ .‬پس ‪ u‬و ‪ v‬در یک بلوک قرار دارند‪.‬‬
‫بنابراین ‪ u‬راس برش ی نیست‪.‬‬
‫برعکس‪ ،‬اگر برای یک فرزند مانند ‪(v )  dfi (u ) ،v‬باشد‪ .‬در این صورت فرض کنید ‪S1‬‬
‫مجموعه راسهای مسیر از ‪ r‬به ‪ u‬و ‪ S2‬مجموعه راسهای )‪ T(v‬باشد‪ .‬هر مسیری که راس ی از‬
‫‪ S1‬را به راس ی از ‪ S2‬متصل میکند‪ ،‬از ‪ u‬میگذرد‪ .‬پس ‪ u‬راس برش ی است‪.‬‬
‫نظریه الگوریتمی گراف‪ -‬گروه علوم کامپیوتر دانشگاه شهید بهشتی‬
‫‪22‬‬
‫الگوریتم تعیین بلوکهای گراف‬
‫‪ ‬ایده‪:‬‬
‫‪ ‬ابتدا یک درخت ‪ DFS‬با شروع از راس دلخواه ‪ r‬بسازید و همزمان راسهای برش ی‬
‫گراف را تعیین کنید‪.‬‬
‫ی مالقات نشد‪ ،‬راسهای‬
‫بار مالقات یک راس برش ی‪ ،‬هیچ راس برش ی دیگر ‌‬
‫اگر بین د ‌و ‌‬
‫‪‌ ‬‬
‫بین د ‌و مالقات این راس برش ی‪ ،‬یک بلوک پایانی هستند‪ .‬آنها را اعالم ‌و ‌از گراف حذف‬
‫در‬
‫کنید ‌و این روند را ادامه دهید تا گراف باقیمانده هیچ راس برش ی نداشته باشد‪‌ .‬‬
‫آخر را تشکیل میدهند‪.‬‬
‫این صورت همه راسهای باقی‌مانده‪ ،‬بلوک ‌‬
‫نظریه الگوریتمی گراف‪ -‬گروه علوم کامپیوتر دانشگاه شهید بهشتی‬
‫‪23‬‬
‫الگوریتم ‪BFS‬‬
‫‪ ‬ورودی‪ :‬گراف ‪G‬‬
‫‪ ‬خروجی‪ :‬یک جنگل فراگیر از گراف ‪G‬‬
‫‪ ‬برای هر راس یکی از وضعیت‌های مشاهده نشده (‪ ،)status=1‬درحال پردازش‬
‫(‪ )status=1‬و پردازش شده (‪ )status=3‬وجود دارد‪.‬‬
‫‪ ‬معموال در پیاده سازی این الگوریتم از ساختمان داده صف استفاده میشود‪.‬‬
‫نظریه الگوریتمی گراف‪ -‬گروه علوم کامپیوتر دانشگاه شهید بهشتی‬
‫‪24‬‬
‫الگوریتم ‪BFS‬‬
‫‪ -1‬برای هر راس ‪ u‬در ‪ G‬قرار دهید ‪ status(u) = 1‬و ‪.k = 1‬‬
‫‪ -2‬یک راس دلخواه ‪ u‬با ‪ status(u)= 1‬انتخاب کنید‪ ،‬قرار دهید ‪u ، status(u)=2‬‬
‫را در صف وارد کنید و قرار دهید ‪.pred(u) = 0‬‬
‫‪ -3‬تا زمانی که صف خالی نشده‪،‬‬
‫‪ -1-3‬یک راس ‪ v‬از ابتدای صف بردارید‪ .‬همه همسایگان ‪ v‬که وضعیت ‪ 1‬دارند‪ ،‬به وضعیت‬
‫‪ 2‬ببرید و در صف وارد کنید‪.‬‬
‫‪ -2-3‬قرار دهید ‪ pred(v) =u ، bfi(v) = k ،status(v) = 3‬و ‪ .u=v‬و ‪.k = k+1‬‬
‫‪ -4‬اگر راس ی در گراف با وضعیت ‪ 1‬باقی مانده است‪ ،‬به مرحله ‪ 2‬بروید‪ .‬در غیر این‬
‫صورت الگوریتم تمام شده است‪.‬‬
‫نظریه الگوریتمی گراف‪ -‬گروه علوم کامپیوتر دانشگاه شهید بهشتی‬
‫‪25‬‬
‫الگوریتم ‪ - BFS‬مثال‬
‫نظریه الگوریتمی گراف‪ -‬گروه علوم کامپیوتر دانشگاه شهید بهشتی‬
‫‪26‬‬
‫اجرای الگوریتم ‪BFS‬‬
‫نظریه الگوریتمی گراف‪ -‬گروه علوم کامپیوتر دانشگاه شهید بهشتی‬
‫‪27‬‬