الگوریتم فلوید


Error

اگر یک نمودار دارای چرخه هایی با وزن منفی است، به طور رسمی الگوریتم فلوید-وارشال برای چنین نموداری قابل اجرا نیست.

در واقع، برای آن جفت رئوس i  و j که بین آن‌ها نمی‌توان چرخه وزن منفی را وارد کرد، الگوریتم به درستی کار می‌کند.

برای همان جفت رئوس که پاسخی برای آنها وجود ندارد (به دلیل وجود یک چرخه منفی در مسیر بین آنها)، الگوریتم فلوید تعدادی عدد (احتمالاً به شدت منفی، اما نه لزوما) را به عنوان پاسخ پیدا می کند. با این حال، الگوریتم فلوید را می توان بهبود بخشید تا این جفت رئوس را به طور منظم مدیریت کند و خروجی به عنوان مثال \(- \infty\) داشته باشد.

برای انجام این کار، به عنوان مثال، معیار  "عدم وجود مسیر" را می توان انجام داد. بنابراین، اجازه دهید الگوریتم فلوید معمولی روی این نمودار کار کند. سپس کوتاهترین مسیری بین رئوس i و j اگر و فقط در صورتی وجود داشته باشد که یک راس t قابل دسترسی از i و از آن j قابل دسترسی باشد، که برای آن  \(d [t][t]<0\).

علاوه بر این، هنگام استفاده از الگوریتم فلوید برای نمودارهایی با چرخه های منفی، باید به خاطر داشت که فواصلی که در فرآیند کار به وجود می آیند می توانند با هر فاز به صورت نمایی منفی پیش بروند. بنابراین، باید با محدود کردن تمام فواصل از پایین به مقداری (به عنوان مثال،  \(- \infty\)) از سرریز اعداد صحیح مراقبت کنید.

به صورت کلامی، راه حل را می توان به شرح زیر توصیف کرد:
پس از اینکه الگوریتم فلوید-وارشال برای نمودار ورودی کار کرد، بیایید روی همه جفت رئوس \((i,j)\) و برای هر جفت از این قبیل تکرار کنیم. بررسی می کنیم، بی نهایت کوتاه ترین مسیر از i به j کوچک است یا خیر. برای انجام این کار، بیایید روی سومین راس t تکرار کنیم، و اگر معلوم شد که \(d[t][t] < 0\)  (یعنی در چرخه وزن منفی قرار دارد)، و از i و j — سپس مسیر \((i,j)\) می تواند بی نهایت کوچک باشد.

از آنجایی که الگوریتم فلوید به طور متوالی فواصل بین همه جفت رئوس (i, j)، از جمله آنهایی که دارای i=j هستند را شل می کند و فاصله اولیه بین یک جفت رئوس (i, i) برابر با صفر است، پس آرامش فقط می تواند رخ دهد. اگر راس k به گونه ای باشد که d[i][k]+d[k][i]<0، که معادل داشتن یک چرخه منفی در راس i است.

می‌توانید درباره یافتن یک چرخه منفی در اینجا بیشتر بخوانید: http://e-maxx.ru/algo/export_ford_bellman

مسیر عبور از چرخه وزن منفی غیرممکن می شود.