الگوریتم بلمن–فورد
الگوریتم بلمن-فورد الگوریتم پیمایش گراف است که مسئلهٔ کوتاهترین مسیر از مبدأ واحد را برای گرافهای وزنداری که وزن یالها ممکن است منفی باشد حل میکند.
رده | مسئله یافتن کوتاهترین مسیر (for weighted directed graphs) |
---|---|
ساختمان داده | گراف (ساختار داده) |
کارایی بدترین حالت | |
کارایی بهترین حالت | |
پیچیدگی فضایی |
الگوریتم دَیکسترا مسئلهٔ مشابهی را در زمان اجرای کمتر حل میکند، اما در آن الگوریتم میبایست وزن یالها اعداد نامنفی باشند. بنابراین در عمل الگوریتم بلمن-فورد فقط برای گرافهایی که یال با وزن منفی دارند استفاده میشود.
قبل از توضیح الگوریتم لازم به ذکر است که اگر گراف دوری با مجموع وزن منفی داشته باشد که از مبدأ قابل دستیابی باشد، مسئلهٔ کوتاهترین مسیر جوابی نخواهد داشت، چراکه با پیمایش آن دور به هر تعداد بار دلخواه، مسیرهایی با وزن کمتر و کمتر حاصل خواهد شد.
چگونه کار میکند؟
ساختار اصلی الگوریتم بلمن-فورد مشابه الگوریتم دایکسترا است. اجرای الگوریتم 1-|V| دنبالهٔ
اساس کار الگوریتم آزادسازی (Relaxation) همهٔ یالهای گراف در هر مرحلهاست. آزادسازی یال
الگوریتم
همانطور که گفته شد الگوریتم بلمن-فورد توانایی تشخیص دور منفی را نیز دارد. بنابراین الگوریتم را به گونهای پیادهسازی میکنند که در صورت تشخیص دور منفی مثلاً مقدار بولی True برگرداند.
پیادهسازی
یک پیادهسازی نوعی به این شرح است:
1 Algorithm Bellman-Ford(G,s) 2 Input : G=(V,E), s(the source vertex) 3 Output : Sequence d and a boolean return value 4 begin 5 for all vertices w do 6=8= 0 9 for i = 1 to |V|-1 do 10 for all edge (u,v) in E do 11 ifthen 12=13 for all edge (u,v) in E do 14 ifthen 15 return False 16 return True 17 end
اثبات درستی
می توان درستی را با استفاده از استقرای ریاضی نشان داد.
لم. بعد از i بار تکرار حلقه:
- اگر (Distance(u بی نهایت نباشد، برابر است با فاصله ی مسیری از s به u.
- اگر مسیری از s به u با حداکثر i یال وجود داشته باشد آنگاه (Distance(u حداکثر i یال دارد و طول کوتاهترین مسیر از s به u است.
اثبات.
ابتدا حالت پایه استقرا را در نظر بگیریم که در آن i=0
. در این حالت source.distance = 0
که درست است. به ازای تمامی گرههای غیر از مبنا u داریم u.distance = infinity
که درست است؛ چون که هیچ مسیری از مبنا به این گرهها با طول مسیر صفر وجود ندارد.
ابتدا قسمت اول را اثبات می کنیم.
با فرض استقرا فرض کنیم u.distance
طول مسیری از مبنا به u باشد. در اینصورت u.distance + uv.weight
طول مسیری از مبنا به v است.
برای قسمت دوم، طول کوتاهترین مسیر از مبنا به u با حداکثر تعداد i یال را در نظر بگیریم. فرض کنیم v گرهی قبل از u در طول این مسیر باشد، در اینصورت کوتاهترین مسیر به v با تعداد i-1 یال است. بنابه فرض استقرا بعد از i-1 تکرار حلقه، کوتاهترین مسیر تا v حداکثر به طول همین مسیر است(با i-1 یال). در اینصورت چون در i-امین تکرار حلقه uv.weight + v.distance
با u.distance
مقایسه میشود حتماً کوتاهترین مسیر با تعداد i یال در i امین تکرار پیدا خواهد شد.
توجه کنید که در چنین درختی که مسیر شامل حلقه نداریم، حداکثر طول مسیر برابر با
پیچیدگی زمانی
مشخص است که در
برنامههای مورد استفاده در مسیر یابی
انتشارات مختلفی از الگوریتم بل من فورد در پروتکل Distance vector routing مورد استفاده قرار گرفته بود. برای مثال پروتکل RIP یکی از الگورتیمهایی است که انتشار یافتهاست چون تعدادی از گرهها (مسیر یاب ها) را با یک سیستم خود مختار درگیر میکند. یک مجموعه شبکه IP که معمولاً به وسیلهٔ یک ISP مالکیت میشود شامل این گامها میشود: ۱- هر گره مسافت بین خودش و تمام گرههایی که در داخل AS اند را محاسبه میکند و در جدولی اطلاعات را ذخیره میکند . ۲- هر گره جدول اش را به تمام نودهای مجاورش ارسال میکند. ۳- وقتی یک گره جدول مسافت را از گره مجاور خودش دریافت میکند، کوتاهترین مسیرها را به تمام بقیه گرهها محاسبه میکند و جدول خودش را برای بازتاب تغییرات بروز میکند. اشکال اصلی الگوریتم بل من فورد در این تنظیمات عبارتست از : - بهخوبی مقیاس (نسبت) نمیکند. - تغییر در توپولوژی شبکه به سرعت انعکاس داده نمیشود چون آپدیت شدن گره به گره منتشر میشود. - محاسبه تا بینهایت ( اگر لینک یا گره در انتقال به یک گره غیرقابل دسترس از بعضی از مجموعه دیگر گرهها شکست بخورد، آن گرهها ممکن است برای همیشه به تدریج تخمین مسافتشان به آن گره افزایش پیدا کند و در ضمن ممکن است مسیر loop باشد.)
توسعه YEN
در انتشار سال ۱۹۷۰، Jin.Y.Yen یک توسعه از الگوریتم بل من فورد را برای گراف بدون حلقه با وزن منفی تشریح کرد. توسعه Yen ابتدا کمی نوبت خطی انحصاری بر روی تمام رئوس و بعد تمام قسمتهای مجموعه تمام یالها در یکی از ۲ زیر مجموعه نشان داد. اولین زیر مجموعه Ef۱ شامل تمام رئوس (Vi،Vj) که i<j و دومین مجموعه، Eb شامل یالهای (Vi،Vj) که i<j است. هر راس که در ترتیب v۱، v۲، ...، v|V|، ملاقات میشود را کم میکند . هر خروجی یال از آن راس در Ef ثبت میشود. هر راس بعدی که در ترتیب v|V|، v|V|−۱، ...، v۱ ملاقات میشود، هر خروجی از آن راس را در Eb کم میکند . توسعه Yen، تأثیرگذاری بسزایی در نصف کردن تعداد مسیرهای طی شده مورد نیاز برای مسئله کوتاهترین مسیر ممکن تک منبعی داشت.
کاربردها
پیوند به بیرون
منابع
- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. Introduction to Algorithms, Second Edition. MIT Press and McGraw-Hill, 2001. ISBN 0-262-03293-7.
- Udi Manber. Introduction to Algorithms — A Creative Approach. MIT Press and Addison-Wesley, 1989. ISBN 0-201-12037-2.
- Donald E. Knuth. The Art Of Computer Programming Vol 1., Third Edition. Addison-Wesley, 1997. ISBN 0-201-89683-4.
- Douglas B. West. Introduction to Graph Theory, Second Edition. Prentice Hall, 2001. ISBN 0-13-014400-2.
- Richard Bellman: On a Routing Problem, in Quarterly of Applied Mathematics, 16(1), pp. 87–90, 1958.
- L. R. Ford, Jr., D. R. Fulkerson: Flows in Networks, Princeton University Press, 1962.
- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. Introduction to Algorithms, Second Edition. MIT Press and McGraw-Hill, 2001. ISBN 0-262-03293-7. Section 24.1: The Bellman–Ford algorithm, pp. 588–592. Problem 24-1, pp. 614–615.
- George T. Heineman, Gary Pollice, and Stanley Selkow (2008). "Chapter 6:Graph Algorithms". Algorithms in a Nutshell. Oreilly Media. pp. 160–164. ISBN 978-0-596-51624-6.