---
title: "Dinamik Programlama"
source: "https://systems-analysis.info/int/Dinamik_Programlama"
wiki: "systems-analysis.info/int"
article: "Dinamik_Programlama"
language: "tr"
categories:
  - "Category:Operations research"
  - "Category:Turkish"
revision_id: 1688
wiki_created_at: 2026-09-06T22:52:29Z
wiki_modified_at: 2026-09-06T22:52:29Z
downloaded_at: 2026-09-07T22:47:15Z
---

# Dinamik Programlama

**Dinamik Programlama** (**DP**; İng. *dynamic programming, DP*) — karmaşık optimizasyon problemlerini çözmek için kullanılan, orijinal problemi daha basit alt problemlerden oluşan bir diziye bölen bir yöntemdir<sup>[\[1\]](https://systems-analysis.info/int/Dinamik_Programlama#cite_note-bigenc-dp-1)[\[2\]](https://systems-analysis.info/int/Dinamik_Programlama#cite_note-ru-wiki-dp-2)</sup>. Yöntem, tüm problemin optimal çözümünün alt problemlerin optimal çözümlerinden inşa edilebildiği çok adımlı karar alma süreçlerine uygulanır.

Terim, 1950'lerde Amerikalı matematikçi Richard Bellman tarafından ortaya atılmıştır<sup>[\[3\]](https://systems-analysis.info/int/Dinamik_Programlama#cite_note-rechetnikov-dp-3)</sup>. Bu bağlamda "programlama" kelimesi, bilgisayar kodu yazmak anlamında değil, "planlama" veya "optimal eylem planı oluşturma" anlamında kullanılmaktadır<sup>[\[4\]](https://systems-analysis.info/int/Dinamik_Programlama#cite_note-en-wiki-dp-4)</sup>.

## Temel Özellikler ve Teoremler

Dinamik programlamanın bir probleme uygulanabilirliği, o problemin iki temel özelliğe sahip olmasıyla belirlenir.

### Bellman'ın Optimallik İlkesi

Yöntemin merkezi kavramı **Bellman'ın optimallik ilkesidir** (İng. *Bellman's principle of optimality*). İlke şunu belirtir: başlangıç durumu ve başlangıç kararı ne olursa olsun, sonraki kararlar ilk kararın sonucunda elde edilen duruma göre optimal bir strateji oluşturmalıdır<sup>[\[3\]](https://systems-analysis.info/int/Dinamik_Programlama#cite_note-rechetnikov-dp-3)</sup>.

Başka bir deyişle, optimal bir yörüngenin herhangi bir parçası kendi başına da optimaldir. Bu özellik, genel problemin daha basit alt problemlerden oluşan bir diziye bölünmesini ve bunların özyinelemeli olarak çözülmesini mümkün kılar.

### Örtüşen Alt Problemler - Overlapping Subproblems

Bir problem, özyinelemeli çözümü sırasında aynı alt problemlerin defalarca ortaya çıkması durumunda **örtüşen alt problemler** (İng. *overlapping subproblems*) özelliğine sahiptir. DP, daha önce çözülen alt problemlerin çözümlerini saklayarak (bu teknik memoization veya tablo oluşturma olarak adlandırılır) tekrarlanan hesaplamaları önler ve bu sayede naif özyinelemeli aramaya kıyasla verimliliği önemli ölçüde artırır.

## Bellman Denklemi

Optimallik ilkesinden, yöntemin temel yinelemeli bağıntısı olan **Bellman denklemi** türetilir<sup>[\[1\]](https://systems-analysis.info/int/Dinamik_Programlama#cite_note-bigenc-dp-1)</sup>. Bu denklem, mevcut durumun "değerini" (optimal kazanç veya maliyet) sonraki durumların değerleriyle ilişkilendirir. Toplamsal amaç fonksiyonuna sahip deterministik çok adımlı bir süreç için genel biçimi şöyledir:

$$
V_{k - 1}(x) = \max\limits_{y \in U(x)}\{\varphi_{k}(x,y) + V_{k}(f_{k}(x,y))\}
$$

burada:

- $k$ — adım numarası ($m$'ten 1'e kadar);
- $x$ — $k - 1$ adımındaki sistemin durumu;
- $y$ — $k$ adımında alınan kontrol kararı;
- $\varphi_{k}(x,y)$ — k. adımdaki kazanç (veya maliyet);
- $f_{k}(x,y)$ — sistemin yeni durumunu tanımlayan fonksiyon;
- $V_{k}(s)$ — $k$ adımında $s$ durumundan başlayan alt problemin amaç fonksiyonunun optimal değeri.

Denklem, genellikle son adımdan ilk adıma doğru ilerleyerek "sondan başa" sıralı biçimde çözülür.

## Uygulama Örnekleri

- **Grafta en kısa yol problemi**: Bu problem, en kısa yolun herhangi bir parçasının kendisinin de en kısa olması nedeniyle optimal alt yapı özelliğine sahiptir. Bellman-Ford ve Floyd-Warshall algoritmaları, bu problemi çözmek için DP uygulamasının klasik örnekleridir<sup>[\[5\]](https://systems-analysis.info/int/Dinamik_Programlama#cite_note-mit-amp-5)</sup>.
- **Sırt çantası problemi**: Sınırlı kapasiteli bir sırt çantasını farklı değer ve ağırlıktaki nesnelerle optimal biçimde doldurma problemi. DP, nesneleri sırayla ele alarak ve her adımda kalan kapasitenin tüm olası değerleri için maksimum değeri hesaplayarak bu problemi çözmeye olanak tanır.
- **Kaynak dağıtımı problemi**: Toplam etkiyi en üst düzeye çıkarmak amacıyla sınırlı bir kaynağın (örneğin yatırımların) birden fazla proje arasında dağıtılması.

## Kısıtlamalar

Yöntemin başlıca kısıtlaması, **boyutsallık laneti** (İng. *curse of dimensionality*) — Bellman tarafından, sistemi tanımlayan değişken sayısı arttıkça durum sayısının ve dolayısıyla hesaplama karmaşıklığının üstel büyümesini ifade etmek için ortaya atılan bir terimdir<sup>[\[6\]](https://systems-analysis.info/int/Dinamik_Programlama#cite_note-ru-wiki-curse-6)[\[7\]](https://systems-analysis.info/int/Dinamik_Programlama#cite_note-utexas-ormm-7)</sup>. Bu durum, kesin DP'nin çok büyük boyutlu problemlere pratik uygulamasını kısıtlamaktadır.

## İlgili Kavramlar

- Yöneylem araştırması
- Optimal kontrol teorisi
- Markov karar süreci (stokastik genelleme)
- Hamilton — Jacobi — Bellman denklemi (sürekli zaman için analog)

## Notlar

<sup>[\[1\]](https://systems-analysis.info/int/Dinamik_Programlama#cite_note-bigenc-dp-1)</sup> <sup>[\[2\]](https://systems-analysis.info/int/Dinamik_Programlama#cite_note-ru-wiki-dp-2)</sup> <sup>[\[3\]](https://systems-analysis.info/int/Dinamik_Programlama#cite_note-rechetnikov-dp-3)</sup> <sup>[\[4\]](https://systems-analysis.info/int/Dinamik_Programlama#cite_note-en-wiki-dp-4)</sup> <sup>[\[5\]](https://systems-analysis.info/int/Dinamik_Programlama#cite_note-mit-amp-5)</sup> <sup>[\[6\]](https://systems-analysis.info/int/Dinamik_Programlama#cite_note-ru-wiki-curse-6)</sup> <sup>[\[7\]](https://systems-analysis.info/int/Dinamik_Programlama#cite_note-utexas-ormm-7)</sup> \</references\>

1.  <span id="cite_note-bigenc-dp-1">↑ <sup>[1.0](https://systems-analysis.info/int/Dinamik_Programlama#cite_ref-bigenc-dp_1-0)</sup> <sup>[1.1](https://systems-analysis.info/int/Dinamik_Programlama#cite_ref-bigenc-dp_1-1)</sup> <sup>[1.2](https://systems-analysis.info/int/Dinamik_Programlama#cite_ref-bigenc-dp_1-2)</sup> "Динамическое программирование". *Большая российская энциклопедия*. <a href="https://bigenc.ru/c/dinamicheskoe-programmirovanie-00423a" class="external autonumber" rel="nofollow">[1]</a></span>
2.  <span id="cite_note-ru-wiki-dp-2">↑ <sup>[2.0](https://systems-analysis.info/int/Dinamik_Programlama#cite_ref-ru-wiki-dp_2-0)</sup> <sup>[2.1](https://systems-analysis.info/int/Dinamik_Programlama#cite_ref-ru-wiki-dp_2-1)</sup> "Динамическое программирование". *Википедия*. <a href="https://ru.wikipedia.org/wiki/Динамическое_программирование" class="external autonumber" rel="nofollow">[2]</a></span>
3.  <span id="cite_note-rechetnikov-dp-3">↑ <sup>[3.0](https://systems-analysis.info/int/Dinamik_Programlama#cite_ref-rechetnikov-dp_3-0)</sup> <sup>[3.1](https://systems-analysis.info/int/Dinamik_Programlama#cite_ref-rechetnikov-dp_3-1)</sup> <sup>[3.2](https://systems-analysis.info/int/Dinamik_Programlama#cite_ref-rechetnikov-dp_3-2)</sup> Решетников А. Н., Коченков А. В., Пиров Д. М., Рябоконь Д. А. (2011). *Динамическое программирование. Примеры применения*. Учебное пособие, ННГУ им. Лобачевского (ВМиК). <a href="https://itslearningakarmazyan.files.wordpress.com/2015/09/dynamic-programming.pdf" class="external autonumber" rel="nofollow">[3]</a></span>
4.  <span id="cite_note-en-wiki-dp-4">↑ <sup>[4.0](https://systems-analysis.info/int/Dinamik_Programlama#cite_ref-en-wiki-dp_4-0)</sup> <sup>[4.1](https://systems-analysis.info/int/Dinamik_Programlama#cite_ref-en-wiki-dp_4-1)</sup> "Dynamic programming". *Wikipedia*. <a href="https://en.wikipedia.org/wiki/Dynamic_programming" class="external autonumber" rel="nofollow">[4]</a></span>
5.  <span id="cite_note-mit-amp-5">↑ <sup>[5.0](https://systems-analysis.info/int/Dinamik_Programlama#cite_ref-mit-amp_5-0)</sup> <sup>[5.1](https://systems-analysis.info/int/Dinamik_Programlama#cite_ref-mit-amp_5-1)</sup> Bradley S. P., Hax A. C., Magnanti T. L. (1977). *Applied Mathematical Programming*. Addison-Wesley. <a href="http://web.mit.edu/15.053/www/AMP-Chapter-11.pdf" class="external autonumber" rel="nofollow">[5]</a></span>
6.  <span id="cite_note-ru-wiki-curse-6">↑ <sup>[6.0](https://systems-analysis.info/int/Dinamik_Programlama#cite_ref-ru-wiki-curse_6-0)</sup> <sup>[6.1](https://systems-analysis.info/int/Dinamik_Programlama#cite_ref-ru-wiki-curse_6-1)</sup> "Проклятие размерности". *Википедия*. <a href="https://ru.wikipedia.org/wiki/Проклятие_размерности" class="external autonumber" rel="nofollow">[6]</a></span>
7.  <span id="cite_note-utexas-ormm-7">↑ <sup>[7.0](https://systems-analysis.info/int/Dinamik_Programlama#cite_ref-utexas-ormm_7-0)</sup> <sup>[7.1](https://systems-analysis.info/int/Dinamik_Programlama#cite_ref-utexas-ormm_7-1)</sup> Jensen P. A. (2004). *Dynamic Programming – Models*. Operations Research Models and Methods, Univ. of Texas. <a href="https://utw11041.utweb.utexas.edu/ORMM/models/unit/dynamic/index.html" class="external autonumber" rel="nofollow">[7]</a></span>
