250 likes | 516 Views
Overview of Single-Source Shortest Paths & All-Pairs Shortest Paths Algorithms. By Mohammad Roohitavaf roohitavaf@gmail.com Professor: Dr. Hasan Naderi Iran University Of Science and Technology 2009. محتوی :. پارامترها و اصطلاحات تقسیم بندی الگوریتم های SSP و ASP
E N D
Overview of Single-Source Shortest Paths &All-Pairs Shortest PathsAlgorithms By Mohammad Roohitavaf roohitavaf@gmail.com Professor: Dr. HasanNaderi Iran University Of Science and Technology 2009
محتوی : • پارامترها و اصطلاحات • تقسیم بندی الگوریتم های SSP و ASP • الگوریتم های SSP : - لیست - توضیح - مقایسه • الگوریتم های ASP : - لیست - توضیح - مقایسه - منابع و مواخذ
پارامترها و اصطلاحات V : تعداد گره (راس) های گراف E : تعداد یال های گراف SSP : single-source shortest paths یک بار اجرایش کوتاه ترین مسیر از یک گره به تمام گره های دیگر را مشخص می کند . ASP: َall-pairs shortest paths یک بار اجرایش کوتاه ترین مسیر از هر گره به تمام گره های دیگر را مشخص می کند . - اجرای یک بار ASP= اجرای V بار SSP
تقسیم بندی الگوریتم های SSP و ASP • SSP: • گراف یال با وزن منفی ندارد • گراف یال با وزن منفی دارد • ASP: • گراف یال با وزن منفی ندارد • گراف یال با وزن منفی دارد
لیست الگوریتم های SSP • گراف یال با وزن منفی ندارد : 1- Dijkestra :O(VlogV + E) 2-Bellman-Ford : O(VE) • گراف یال با وزن منفی دارد : 1-Bellman-Ford : O(VE)
توضیح الگوریتم های SSP Dijkestra : رجوع شود به : Introduction to algorithm صفحه ی 595 http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm
توضیح الگوریتم های SSP(ادامه) Bellman-Ford : مراحل : 1- Initialize Graph 2- relax کردن یال ها 3- چک کردن دور با وزن منفی
توضیح الگوریتم های SSP (ادامه) 1- Initialize Graph : for each vertex v in vertices: if v is source then v.distance := 0 else v.distance := infinity v.predecessor := null
توضیح الگوریتم های SSP (ادامه) 2- relax کردن یال ها : forifrom 1 to size(vertices)-1: for each edge uv in edges: u := uv.source v := uv.destination ifu.distance + uv.weight < v.distance: v.distance := u.distance + uv.weightv.predecessor := u
توضیح الگوریتم های SSP (ادامه) 3- چک کردن دور با وزن منفی : for each edge uv in edges: u := uv.source v := uv.destination ifu.distance + uv.weight < v.distance: error "Graph contains a negative-weight cycle"
توضیح الگوریتم های SSP (ادامه) مثال : دقت شود که در مرحله دو هر یال 4 بار چک می شود لذا 40 شکل لازم است . اشکال زیر چند نمونه هستند . شکل (e) یال هایی که در نهایت کوتاه ترین مسیر را مشخص کرده اند را نشان می دهد
مقایسه ی الگوریتم های SSP • یال با وزن منفی داریم : به ترتیب : Dijkestra[ O(VlogV + E) ] Bellman-Ford [ O(VE) ] • یال با وزن منفی نداریم : به ترتیب : Bellman-Ford [ O(VE) ]
لیست الگوریتم های ASP • گراف یال با وزن منفی ندارد : 1- V بار Dijkestra : O(V2logV + EV) 2- V بار Bellman-Ford : O(V2E) 3- Floyd-Warshall : O(V3) • گراف یال با وزن منفی دارد : 1- Johnson : O(V2loV + EV) 2- V بار Bellman-Ford : O(V2E) 3- Floyd-Warshall : O(V3)
توضیح الگوریتم های ASP Floyd-Warshal : Introduction to algorithm صفحه ی 629 http://en.wikipedia.org/wiki/Floyd-Warshall_algorithm
توضیح الگوریتم های ASP (ادامه) Johnson: مراحل : 1- اضافه کردن یک گره ی جدید به گراف 2- اجرای SSP با الگوریتم Bellman-Ford از گره ی جدید 3- reweight کردن یال ها 4-اجرایSSP با الگوریتم Dijkestraاز هر گره - در واقع Johnson = 1 بار Bellman-Ford + V بارDijkestra
توضیح الگوریتم های ASP (ادامه) توضیح مراحل با یک مثال مثال : گراف اصلی
توضیح الگوریتم های ASP (ادامه) 1 – اضافه کردن یک گره ی جدید به گراف : گره ی جدید را با یال با وزن صفر به تمام گره ها وصل می کنیم
توضیح الگوریتم های ASP (ادامه) 2- اجرای SSP با الگوریتم Bellman-Form از گره ی جدید برای هر راس h(v) ( کوتاه ترین فاصله از گره ی جدید )
توضیح الگوریتم های ASP (ادامه) 3- reweight کردن یال ها : وزن هر یال با فرمول زیر به روز می کنیم w(u,v) = w(u , v) + h(u) – h(v)
توضیح الگوریتم های ASP (ادامه) 4- اجرای SSP از هر گره با الگوریتم Dijkestra: پس از اجرای این مرحله برای هر جفت از راس ها کوتاه ترین مسیر را مشخص کرده ایم . • اما فاصله ها بر اساس وزن های به روز شده اند و کوتاه ترین فاصله های صحیح نیستند . • کوتاه ترین فاصله های صحیح به صورت زیر قابل محاسبه هستند . distance(u,v) = distance(u,v) – h(u) + h(v)
مقایسه ی الگوریتم های ASP • نکته : E<=V2 • گراف یال با وزن منفی ندارد : به ترتیب : V بار Dijkestra : O(v2logv + EV) Floyd-Warshall : O(V3) V بار Bellman-Ford : O(V2E) - البته اگر گراف کامل باشد Johnson و Floy-Warshallاز یک مرتبه هستند : O(v3) زیرا E= V2
مقایسه ی الگوریتم های ASP • نکته : E<=V2 • گراف یال با وزن منفی دارد : به ترتیب: Johnson : O(V2logV+ EV) Floyd-Warshall : O(V3) V بار Bellman-Ford : O(V2E) - البته اگر گراف کامل باشد Johnson و Floy-Warshallاز یک مرتبه هستند : O(v3) زیرا E= V2
منابع و مواخذ • Introduction to Algorithm • wikipedia.org