---
title: "Dinamikus programozás"
source: "https://systems-analysis.info/int/Dinamikus_programoz%C3%A1s"
wiki: "systems-analysis.info/int"
article: "Dinamikus_programozás"
language: "hu"
categories:
  - "Category:Hungarian"
  - "Category:Operations research"
revision_id: 1691
wiki_created_at: 2026-09-06T22:52:32Z
wiki_modified_at: 2026-09-06T22:52:32Z
downloaded_at: 2026-09-07T22:47:16Z
---

# Dinamikus programozás

**Dinamikus programozás** (**DP**; ang. *dynamic programming, DP*) — összetett optimalizálási feladatok megoldásának módszere, amely az eredeti feladat egyszerűbb részfeladatok sorozatára való bontásán alapul<sup>[\[1\]](https://systems-analysis.info/int/Dinamikus_programoz%C3%A1s#cite_note-bigenc-dp-1)[\[2\]](https://systems-analysis.info/int/Dinamikus_programoz%C3%A1s#cite_note-ru-wiki-dp-2)</sup>. A módszer többlépéses döntéshozatali folyamatokra alkalmazható, ahol a teljes feladat optimális megoldása a részfeladatok optimális megoldásaiból építhető fel.

A fogalmat Richard Bellman amerikai matematikus vezette be az 1950-es években<sup>[\[3\]](https://systems-analysis.info/int/Dinamikus_programoz%C3%A1s#cite_note-rechetnikov-dp-3)</sup>. Ebben az összefüggésben a „programozás" szó „tervezés" vagy „optimális cselekvési terv összeállítása" értelemben szerepel, nem pedig számítógépes kód írását jelenti<sup>[\[4\]](https://systems-analysis.info/int/Dinamikus_programoz%C3%A1s#cite_note-en-wiki-dp-4)</sup>.

## Kulcstulajdonságok és tételek

A dinamikus programozás alkalmazhatóságát egy feladatra két alapvető tulajdonság megléte határozza meg.

### Bellman optimalitási elve

A módszer központi fogalma a **Bellman-féle optimalitási elv** (ang. *Bellman's principle of optimality*). Ez kimondja: bármilyen legyen is a kezdeti állapot és a kezdeti döntés, a további döntéseknek optimális stratégiát kell alkotniuk az első döntés eredményeként kapott állapotra nézve<sup>[\[3\]](https://systems-analysis.info/int/Dinamikus_programoz%C3%A1s#cite_note-rechetnikov-dp-3)</sup>.

Más szóval, az optimális trajektória bármely része önmagában is optimális. Ez a tulajdonság lehetővé teszi, hogy az általános feladatot egyszerűbb részfeladatok sorozatára bontsuk, és azokat rekurzívan oldjuk meg.

### Átfedő részfeladatok

Egy feladatnak **átfedő részfeladatok** (ang. *overlapping subproblems*) tulajdonsága van, ha rekurzív megoldása során ugyanazok a részfeladatok többször is előfordulnak. A DP lehetővé teszi az ismételt számítások elkerülését azáltal, hogy elmenti a már megoldott részfeladatok eredményeit (ezt a technikát memoizációnak vagy táblázatosításnak nevezik), ami jelentősen növeli a hatékonyságot a naiv rekurzív felsoroláshoz képest.

## Bellman-egyenlet

Az optimalitási elvből következik a módszer alapvető rekurrens összefüggése — a **Bellman-egyenlet**<sup>[\[1\]](https://systems-analysis.info/int/Dinamikus_programoz%C3%A1s#cite_note-bigenc-dp-1)</sup>. Ez összekapcsolja az aktuális állapot „értékét" (optimális nyereségét vagy költségét) a következő állapotok értékeivel. Additív célfüggvényű determinisztikus többlépéses folyamat esetén általános alakja:

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

ahol:

- $k$ — a lépés sorszáma ($m$-tól 1-ig);
- $x$ — a rendszer állapota a $k - 1$. lépésben;
- $y$ — a $k$. lépésben hozott irányított döntés;
- $\varphi_{k}(x,y)$ — a k-adik lépésen elért nyereség (vagy költség);
- $f_{k}(x,y)$ — a rendszer új állapotát meghatározó függvény;
- $V_{k}(s)$ — a célfüggvény optimális értéke a $k$. lépéstől $s$ állapotban induló részfeladatra.

Az egyenletet sorban, általában „a végéről" oldják meg, az utolsó lépéstől visszafelé haladva az első felé.

## Alkalmazási példák

- **Legrövidebb út keresése gráfban**: Ez a feladat rendelkezik az optimális részstruktúra tulajdonságával, mivel a legrövidebb út bármely szakasza maga is legrövidebb. A Bellman–Ford- és a Floyd–Warshall-algoritmus klasszikus példája a DP alkalmazásának e feladat megoldásában<sup>[\[5\]](https://systems-analysis.info/int/Dinamikus_programoz%C3%A1s#cite_note-mit-amp-5)</sup>.
- **Hátizsák-feladat**: A feladat egy korlátozott kapacitású hátizsák optimális feltöltéséről szól, különböző értékű és súlyú tárgyakkal. A DP lehetővé teszi e feladat megoldását úgy, hogy a tárgyakat sorban veszi figyelembe, és minden lépésben kiszámítja a maximális értéket a maradék kapacitás összes lehetséges értékére.
- **Erőforrás-elosztási feladat**: Korlátozott erőforrás (pl. befektetések) elosztása több projekt között az összesített hatás maximalizálása céljából.

## Korlátok

A módszer fő korlátja a **dimenzionalitás átka** (ang. *curse of dimensionality*) — Bellman által bevezetett fogalom, amely az állapotok számának, és következésképpen a számítási bonyolultságnak exponenciális növekedését jelöli a rendszer állapotát leíró változók számának növekedésével<sup>[\[6\]](https://systems-analysis.info/int/Dinamikus_programoz%C3%A1s#cite_note-ru-wiki-curse-6)[\[7\]](https://systems-analysis.info/int/Dinamikus_programoz%C3%A1s#cite_note-utexas-ormm-7)</sup>. Ez korlátozza a pontos DP gyakorlati alkalmazhatóságát nagyon nagy méretű feladatokra.

## Kapcsolódó fogalmak

- Operációkutatás
- Optimális irányítás elmélete
- Markov-döntési folyamat (sztochasztikus általánosítás)
- Hamilton–Jacobi–Bellman-egyenlet (folytonos idejű analóg)

## Megjegyzések

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

1.  <span id="cite_note-bigenc-dp-1">↑ <sup>[1.0](https://systems-analysis.info/int/Dinamikus_programoz%C3%A1s#cite_ref-bigenc-dp_1-0)</sup> <sup>[1.1](https://systems-analysis.info/int/Dinamikus_programoz%C3%A1s#cite_ref-bigenc-dp_1-1)</sup> <sup>[1.2](https://systems-analysis.info/int/Dinamikus_programoz%C3%A1s#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/Dinamikus_programoz%C3%A1s#cite_ref-ru-wiki-dp_2-0)</sup> <sup>[2.1](https://systems-analysis.info/int/Dinamikus_programoz%C3%A1s#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/Dinamikus_programoz%C3%A1s#cite_ref-rechetnikov-dp_3-0)</sup> <sup>[3.1](https://systems-analysis.info/int/Dinamikus_programoz%C3%A1s#cite_ref-rechetnikov-dp_3-1)</sup> <sup>[3.2](https://systems-analysis.info/int/Dinamikus_programoz%C3%A1s#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/Dinamikus_programoz%C3%A1s#cite_ref-en-wiki-dp_4-0)</sup> <sup>[4.1](https://systems-analysis.info/int/Dinamikus_programoz%C3%A1s#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/Dinamikus_programoz%C3%A1s#cite_ref-mit-amp_5-0)</sup> <sup>[5.1](https://systems-analysis.info/int/Dinamikus_programoz%C3%A1s#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/Dinamikus_programoz%C3%A1s#cite_ref-ru-wiki-curse_6-0)</sup> <sup>[6.1](https://systems-analysis.info/int/Dinamikus_programoz%C3%A1s#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/Dinamikus_programoz%C3%A1s#cite_ref-utexas-ormm_7-0)</sup> <sup>[7.1](https://systems-analysis.info/int/Dinamikus_programoz%C3%A1s#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>
