جریان بیشینه: فورد-فالکرسون و قضیه برش-کمینه/جریان-بیشینه

مسائل جریان بیشینه بیشترین توان عملیاتی ممکن از میان یک شبکه با اتصالات محدود-به-ظرفیت را مدل‌سازی می‌کنند، از لوله‌های آب تا شبکه‌های داده. این راهنمای جامع شبکه‌های جریان را معرفی می‌کند، روش فورد-فالکرسون برای یافتن جریان بیشینه با استفاده از مسیرهای تقویتی را مرور می‌کند، و قضیه ظریف برش-کمینه/جریان-بیشینه که دو مسئله به‌ظاهر متفاوت را به یکی متصل می‌کند را توضیح می‌دهد.

مسئله جریان بیشینهالگوریتم فورد-فالکرسونقضیه برش-کمینه جریان-بیشینه

~5 دقیقه مطالعه · آخرین به‌روزرسانی ۱۶ شهریور ۱۴۰۵

یک شبکه جریان چه چیزی را نشان می‌دهد

یک Flow Network (شبکه جریان) یک گراف جهت‌دار است، همان‌طور که پیش‌تر در این مجموعه معرفی شد، جایی که هر یال یک Capacity (ظرفیت) دارد که محدود می‌کند چقدر "جریان" می‌تواند از میان آن عبور کند، و دو رأس مشخص: یک Source (منبع) s که جریان از آنجا نشأت می‌گیرد، و یک Sink (چاهک) t که جریان در آنجا خاتمه می‌یابد. این سناریوهای واقعی مانند جریان آب از میان لوله‌ها با قطر محدود، جریان داده از میان لینک‌های شبکه با پهنای باند محدود، یا جریان کالا از میان یک زنجیره تأمین با ظرفیت حمل‌ونقل محدود را مدل‌سازی می‌کند.

یک جریان معتبر باید دو ویژگی را برآورده کند:

محدودیت ظرفیت: برای هر یال (u, v)،
  جریان f(u,v) نمی‌تواند از ظرفیتش c(u,v) فراتر رود

حفظ جریان: برای هر رأس به‌جز s و t،
  کل جریان وارد به رأس برابر با
  کل جریان خارج از رأس است
  (جریان نمی‌تواند در هیچ‌جایی به‌جز منبع و چاهک انباشته شود)

مسئله Maximum Flow Problem (جریان بیشینه) اختصاص مقادیر جریان به هر یال را می‌خواهد که کل جریان خارج از منبع را کمینه می‌کند (به‌طور معادل، کل جریان رسیده به چاهک)، در حالی که هر دو محدودیت بالا را رعایت می‌کند.

روش فورد-فالکرسون: یافتن مکرر مسیرهای تقویتی

Ford-Fulkerson Method (روش فورد-فالکرسون) بر یک ایده ساده و شهودی مبتنی است: تا زمانی که یک مسیر از منبع به چاهک وجود دارد که در امتداد آن همچنان جریان بیشتری می‌توان فشار داد، جریان اضافی را در امتداد آن مسیر فشار بده، و تکرار کن تا هیچ مسیری باقی نماند.

گراف باقی‌مانده

ایده ساختاری کلیدی که این روش را درست کار می‌کند Residual Graph (گراف باقی‌مانده) است، که نشان می‌دهد چقدر جریان اضافی همچنان می‌تواند در امتداد هر یال فشار داده شود، و حیاتاً، همچنین توانایی "لغو‌کردن" جریان از‌قبل‌ارسال‌شده، از طریق یک یال معکوس را نشان می‌دهد.

برای یک یال (u, v) با ظرفیت c و جریان فعلی f:
ظرفیت باقی‌مانده رو-به-جلو: c(u,v) - f(u,v)
                            (فضای باقی‌مانده برای فشار جریان بیشتر)
ظرفیت باقی‌مانده رو-به-عقب: f(u,v)
                            (توانایی لغو جریان از‌قبل‌ارسال‌شده)

این مکانیزم یال-معکوس ضروری است: اجازه می‌دهد الگوریتم یک انتخاب غیربهینه پیشین را با به‌طور مؤثر "بازگرداندن" جریان در امتداد یک مسیر و مسیریابی مجدد آن به جای دیگر تصحیح کند، که بدون آن الگوریتم می‌توانست در یک راه‌حل غیربهینه گیر بیفتد.

الگوریتم

FORD-FULKERSON(G, s, t):
  جریان f را روی هر یال به 0 مقداردهی اولیه کن
  تا زمانی که یک مسیر p از s به t در گراف باقی‌مانده Gf وجود داشته باشد:
      حداقل ظرفیت باقی‌مانده در امتداد p را پیدا کن، آن را cf(p) بنام
      // این "گلوگاه" مسیر تقویتی است
      برای هر یال (u, v) در مسیر p:
          اگر (u, v) یک یال رو-به-جلو باشد:
              f(u, v) = f(u, v) + cf(p)
          در غیر این صورت:      // (u, v) یک یال رو-به-عقب است
              f(v, u) = f(v, u) - cf(p)
  f را برگردان

هر چنین مسیری پیداشده در گراف باقی‌مانده Augmenting Path (مسیر تقویتی) نامیده می‌شود، و فشار جریان در امتداد آن به‌طور دقیق کل جریان را به‌اندازه ظرفیت گلوگاه مسیر افزایش می‌دهد — کوچک‌ترین ظرفیت باقی‌مانده در میان همه یال‌های آن مسیر، چون آن یال محدود می‌کند کل مسیر چقدر جریان اضافی می‌تواند حمل کند.

ردیابی یک مثال کوچک

شبکه ساده: s → a (ظرفیت 10)، s → b (ظرفیت 10)
                a → t (ظرفیت 10)، b → t (ظرفیت 10)
                a → b (ظرفیت 1)

تکرار 1: مسیر تقویتی s→a→t، گلوگاه = 10
             جریان: s→a=10، a→t=10، کل جریان تاکنون = 10

تکرار 2: مسیر تقویتی s→b→t، گلوگاه = 10
             جریان: s→b=10، b→t=10، کل جریان تاکنون = 20

هیچ مسیر تقویتی بیشتری وجود ندارد (هر دو a→t و b→t اشباع)
جریان بیشینه = 20

تحلیل زمان اجرا: بهبود ادموندز-کارپ

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

استفاده از BFS برای یافتن کوتاه‌ترین مسیر تقویتی
هر تکرار تضمین می‌کند الگوریتم در یک تعداد محدود
از تکرارها پایان می‌یابد:

زمان اجرای کل: O(VE²)

این به این دلیل است که هر یال فقط می‌تواند O(V) بار
گلوگاه یک کوتاه‌ترین مسیر تقویتی شود پیش از اینکه
طول کوتاه‌ترین مسیر باید به‌طور دقیق افزایش یابد،
و فقط O(V) طول مسیر ممکن

نوشته و پژوهش‌شده توسط دکتر شاهین صیامی

مقالات مرتبط

الگوریتم‌های نظریه اعداد: GCD، توان‌رسانی پیمانه‌ای، و RSA

رمزنگاری مدرن و بی‌شمار کاربرد الگوریتمی به تعداد کمی الگوریتم ظریف نظریه اعداد متکی است. این راهنمای جامع الگوریتم اقلیدس برای محاسبه بزرگ‌ترین مقسوم‌علیه مشترک، توان‌رسانی پیمانه‌ای سریع برای محاسبه کارآمد توان‌های بزرگ، و پایه ریاضی رمزنگاری RSA، یکی از پراستفاده‌ترین سیستم‌های رمزنگاری در جهان، را پوشش می‌دهد.

ادامه

اصول هندسه محاسباتی: جهت، تقاطع پاره‌خط، و پوسته محدب

الگوریتم‌های هندسی مسائل شامل نقاط، خطوط، و اشکال را حل می‌کنند، که در گرافیک کامپیوتری، برنامه‌ریزی مسیر رباتیک، و سیستم‌های اطلاعات جغرافیایی ظاهر می‌شوند. این راهنمای جامع آزمون جهت مبتنی بر ضرب خارجی که زیربنای تقریباً هر الگوریتم هندسی است، تشخیص تقاطع پاره‌خط ساخته‌شده روی آن آزمون، و الگوریتم اسکن گراهام برای محاسبه پوسته محدب یک مجموعه از نقاط را پوشش می‌دهد.

ادامه

الگوریتم‌های تطبیق رشته: جستجوی ساده، Rabin-Karp، و فراتر از آن

جستجو برای یک الگو درون یک متن بزرگ‌تر یکی از رایج‌ترین عملیات‌ها در محاسبات است، از ویرایشگرهای متن تا تحلیل توالی DNA. این راهنمای جامع الگوریتم تطبیق رشته ساده و بدترین‌حالت درجه‌دومش را پوشش می‌دهد، سپس استفاده ماهرانه الگوریتم Rabin-Karp از هشینگ برای دستیابی به کارایی سریع حالت‌میانگین را توضیح می‌دهد، شامل نحوه مدیریت درست برخوردهای هش.

ادامه

الگوریتم‌های تقریبی: نزدیک‌شدن اثبات‌پذیر به بهینه برای مسائل سخت

وقتی یک مسئله NP-complete اثبات شود، یک راه‌حل کارآمد دقیق بعید است وجود داشته باشد، اما این به معنای رهاکردن کامل مسئله نیست. این راهنمای جامع الگوریتم‌های تقریبی را توضیح می‌دهد، که تضمین بهینه‌بودن را در ازای تضمین کارایی معامله می‌کنند، و مسائل پوشش رأس و فروشنده دوره‌گرد را به‌عنوان مثال‌های کلاسیک با نسبت‌های تقریبی اثبات‌پذیر پوشش می‌دهد.

ادامه

NP-Completeness توضیح داده شده: P، NP، و چرا برخی مسائل در برابر راه‌حل‌های کارآمد مقاومت می‌کنند

برخی مسائل برای دهه‌ها در برابر هر تلاشی برای یک الگوریتم کارآمد مقاومت کرده‌اند، با این حال هیچ‌کس اثبات نکرده یک راه‌حل کارآمد غیرممکن است. این راهنمای جامع کلاس‌های P و NP، مفهوم تقلیل‌های زمان-چندجمله‌ای مورد استفاده برای مقایسه سختی مسئله، و چگونگی اینکه اثبات NP-complete بودن یک مسئله شواهد قوی، هرچند نه اثبات، فراهم می‌کند که هیچ الگوریتم کارآمدی وجود ندارد را توضیح می‌دهد.

ادامه

الگوریتم فلوید-وارشال: یافتن کوتاه‌ترین مسیرها بین هر جفت رأس

گاهی یک اپلیکیشن به کوتاه‌ترین فاصله بین هر جفت رأس ممکن نیاز دارد، نه فقط از یک منبع واحد. این راهنمای جامع مسئله کوتاه‌ترین مسیرهای همه‌جفت را توضیح می‌دهد، رابطه بازگشتی برنامه‌نویسی پویای ظریف پشت الگوریتم فلوید-وارشال را استخراج می‌کند، و کارایی آن را در برابر اجرای مکرر الگوریتم‌های منبع-واحد مقایسه می‌کند.

ادامه