Table of Contents
درک کوتاه ترین مشکل راه حل All-Pairs
مشکل کوتاه ترین مسیر (APSP) به دنبال کوتاه ترین فاصله بین هر جفت سرگیجه در یک نمودار وزن است، این یک چالش اساسی در تئوری گراف با مفاهیم مستقیم برای طراحی شبکه، بهینه سازی جریان ترافیک، تجزیه و تحلیل شبکه های اجتماعی و تدارکات است. برخلاف مشکلات تک منبع، حل APSP نیاز به فاصله از هر یک از هر یک از این مقیاس ها به همه مقیاس های ثابت است که به طور چهارجانبه با تعداد گره ها.
روش های رایج این مشکل را حل می کنند اما با معامله (FLT:1) ، یک الگوریتم برنامه نویسی پویا ، بر روی گراف های متراکم کار می کند ، اما در O] (V ، بهترین روش های کاهش وزن وجود دارد (FLT:2) [FLT3] ، زمان و نمی تواند چرخه های منفی وزن را مدیریت کند.
مقایسه الگوریتم های مشترک
برای قدردانی از الگوریتم جانسون، این کار به مقایسه اغلب از حل کنندگان APSP کمک می کند:
- - ساده برای پیاده سازی، استفاده از یک ماتریس فاصله 2D، به روز رسانی از طریق حلقه های سه گانه کار بر روی لبه های منفی اما نه چرخه های منفی غیر عملی برای گراف با هزاران سرگیجه به دلیل زمان مکعب.
- [[۱] [۱۰] [۱۰] [۱۰] [۱۰] [۱۰] [۱]] [۱۰] [۱]] [۱۰] [۱۰]] [۱۰]] [۱۰]] [۱۰]] با استفاده از توده های فیبوناچی]، اما به وزن غیر منفی محدود شده است.
- [در این باره] [و [از این رو] [و [از این رو] [بر [براى] [براى] [براى] [براى]] [براى] [براى] [براى] [براى]] [براى] [براى [براى]] [براى [براى]] [براى [براى [براى] [براى [براى [براى]] [وى] [براى [براى [براى [براى [براى]]] [براى [براى [براى [براى [براى [براى [وى]]]]]]]] [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى]]]]]]]]]]]]]]]]]]]]]]] [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [براى [بر
- [[ویرایش] [[[ویرایش] [FLT:] [FLT] [FLT]] [FLT] [FLT]] [FLT:] الگوریتم تکراری [FLT] [FLT3] [FLT32] را اصلاح می کند، سپس Dijkstra تکرار می شود [FLT5] با یک نمودار دودویی برای ساخت آن، ترجیح می دهد.
چگونه الگوریتم جانسون کار می کند
الگوریتم جانسون به طور هوشمندانه یک نمودار حاوی لبه های منفی را به یک با وزن لبه های غیر منفی تبدیل می کند، حفظ ساختار کوتاه ترین مسیرها، این تحول به یک تابع (FLT:0)potential ( از یک اجرای واحد از Bellman-Ford، هنگامی که دوباره وزن، متکی است، الگوریتم Dijkstra می تواند از هر الگوریتم چهار مرحله استفاده کند.
مرحله 1: اضافه کردن یک گره منبع بالا
در این میان، در این میان، به صورت مستقیم به هر گونه ویژگی های جدید و دارای قابلیت های جدید و مناسب برای استفاده از آن اضافه می شود.
مرحله دوم: محاسبات قابلیت های بالقوه با Bellman-Ford
در این میان، از طریق ، ، ، ، ، [[FLT]]، [[F6]]، [[F2]]، [[رده:S]]، [[رده:S]]، [[رده:Sp|Sp|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
مرحله 3: وزنه برداری نمودار
و از این رو، هر کدام از این دو را به صورت زیر استفاده می کنند.
[و] [و] [و] [و] [و] [و] [و] [و] [و] [و [و]] [و [و]] [و [و]] [و [و]] [و [و]]] [و [و [و]] [و [و [و] [و [و [به]] [و [و [و [و [و [و [و]]] [و [و [و [و [و [و [و [و [و [و]]] [و [و [و [و [و [و [و [و [و [و [و]]]]]]]]]] [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [
این تغییر تضمین می کند که هر وزن کم وزن، منفی است. [۱] اثبات بر نابرابری مثلث تکیه دارد؛ زیرا h (v) ≤ h (u) + w (u) و [و] کوتاه ترین مسیر (FLT 1) (از بلمن-فورت) ، آن را دنبال می کند که [F:2w] [و [و] گراف [و [و] [و [و] [و [و] [و [و] [و [و [و] [و [و] [و] [و [و [و] [و [و] [و] [و [و [و [و] [و] [در این [در این [در این [در [و [و] [در [در [و] [در [در [و] [و] [و] [و] [در [و] [در [در [و] [در [در [و] [در [در [و] [در [در [در] [در [در [و] [و] [در [و] [در [در [در [در [در [و] [در [در] [و] [در [و
مرحله 4: اجرای الگوریتم Dijkstra از هر Vertex
با گراف دوباره وزن که فقط لبه های غیر منفی دارد، الگوریتم Dijkstra یک بار از هر اندکس اجرا می شود.هر اجرا کوتاه ترین فاصله را به تمام دیگر سرگیجه ها محاسبه می کند. فاصله های حاصل شده پس از آن به وزن های لبه اصلی با استفاده از فرمول تبدیل می شوند:
[[ویرایش] [۱] [۱۰] [۱] [۱۰] [۱] [۱] [۱] [۱] [۱] [۱] [۱۰] [۱] [۱۰] [۱] [۱۰] [۱] [۱۰] [۱] [۱۰] [۵] [۳] [۳] [۳] [۳] [۳] [بر [بر [[۳] [۳] [۳] [بر [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و [و] [و [و [و [و [و [و [و [و] [و] [و]] [و [و [و [و [و [و [و [و [و [و [و] [و [بر [و [و] [و] [و]] [و [و [و [بر [و [و] [بر [و] [بر [بر [بر [و [و [و [و [و [و [و [و [و] [و [بر [بر [بر [و [و] [و]]] [بر [بر
این مرحله نهایی تضمین می کند که مسافت های گزارش شده برای نمودار اصلی دقیق هستند.
پیچیدگی و تجزیه و تحلیل عملکرد
[در این باره]، [و] [و] [و [از این رو] [و [از این رو] [و [از این رو] [و [از این رو] [و] [و [از این رو] [در برابر] [و [از این رو] [و] [در] [و [و]] [در [و [و] [و [به]]] [و [و [و [و [و]]] [و [و [و [و [و [و [و]]]]] [و [و [و [و [و [و [و [و [و [و [و [و]]]]]]]]]]]] [و [در [در [و [و [و [و [و [و [و [و [و [و [و [و [و [و [در [از [از [بر [بر [و [و [از [از [از [بر [بر [بر [در [در [در [و [و [و [و [و [و [در]]]]]]]]]]]]]]]]]] [در [
استفاده از یک توده فیبوناچی می تواند بخش Dijkstra را کاهش دهد (FLT:0O (V + V 2 log V] به طور ضمنی بهبود یافته است، هرچند در توده های عمل ساده تر و اغلب سریع است.
برنامه های کاربردی عملی
الگوریتم جانسون در دامنه هایی کار می کند که لبه های گراف ممکن است هزینه های منفی را حمل کنند و کوتاه ترین فاصله ها را در جهان واقعی شامل می شوند:
- مسیریابی شبکه: ارائه دهندگان خدمات اینترنت و شبکه های مخابراتی از پروتکل های مسیریابی توزیع شده استفاده می کنند که باید به طور سازگار ارزان ترین مسیر بین هر دو روتر را محاسبه کنند، حتی زمانی که هزینه های لینک نوسان یا منفی می شوند (به عنوان مثال، به دلیل ازدحام یا تخفیف های سیاست).
- ] برنامه ریزی حمل و نقل Urban: شرکت های نقشه برداری و تدارکات (به عنوان مثال، Google Maps، موتورهای مسیریابی OpenStreetMap) کوتاه ترین مسیر بین بسیاری از جفت های اولیه برای بهینه سازی ناوگان را محاسبه می کنند.
- هزینه های زنجیره ای به حداقل رساندن: در شبکه های تولید چند مرحله ای، هزینه از یک گره به دیگری ممکن است منفی باشد (به عنوان مثال، rebates).
- تجزیه و تحلیل شبکه اجتماعی: اندازه گیری نزدیک بودن مرکز مرکزی بودن یا بین مرکزی بودن نیاز به تمام فاصله های ضعیف است.
- مدل های ورودی اقتصادی: مدل های لئونتیف و تجزیه و تحلیل جریان اغلب شامل ضریب های منفی هستند؛ الگوریتم جانسون اثر خالص تغییرات را از طریق یک اقتصاد متصل محاسبه می کند.
برای مطالعه بیشتر در پایه های ریاضی، ببینید وکیپزیت (FLT:1) و مقاله اصلی توسط دونالد B. جانسون (1977)، یک پیاده سازی عملی در پایتون می تواند در مخزن GitHub گام به گام یافت. که شامل الگوریتم جانسون به عنوان یک تابع استاندارد برای درک عمیق تر از وزن [F4] است.
نتیجه گیری
الگوریتم جانسون به عنوان یک راه حل ظریف و عملی برای کوتاه ترین مشکلات مسیر زمانی که وزنه های منفی لبه وجود دارد، با ترکیب قوی بودن Bellman-Ford (برای تشخیص چرخه های منفی و پتانسیل های محاسباتی) با سرعت Dijkstra (برای نمودار های غیر منفی)، به عملکرد عالی در شبکه های کم وزن تکنیک می پردازد و به عنوان یک ابزار جریان ساده - به عنوان یک روش های حداقل گسترش می دهد.
هنگامی که با یک مشکل واقعی APSP مواجه می شود که نمودارها پراکنده هستند و ممکن است حاوی لبه های منفی باشند، الگوریتم جانسون باید اولین مورد توجه باشد، تضمین های نظری و اجرای گسترده آن در کتابخانه ها (به عنوان مثال، NetworkX ، .