Найти Π² Π”Π·Π΅Π½Π΅

🧠 ДинамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅: ΠΏΠΎΡ‡Π΅ΠΌΡƒ здСсь Π½Π΅Ρ‚ программирования?

1950‑С: ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ на доскС, а по‑сосСдству соврСмСнный программист ΠΎΠ·Π°Π΄Π°Ρ‡Π΅Π½Π½ΠΎ глядит Π½Π°Β ΠΊΠΎΠ΄ β€” Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½Π°ΠΌΡ‘ΠΊ, Ρ‡Ρ‚ΠΎ Β«dynamic programmingΒ» Ρ€ΠΎΠ΄ΠΎΠΌ ΠΈΠ· ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ, Π°Β Π½Π΅ ΠΈΠ· программирования.
1950‑С: ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ на доскС, а по‑сосСдству соврСмСнный программист ΠΎΠ·Π°Π΄Π°Ρ‡Π΅Π½Π½ΠΎ глядит Π½Π°Β ΠΊΠΎΠ΄ β€” Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½Π°ΠΌΡ‘ΠΊ, Ρ‡Ρ‚ΠΎ Β«dynamic programmingΒ» Ρ€ΠΎΠ΄ΠΎΠΌ ΠΈΠ· ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ, Π°Β Π½Π΅ ΠΈΠ· программирования.

Когда программисты Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠΌ «динамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅Β», ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Ρ‡ΡƒΠ²ΡΡ‚Π²ΡƒΡŽΡ‚ сСбя растСрянно: слово «динамичСскоС» Π·Π²ΡƒΡ‡ΠΈΡ‚ Π·Π°Π³Π°Π΄ΠΎΡ‡Π½ΠΎ, Π° Β«ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅Β» Π²Ρ€ΠΎΠ΄Π΅ Π±Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° написаниС ΠΊΠΎΠ΄Π°. Но истина Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ этот Ρ‚Π΅Ρ€ΠΌΠΈΠ½ вовсС Π½Π΅ связан с ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. Π•Π³ΠΎ ΠΊΠΎΡ€Π½ΠΈ уходят Π³Π»ΡƒΠ±ΠΆΠ΅, Π² ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ планирования ΠΈ управлСния ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ.

🎯 Π§Ρ‚ΠΎ ΠΆΠ΅ Ρ‚Π°ΠΊΠΎΠ΅ Β«ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅Β» Π² этом контСкстС?

Π’ английском языкС слово programming Π΄ΠΎΠ»Π³ΠΎΠ΅ врСмя ΠΎΠ·Π½Π°Ρ‡Π°Π»ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ созданиС ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Π½ΠΎ ΠΈ составлСниС Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ»Π°Π½ΠΎΠ² ΠΈ расписаний. НапримСр, Ρ‚Π΅Π»Π΅Π²ΠΈΠ·ΠΈΠΎΠ½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ β€” это созданиС расписания ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡. Π’ 1950-Ρ… Π³ΠΎΠ΄Π°Ρ… ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Ρ‹ использовали слово programming Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ Β«ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… этапов», Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΡΡ‚Π²Π΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ здания. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ смысл слова здСсь β€” ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ шагов ΠΈ этапов.

πŸ”¨ ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· ΠΆΠΈΠ·Π½ΠΈ: ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ здания

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ строитС офисноС Π·Π΄Π°Π½ΠΈΠ΅. Π’Π°Ρˆ Β«ΠΏΠ»Π°Π½Β» (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°) Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

  • 🌳 ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΠΈ
  • πŸ•³οΈ Π’Ρ‹Π΅ΠΌΠΊΠ° Π³Ρ€ΡƒΠ½Ρ‚Π°
  • 🧱 Π—Π°Π»ΠΈΠ²ΠΊΠ° Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°
  • πŸ—οΈ Π‘Ρ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ каркаса
  • 🏒 НаруТная ΠΎΡ‚Π΄Π΅Π»ΠΊΠ°
  • 🏠 ΠšΡ€ΠΎΠ²Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹
  • πŸšͺ ВнутрСнняя ΠΎΡ‚Π΄Π΅Π»ΠΊΠ°
  • πŸ’‘ Π­Π»Π΅ΠΊΡ‚Ρ€ΠΈΠΊΠ° ΠΈ сантСхника
  • πŸ›‹οΈ МСбСль ΠΈ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅
  • βœ… Π˜Ρ‚ΠΎΠ³ΠΎΠ²Π°Ρ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ этап зависит ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ…. Π’Ρ‹ Π½Π΅ Π½Π°Ρ‡Π½Ρ‘Ρ‚Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΡ€Ρ‹ΡˆΡƒ, ΠΏΠΎΠΊΠ° Π½Π΅ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ стСны, ΠΈ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ элСктричСство, ΠΏΠΎΠΊΠ° Π½Π΅ построСн каркас.

πŸ“š Как это связано с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠΎΠΉ?

ДинамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ ΠΏΠΎ Ρ‚Π°ΠΊΠΎΠΌΡƒ ΠΆΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ. Рассмотрим классичСский ΠΏΡ€ΠΈΠΌΠ΅Ρ€: вычислСниС чисСл Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ 10-Π΅ число, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Ρ€Π°Π½Π΅Π΅ Π·Π½Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅:

  • fib(2)
  • fib(3)
  • fib(4)
  • fib(5)
  • fib(6)
  • fib(7)
  • fib(8)
  • fib(9)
  • fib(10)

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ шаг зависит ΠΎΡ‚ выполнСния ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… шагов. И, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π²Ρ‹ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ вычислСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ числа нСсколько Ρ€Π°Π·, Ссли ΠΎΠ½ΠΎ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ посчитано. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ здСсь Π²Π°ΠΆΠ½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (Β«ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅Β») шагов β€” Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ этап рассчитывался Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·.

🧩 Π”Π²Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΊ «динамичСскому ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽΒ»

ДинамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ двумя способами:

  • πŸ”» Π‘Π²Π΅Ρ€Ρ…Ρƒ Π²Π½ΠΈΠ· (top-down): начиная с Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎΠ±Ρ‰Π΅ΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ, постСпСнно Ρ€Π°Π·Π±ΠΈΠ²Π°Ρ‚ΡŒ Π΅Ρ‘ Π½Π° ΠΌΠ΅Π»ΠΊΠΈΠ΅ ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡ΠΈ (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ‡Π΅Ρ€Π΅Π· Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ с ΠΌΠ΅ΠΌΠΎΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ).
  • πŸ”Ί Π‘Π½ΠΈΠ·Ρƒ Π²Π²Π΅Ρ€Ρ… (bottom-up): Ρ€Π΅ΡˆΠΈΡ‚ΡŒ сначала самыС малСнькиС ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ постСпСнно ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ ΠΈΡ… Π² Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎΠ±Ρ‰Π΅ΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ.

Оба ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ ΠΈ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ динамичСского программирования.

πŸ“– Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Π°Ρ история происхоТдСния

Π’Π΅Ρ€ΠΌΠΈΠ½ Dynamic Programming ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π» ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊ Π ΠΈΡ‡Π°Ρ€Π΄ Π‘Π΅Π»Π»ΠΌΠ°Π½ Π² 1950-Ρ… Π³ΠΎΠ΄Π°Ρ…. Он Ρ€Π°Π±ΠΎΡ‚Π°Π» Π² ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ†ΠΈΠΈ RAND, которая сотрудничала с ΠœΠΈΠ½ΠΈΡΡ‚Π΅Ρ€ΡΡ‚Π²ΠΎΠΌ ΠΎΠ±ΠΎΡ€ΠΎΠ½Ρ‹ БША. Π£ Ρ‚ΠΎΠ³Π΄Π°ΡˆΠ½Π΅Π³ΠΎ министра ΠΎΠ±ΠΎΡ€ΠΎΠ½Ρ‹ Π±Ρ‹Π»Π° патологичСская Π½Π΅ΠΏΡ€ΠΈΡΠ·Π½ΡŒ ΠΊ словам Π²Ρ€ΠΎΠ΄Π΅ Β«ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ°Β» ΠΈ «исслСдования». Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с финансированиСм, Π‘Π΅Π»Π»ΠΌΠ°Π½Ρƒ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ Π½Π΅ΠΉΡ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅, ΠΈ ΠΎΠ½ Π²Ρ‹Π±Ρ€Π°Π» слова Β«dynamicΒ» (динамичСский) ΠΈ Β«programmingΒ» (ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π²ΡƒΡ‡Π°Π»ΠΈ солидно ΠΈ бСзопасно для Ρ‡ΠΈΠ½ΠΎΠ²Π½ΠΈΠΊΠΎΠ².

πŸ€” Π›ΠΈΡ‡Π½ΠΎΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅: ΠΏΠΎΡ‡Π΅ΠΌΡƒ стоит ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ смысл Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°?

На ΠΌΠΎΠΉ взгляд, ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ истории ΠΈ происхоТдСния Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ Π΅Π³ΠΎ восприятиС ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ясно ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΡΡƒΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. МногиС студСнты Ρ‚Π΅Ρ€ΡΡŽΡ‚ΡΡ, ΠΏΡ‹Ρ‚Π°ΡΡΡŒ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Β«Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎΠ³ΠΎΒ» Π² этом ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. А истина оказываСтся Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΡ€ΠΎΡ‰Π΅: это ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ эффСктивно Β«Ρ€Π°ΡΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΒ» Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ, избСгая ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Ρ… вычислСний.

ИмСнно поэтому динамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚Π°ΠΊ эффСктивно Π² Π·Π°Π΄Π°Ρ‡Π°Ρ… ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, Π³Π΄Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ β€” Π½Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ лишнюю Ρ€Π°Π±ΠΎΡ‚Ρƒ. Зная ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ происхоТдСния Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°, Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ интСрСснСС Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π² Π΅Π³ΠΎ дСталях.

πŸ”— Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ новости: Vidar’s Blog β€” β€œDynamic Programming” is not referring to β€œcomputer programming”