الگوریتم بلمن–فورد

دانشنامه عمومی

الگوریتم بلمن - فورد الگوریتم پیمایش گراف است که مسئلهٔ کوتاهترین مسیر از مبدأ واحد را برای گراف های وزن داری که وزن یال ها ممکن است منفی باشد حل می کند.
الگوریتم دَیکسترا مسئلهٔ مشابهی را در زمان اجرای کمتر حل می کند، اما در آن الگوریتم می بایست وزن یال ها اعداد نامنفی باشند. بنابراین در عمل الگوریتم بلمن - فورد فقط برای گراف هایی که یال با وزن منفی دارند استفاده می شود.
قبل از توضیح الگوریتم لازم به ذکر است که اگر گراف دوری با مجموع وزن منفی داشته باشد که از مبدأ قابل دست یابی باشد، مسئلهٔ کوتاهترین مسیر جوابی نخواهد داشت، چراکه با پیمایش آن دور به هر تعداد بار دلخواه، مسیرهایی با وزن کمتر و کمتر حاصل خواهد شد.
ساختار اصلی الگوریتم بلمن - فورد مشابه الگوریتم دایکسترا است. اجرای الگوریتم 1 - |V| دنبالهٔ d چنان تعریف می شود که برای هر رأس v ، مقدار d v در پایان مرحلهٔ i ام برابر وزن کوتاهترین گذر از مبدأ به v است با این شرط اضافه که تعداد یال های این گذر حداکثر i باشد. بنابراین در پایان مرحلهٔ ( 1 - |V| ) ام d v برابر وزن کوتاهترین مسیر از مبدأ به v خواهد بود ( در واقع چون دور با مجموع وزن منفی نداریم، کوتاهترین گذر با حداکثر 1 - |V| یال از مبدأ به v ، همان کوتاهترین مسیر از مبدأ به v در گراف خواهد بود ) .
اساس کار الگوریتم آزادسازی ( Relaxation ) همهٔ یال های گراف در هر مرحله است. آزادسازی یال ( u , v ) به این معناست که اگر d u + w e i g h t ( u , v ) < d v آنگاه قرار می دهیم d v = d u + w e i g h t ( u , v ) . با این اوصاف اگر آزادسازی همهٔ یال ها را برای بار |V|ام هم تکرار کنیم و بعد از این مرحله هم دنبالهٔ d تغییر کند، آنگاه می توان نتیجه گرفت که گراف دور منفی ای دارد که از مبدأ قابل دست یابی است. بنابراین الگوریتم بلمن - فورد توانایی تشخیص دور منفی را نیز دارد.
همانطور که گفته شد الگوریتم بلمن - فورد توانایی تشخیص دور منفی را نیز دارد. بنابراین الگوریتم را به گونه ای پیاده سازی می کنند که در صورت تشخیص دور منفی مثلاً مقدار بولی 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 d w = ∞ 8 d s = 0 9 for i = 1 to |V| - 1 do 10 for all edge ( u, v ) in E do 11 if d u + w e i g h t ( u , v ) < d v then 12 d v = d u + w e i g h t ( u , v ) 13 for all edge ( u, v ) in E do 14 if d u + w e i g h t ( u , v ) < d v then 15 return False 16 return True 17 end اثبات درستی می توان درستی را با استفاده از استقرای ریاضی نشان داد.
عکس الگوریتم بلمن–فورد
این نوشته برگرفته از سایت ویکی پدیا می باشد، اگر نادرست یا توهین آمیز است، لطفا گزارش دهید: گزارش تخلف

پیشنهاد کاربران

الگوریتم بلمن فورد یکی از روش های کلاسیک برای یافتن کوتاه ترین مسیر از یک رأس مبدأ به سایر رأس ها در یک گراف وزن دار و جهت دار است. این الگوریتم از اصل به روزرسانی تدریجی ( Relaxation ) یا ریلکسیشن استفاده
...
[مشاهده متن کامل]
می کند و فاصله ی هر رأس از مبدأ را طی n - 1 تکرار ( n تعداد رأس ها ) بهبود می بخشد. یکی از مزایای مهم بلمن فورد نسبت به دیکسترا این است که می تواند با یال های وزن منفی نیز کار کند، که در بسیاری از مسائل کاربردی، مانند مسیریابی در شبکه های کامپیوتری و تحلیل سیستم های اقتصادی، اهمیت زیادی دارد.

منابع• https://blog.programstore.ir/الگوریتم-بلمن-فورد/

بپرس