**الگوریتم دینیک** (به انگلیسی: Dinic's algorithm) یک الگوریتم چندجمله‌ای برای محاسبه شار بیشینه از s به t در یک گراف جهت‌دار است که در سال ۱۹۷۰ توسط Yefim Dinitz ارائه شد و همانند الگوریتم ادموندز-کارپ از مسیر افزایشی برای یافتن شار بیشینه استفاده می‌کند.

تعاریف
------

گراف G=(V,E,s,t) یک گراف با راس مبدأ s و راس مقصد t و c(u,v), f(u,v) به ترتیب شار و ظرفیت یال (u,v) در گراف G هستند.

**ظرفیت پسماند Residual Capacity) cf)**: یک تابع V×V → R است به طوری که:

اگر (u,v) عضو یال‌های گراف G باشد،

(cf(u,v) = c(u,v)-f(u,v

(cf(v,u) = f(u,v

و در غیر اینصورت:

cf(u,v) = ۰

**گراف پسماند (Residual Graph)**: گراف پسماند R=(V,Ef,s,t) را اینگونه تعریف می‌کنیم:

{ Ef={ (u,v) in E | cf(u,v)> 0

**شار سد کننده**: به یک شار سدکننده می‌گویند، اگر همهٔ مسیرهای از s به t آن دارای یال اشباع شده باشند.

**تراز راس ((Level(v)**: فاصله کوتاه‌ترین مسیر از s به v در گراف پسماند R.

در این الگوریتم، یافتن مسیرهای افزایشی را فقط به یالهایی محدود می‌کنیم که اختلاف تراز آن‌ها ۱ باشد. به همین دلیل زیر گرافی از R را می‌سازیم که دارای این ویژگی باشد:

**گراف تراز L**: زیر گرافی از گراف R که برای هر یال(u,v) در آن داشته باشیم: level(v) = level(u) + 1

الگوریتم
--------

ورودی:

* شبکهٔ (G=(V,E و دو راس مبدأ و مقصد s و t
* ظرفیت یال‌ها :(۰≤c i: (E υ ER → R

در ابتدا شار همهٔ یال‌های گراف را برابر **صفر** قرار می‌دهیم و با استفاده از **جستجوی سطح اول(BFS)**، گراف تراز L را بدست می‌آوریم و این مراحل را تکرار می‌کنیم:

1. تا زمانی که در گراف L مسیر افزایشی وجود دارد، مسیری را انتخاب می‌کنیم و آن را اشباع می‌کنیم. (پس از اتمام این مرحله یک شار سدکننده بدست آمده‌است)
2. سپس دوباره، تراز راس‌ها را حساب می‌کنیم و گراف L جدید را بدست می‌آوریم.

این مراحل را تا زمانی ادامه می‌دهیم که **level(t)<n** شود.

```
1 Input:
2 a flow network G=(V,E,c,s,t)
3 a feasible flow f in G(equal to zero by default)
4 Construct level graph L for f by Breadth First Search
5 By augmentations, find blocking flow f ' in L from f.
6 for all e assign f(e)←f(e)+f'(e)
7 if t is not in level graph,
8 then return f
9 else go to [4]

```

تحلیل الگوریتم
--------------

گراف تراز L را می‌توان در زمان(|O(|E، با استفاده از BFS بدست آورد و پیدا کردن شار سدکننده در هر مرحله در زمان (O(VE انجام می‌شود.

### قضیه

پس از حداکثر n-1 بار اجرای مرحله ۱و۲ (پیدا کردن شار سد کننده)، f برابر شار بیشینه گراف G خواهد بود.

#### اثبات

در هر مرحله، تراز راس t حداقل ۱ واحد افزایش پیدا می‌کند و چون هیچ مسیری با طول بیشتر از ۱-n وجود ندارد، حداکثر ۱-n مرحله برای پیدا کردن شار بیشینه لازم است.

پس زمان اجرای کل الگوریتم **(O(V2E** می‌باشد.

الگوریتم Dinic برای گراف‌های واحد
---------------------------------

در گراف واحد، ظرفیت همهٔ یال‌های برابر ۱ است و هر راسی به جز راس مبدأ و مقصد، دقیقاً یک یال ورودی و یک یال خروجی دارد.
مرتبه زمانی اجرای این الگوریتم روی گراف‌های واحد،**(O(mn1/2** است. پیدا کردن شار سدکننده در زمان **(O(E** قابل انجام است و تعداد مراحل پیدا کردن شار سد کننده،**(O**(√n-2 است.
این الگوریتم، همان الگوریتم هاپکرافت-کارپ برای پیدا کردن تطابق بیشینه در یک گراف دوبخشی است.

منابع
-----


* Yefim Dinitz (2006). "Dinitz' Algorithm: The Original Version and Even's Version". In Oded Goldreich, Arnold L. Rosenberg, and Alan L. Selman (ed.). *Theoretical Computer Science: Essays in Memory of [[Shimon Even]]* (PDF). Springer. pp. 218–240. ISBN 978-3540328803. Archived from the original (PDF) on 20 August 2016. Retrieved 30 December 2011. `{{cite book}}`: URL–wikilink conflict (help)نگهداری یادکرد:نام‌های متعدد:فهرست ویراستاران (link)
* Tarjan, R. E. (1983). *Data structures and network algorithms*.


| * ن
* ب
* و
بهینه‌سازی: تئوری، روش‌ها، و ابتکارها |
| --- |
| 

| برنامه‌سازی نامقید غیرخطی: روش‌ها با استفاده از |
| --- |
| 

|  |  |
| --- | --- |
| … تابع‌ها | 
* Golden section search
* Interpolation methods
* Line search
* روش نلدر - مید
* Successive parabolic interpolation

 |
| … و گرادیان‌ها | 

|  |  |
| --- | --- |
| Convergence | 
* Trust region
* Wolfe conditions

 |
| Quasi–Newton | 
* روش بی‌اف‌جی‌اس and L-BFGS
* DFP
* Symmetric rank-one (SR1)

 |
| Other methods | 
* Gauss–Newton
* Gradient
* الگوریتم لونبرگ-مارکارد
* Conjugate gradient

 |

 |
| … و هشین‌ها | 
* Newton's method

 |

 |

 | The graph of a strictly concave quadratic function is shown in blue, with its unique maximum shown as a red dot. Below the graph appears the contours of the function: The level sets are nested ellipses.Optimization computes maxima and minima. |
| 

| برنامه‌سازی مقید غیرخطی |
| --- |
| 

|  |  |
| --- | --- |
| کلی | 
* Barrier methods
* روش پنالتی

 |
| مشتق‌پذیر | 
* Augmented Lagrangian methods
* Sequential quadratic programming
* Successive linear programming

 |

 |

 |
| 

| بهینه‌سازی محدب |
| --- |
| 

|  |  |
| --- | --- |
| بهینه‌سازی محدب | 
* Cutting-plane method
* Reduced gradient (Frank–Wolfe)
* Subgradient method

 |
| برنامه‌ریزی خطی ودرجه دو | 

|  |  |
| --- | --- |
| برنامه‌ریزی خطی | 
* Ellipsoid algorithm of Khachiyan
* الگوریتم کارمارکار

 |
| Basis-الگوریتم حریصانه | 
* الگوریتم غیر مرکب
* Revised simplex algorithm
* Criss-cross algorithm
* Principal pivoting algorithm of Lemke

 |

 |

 |

 |
| 

| بهینه‌سازی ترکیبیاتی |
| --- |
| 

|  |  |
| --- | --- |
| الگو‌ها | 
* الگوریتم تقریبی
* برنامه‌ریزی پویا
* الگوریتم حریصانه
* بهینه‌سازی خطی عدد صحیح
	+ شاخه و حد یا شاخه و برش

 |
| الگوریتم‌هایگراف | 

|  |  |
| --- | --- |
| درخت پوشای کمینه | 
* الگوریتم بلمن–فورد
* الگوریتم بروکا
* الگوریتم دیکسترا
* الگوریتم فلوید-وارشال
* الگوریتم جانسون
* الگوریتم کراسکال

 |

 |
| شبکه شاره | 
* الگوریتم دینیک
* الگوریتم ادموندز کارپ
* الگوریتم فورد–فالکرسون
* الگوریتم ارسال-برچسب

 |

 |

 |
| 

| الگوریتم‌های فراابتکاری |
| --- |
| 
* الگوریتم تکاملی
* الگوریتم تپه‌نوردی
* الگوریتم جستجوی محلی (بهینه‌سازی)
* الگوریتم تبرید شبیه‌سازی شده
* الگوریتم جستجوی ممنوعه

 |

 |
| 
* **رده‌ها**
	+ روش‌ها
	+ ابتکارها
* **نرم‌افزارها**

 |