Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

ДинамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

Π’ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ Π΅ΡΡ‚ΡŒ нСсколько способов описания ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°. Π–Π°Π΄Π½Ρ‹ΠΉ, Π½Π°ΠΈΠ²Π½Ρ‹ΠΉ, раздСляй ΠΈ властвуй β€” всё это способы Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ². Один ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… способов называСтся динамичСским ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ (DP). Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π΅Π³ΠΎ характСристики ΠΈ Π΄Π²Π° основных ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ DP.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅?

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡ динамичСского программирования Π±Ρ‹Π»Π° создана, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² Π³Ρ€ΡƒΠ±ΠΎΠΉ силой ΠΈΠ»ΠΈ «раздСляй ΠΈ властвуй».

Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρƒ нас Π΅ΡΡ‚ΡŒ Ρ€ΡŽΠΊΠ·Π°ΠΊ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ΅ количСство ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ². Какая комбинация ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ² даст Π½Π°ΠΌ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Ρ†Π΅Π½Π½ΠΎΡΡ‚ΡŒ? Или ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ Ρ€ΡŽΠΊΠ·Π°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΉ Π³Ρ€ΡƒΠ·ΠΎΠΏΠΎΠ΄ΡŠΡ‘ΠΌΠ½ΠΎΡΡ‚ΠΈ. Какая комбинация ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ² с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ вСсом даст Π½Π°ΠΌ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Ρ†Π΅Π½Π½ΠΎΡΡ‚ΡŒ?

НаивныС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

НаивноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ β€” это ΠΏΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π² Π³ΠΎΠ»ΠΎΠ²Ρƒ программисту. Он ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ самым эффСктивным ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ прСимущСства Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, это простоС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ. Как Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉ программист, Π² Π²Π°ΡˆΠΈΡ… интСрСсах сначала ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ Π½Π°ΠΈΠ²Π½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, Π° ΠΏΠΎΡ‚ΠΎΠΌ провСсти Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ для ΠΈΡ… ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ.

НисходящиС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

Π­Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ способ использования динамичСского программирования Π² вашСм Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ. НисходящСС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π²ΠΎΠ·ΡŒΠΌΡ‘Ρ‚ Π½Π°ΠΈΠ²Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π΅ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ, Π° Π·Π°Ρ‚Π΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΌΠ΅ΠΌΠΎΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, для Π΅Π³ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠœΠ΅ΠΌΠΎΠΈΠ·Π°Ρ†ΠΈΡ дСйствуСт ΠΊΠ°ΠΊ своСго Ρ€ΠΎΠ΄Π° кСш для хранСния Π½Π°ΡˆΠΈΡ… ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ продвиТСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π» быстрСС. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это происходит Π² Ρ„ΠΎΡ€ΠΌΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ словаря.

РСшСния снизу-Π²Π²Π΅Ρ€Ρ…

Π”Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ динамичСского программирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ·Π±Π΅Π³Π°Π΅Ρ‚ рСкурсии ΠΈ табулирования с самого Π½Π°Ρ‡Π°Π»Π°, называСтся восходящим Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ. Π­Ρ‚ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ способ, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ использования большого ΠΎΠ±ΡŠΡ‘ΠΌΠ° памяти ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ случайноС ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка.

Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ β€” это ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ чисСл, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… прСдставляСт собой сумму Π΄Π²ΡƒΡ… ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… чисСл, начиная с 0 ΠΈ 1:

Fn = 0, 1, 1, 2, 3, 5, 8, 13, 21…и Ρ‚.Π΄.
0 + 1 = 1
1 + 1 = 2
1 + 2 = 3
2 + 3 = 5
3 + 5 = 8
5 + 8 = 13
8 + 13 = 21
13 + 21 = 34…и Ρ‚.Π΄.

Подсказка

По Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ числу n Π½Π°ΠΉΠ΄ΠΈΡ‚Π΅ n- Π΅ число Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ.

РСшСниС 1. Наивно

НаивноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ β€” это Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ программист ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ, Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ взглянув Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π½Π°ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΠ»ΠΎΡ…ΠΎ. НаивноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ»ΠΈ эффСктивноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. НаивноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ β€” это Ρ…ΠΎΡ€ΠΎΡˆΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ ΠΏΡƒΡ‚ΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½Π°ΠΈΠ²Π½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ для Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ выглядит Ρ‚Π°ΠΊ:

const fibNaive = (num) => <
if(num <
if(num Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅: Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ IDE ΠΈ какая Π»ΡƒΡ‡ΡˆΠ΅

Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ здСсь ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅. Π Π°Π·Π½ΠΈΡ†Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ с памятки ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΅ΡΡ‚ΡŒ наши ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π° числа Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ. Π­Ρ‚ΠΎ вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ просто Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ΅ число. ΠœΡ‹ присваиваСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π°ΡˆΠ΅ΠΌΡƒ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ использовали ΠΏΡ€ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π΅ Π½Π°ΠΈΠ²Π½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

Π’ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ if ΠΌΡ‹ провСряСм, сущСствуСт Π»ΠΈ ΠΊΠ»ΡŽΡ‡ Π² memo β€” Ссли Π½Π΅Ρ‚, ΠΌΡ‹ добавляСм Π΅Π³ΠΎ. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² Π½Π°ΠΈΠ²Π½ΠΎΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ.

Π’ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ счётС, Ρƒ этого Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π΅ΡΡ‚ΡŒ Π΄Π²Π° отличия. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ memo ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠΆΠ΅ выяснили. И Π²ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ условиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ провСряСт, сущСствуСт Π»ΠΈ эта ΠΏΠ°Ρ€Π° ΠΊΠ»ΡŽΡ‡: Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² memo ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅. Если Π½Π΅Ρ‚, Ρ‚ΠΎ добавляСт.

Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ измСняСт Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ с O (2 n) Π½Π° O (n).

РСшСниС 3. ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ динамичСскому ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ β„– 2 β€” снизу-Π²Π²Π΅Ρ€Ρ… с табуляциСй

Π­Ρ‚Π° вСрсия Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ продвиТСния. ΠœΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° JavaScript (ΠΈΠ»ΠΈ здСсь Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌ массив), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ наши значСния. ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ эти значСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ довСсти Π΄ΠΎ нашСго числа nth.

for(let i = 3; i <
//find all the substrings.
substrs = [];
maxString = «»;
otherString = «»;
if(str1.length > str2.length) <
maxString = str1;
otherString = str2;
> else <
maxString = str2;
otherString = str1;
>

for(let i = 0; i < // O(m)
if(new RegExp(string).test(otherString)) <
if(maxLength <

let i = str1.length;
let j = str2.length;
//if the strings don’t exist, return 0
if(i === 0 || j === 0) <
return count;
>

if(str1[i β€” 1] === str2[j β€” 1]) < // if the chars are the same, up the count and shorten string by 1
count = topDown(str1.slice(0, i β€” 1), str2.slice(0, j β€” 1), count + 1);
>
count = Math.max(count, //max between count and the other function
Math.max( // max between looking at shortening one word vs shortening the other word.
topDown(str1.slice(0, i), str2.slice(0, j β€” 1), 0),
topDown(str1.slice(0, i β€” 1), str2.slice(0, j), 0)));

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ для этого Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ составляСт O (n + m), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡ‡Π΅ΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… строк.

РСшСниС 3. ВосходящСС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ с табуляциСй

Π’Ρ€Π΅Ρ‚ΡŒΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ использованиС восходящСго ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°. Π’ этом ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив / ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ, которая Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°Π±ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ подстроки. ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, это ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡƒΡΡ‚ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄Π»ΠΈΠ½Ρ‹ строк.

for (let i = 0; i <
let table = create2DArray(A, B); // create the table
let max = 0; // initialize and declare max substring length to be 0
//start i and j at 1 so we can compare characters to previous row and column
for (let i = 1; i

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ β€” ΠΎΠ±ΡŠΡΡΠ½ΡΡŽΡ‚ экспСрты

ΠΠ²Ρ‚ΠΎΡ€ΠΈΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ β€” ΠΎΠ±ΡŠΡΡΠ½ΡΡŽΡ‚ экспСрты

ВрСмя ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² Ρ€Π°Π·Π½Ρ‹Ρ… ΡΡ‚Π°Ρ‚ΡŒΡΡ… упоминаСтся динамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉ программист ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΏΡƒΡ‚Π°Ρ‚ΡŒ с Ρ‡Π΅ΠΌ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π²Ρ€ΠΎΠ΄Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования. ΠœΡ‹ попросили экспСртов простым языком ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

тСхничСский Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ iD EAST

ДинамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ β€” достаточно ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ Π·Π°Π΄Π°Ρ‡, основанный Π½Π° ΠΈΠ΄Π΅Π΅ «раздСляй ΠΈ властвуй». Достаточно часто Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ»ΠΈ ΠΊΡ€Π°ΠΉΠ½Π΅ Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΈΠΉ ΠΎΠ±Ρ‰ΠΈΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹ Π±Ρ€Π°Π» Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ с Π½ΠΈΠΌΠΈ Π΄Π΅Π»Π°Π» ΠΈ сразу Π²Ρ‹Π΄Π°Π²Π°Π» ΠΎΡ‚Π²Π΅Ρ‚.

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

ВаТная ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ Ρ‡Ρ‚ΠΎΠ±Ρ‹ этот процСсс Π½Π΅ зациклился Π½ΡƒΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ этапС Π·Π°Π΄Π°Ρ‡Π° сводилась ΠΊ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΎΠΌΡƒ ΡΠ»ΡƒΡ‡Π°ΡŽ, ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ извСстСн сразу. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ β€” вычислСниС Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° числа. Π’Π°ΠΊΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ простого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° n!=1Β·2Β·3·…·n, Π² этом случаС ΠΌΠΎΠΆΠ½ΠΎ сразу ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 4! = 1Β·2Β·3Β·4 = 24, Π° 5! = 1Β·2Β·3Β·4Β·5 = 120). Но эту ΠΆΠ΅ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΈ рСкурсивно, вСдь 5! = 5Β·4!, Π° 4! = 4Β·3! ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π—Π½Π°Ρ‡ΠΈΡ‚ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ расчСта Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° n!, которая Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΌΠ½ΠΎΠΆΠ°Ρ‚ΡŒ число Π½Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° самой сСбя для Π±ΠΎΠ»Π΅Π΅ простого случая (n-1)!. И Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС 1! функция Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ саму сСбя Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚, Π° сразу Π²Π΅Ρ€Π½Ρ‘Ρ‚ 1, это Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ зацикливания.

Но «раздСляй ΠΈ властвуй» β€” это Π΅Ρ‰Ρ‘ Π½Π΅ совсСм динамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Ρ…ΠΎΡ‚ΡŒ ΠΈ прост, Π½ΠΎ часто ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π»Π°Π²ΠΈΠ½ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎΠΌΡƒ росту Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… вычислСний, Ρ…ΠΎΡ‚ΡŒ сам ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сколь ΡƒΠ³ΠΎΠ΄Π½ΠΎ простым.

Π’Π·ΡΡ‚ΡŒ, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π·Π°Π΄Π°Ρ‡Ρƒ поиска ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠ΅Π³ΠΎ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Π° ΠΏΠΎ Π³ΠΎΡ€ΠΎΠ΄Ρƒ ΠΈΠ· Ρ‚ΠΎΡ‡ΠΊΠΈ А Π² Ρ‚ΠΎΡ‡ΠΊΡƒ Π‘. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Ρ‚Π°ΠΊΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ Ρ€Π΅ΡˆΠ°ΡŽΡ‚ΡΡ с использованиСм Ρ‚Π΅ΠΎΡ€ΠΈΠΈ Π³Ρ€Π°Ρ„ΠΎΠ², ΠΊΠΎΠ³Π΄Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡƒΠ»ΠΈΡ†Π΅ Π² Π³ΠΎΡ€ΠΎΠ΄Π΅ ставится Π² соотвСтствиС Ρ€Π΅Π±Ρ€ΠΎ Π³Ρ€Π°Ρ„Π°, Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅ прСбывания β€” ΡƒΠ·Π΅Π» Π³Ρ€Π°Ρ„Π°. ΠšΠ°ΠΆΠ΄ΠΎΠΌΡƒ Ρ€Π΅Π±Ρ€Ρƒ приписываСтся нСкоторая условная Β«ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΒ», ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ прохоТдСния ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ нСпосрСдствСнно дСнСТная стоимости ΠΏΡ€ΠΎΠ΅Π·Π΄Π° ΠΏΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Β«ΡƒΠ»ΠΈΡ†Π΅Β». Π­Ρ‚Π° ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°ΠΆΠ΅ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ с Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ·-Π·Π° ΠΏΡ€ΠΎΠ±ΠΎΠΊ. Π’ΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° функция, находящая ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠΈΠΉ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ β€” Ρ‚Π°ΠΊΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΡƒΠ·Π»ΠΎΠ², пройдя Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Β«ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΒ» прохоТдСния всСх ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰ΠΈΡ… ΠΈΡ… Ρ€Ρ‘Π±Π΅Ρ€.

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

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

Ρ‚ΠΈΠΌΠ»ΠΈΠ΄ Π² ADCI Solutions

Если Π²ΠΊΡ€Π°Ρ‚Ρ†Π΅, Ρ‚ΠΎ динамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ β€” это способ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ, Ρ€Π°Π·Π±ΠΈΠ² Π΅Ρ‘ Π½Π° ΠΌΠ΅Π»ΠΊΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ скомбинировав ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ динамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ Π² Π·Π°Π΄Π°Ρ‡Π°Ρ…, связанных с ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠΈΠΉ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ для пСрСмСщСния ΠΈΠ· Π³ΠΎΡ€ΠΎΠ΄Π° A Π² Π³ΠΎΡ€ΠΎΠ΄ B. Π›ΠΈΠ±ΠΎ это ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Ρ‡ΠΈ, Π³Π΄Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² ΠΈΠ»ΠΈ располоТСния элСмСнтов. ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ β€” ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ чисСл Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ.

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

Π’ рассмотрСнных Π²Ρ‹ΡˆΠ΅ случаях ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ состояния Π±Ρ‹Π»ΠΎ ΠΎΠ΄Π½ΠΎ число, ΠΎΠ΄Π½Π°ΠΊΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ Π±ΠΎΠ»Π΅Π΅ слоТныС, ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ классы Π·Π°Π΄Π°Ρ‡. Для ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½ΠΎΠΉ Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ состояния ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ:

Поиск ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ состояния Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠΈ, ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² ΠΈ порядка пСрСсчёта (прямой ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ) ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΌΠ΅Ρ‚ΠΎΠ΄ динамичСского программирования.

Π£Π·Π½Π°Ρ‚ΡŒ подробности ΠΎ примСнСниях этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ способах Π΅Π³ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‡Ρ‚ΠΈ Π²ΠΎ всСх Π² ΠΊΠ½ΠΈΠΆΠΊΠ°Ρ… ΠΏΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠ½ΠΈΠ³Π΅ «Алгоритмы. ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ ΠΈ Π°Π½Π°Π»ΠΈΠ·Β».

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΈΠΊ ΠΎΡ‚Π΄Π΅Π»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ ПО Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π˜Π’Πš

Π’ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… систСм ΠΏΠΎΠ΄ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠΌ «динамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅Β» понимаСтся способ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ слоТных Π·Π°Π΄Π°Ρ‡ ΠΏΡƒΡ‚Ρ‘ΠΌ разбиСния ΠΈΡ… Π½Π° Π±ΠΎΠ»Π΅Π΅ простыС ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡ΠΈ. ДинамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ Π½Π΅ ΠΊΠΎ всСм Π·Π°Π΄Π°Ρ‡Π°ΠΌ, Π° лишь ΠΊ Ρ‚Π΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ Β«ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ структурой». ΠžΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Π°Ρ структура ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π±ΠΈΡ‚Π° Π½Π° нСсколько Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ мСньшСго Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, ΠΏΡ€ΠΈ этом для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅Π½ΡŒΡˆΠΈΡ… Π·Π°Π΄Π°Ρ‡. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π·Π°Π΄Π°Ρ‡ с ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ структурой β€” вычислСниС Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° числа, построСниС ряда чисСл Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ, вычислСниС расстояния Π›Π΅Π²Π΅Π½ΡˆΡ‚Π΅ΠΉΠ½Π° (красивоС Π½Π°Π·Π²Π°Π½ΠΈΠ΅, ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ всСм извСстной Π·Π°Π΄Π°Ρ‡ΠΈ diff, Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‰Π΅ΠΉ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя тСкстовыми Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ). ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚, Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΉ с Ρ‚Π΅ΠΎΡ€ΠΈΠ΅ΠΉ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… систСм, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ, здСсь кроСтся какая-Ρ‚ΠΎ слоТная ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ°, Π½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Ρ‘Ρ‚ ΠΎ всСм Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π·Π½Π°ΠΊΠΎΠΌΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ β€” рСкурсии. ВсС Π·Π½Π°ΡŽΡ‚, ΠΊΠ°ΠΊ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» числа: Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ это число Π½Π° Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» числа, мСньшСго Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ: F(n) = n*F(n-1) (для краткости ΠΎΠΏΡƒΡ‰Π΅Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° n >= 1) β€” просто ΠΈ изящно.

Π’Π°ΠΊ Π²ΠΎΡ‚, динамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ β€” это рСкурсия с сохранСниСм Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² вычислСний. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ постоянно Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» Ρ€Π°Π·Π½Ρ‹Ρ… чисСл. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π», Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, числа 5, Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ произвСсти 4 умноТСния β€” 5*4*3*2*1. А Ρ‡Ρ‚ΠΎ, Ссли ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹? Допустим, ΠΌΡ‹ ΠΊΠΎΠ³Π΄Π°-Ρ‚ΠΎ Ρ€Π°Π½ΡŒΡˆΠ΅ вычислили 4! = 24. Π—Π½Π°Ρ‡ΠΈΡ‚, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ β€” 5*24. А Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° нас спросят 5!, ΠΌΡ‹ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ сразу ΠΆΠ΅. ΠŸΠΎΠ½ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ растёт ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ вычислСний, Π½ΠΎ ΠΈ возрастаСт ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти. Π§Ρ‚ΠΎ Π²Π°ΠΆΠ½Π΅Π΅ β€” ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒ β€” Π²Π΅Ρ‡Π½Ρ‹ΠΉ вопрос. ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½ΡƒΠΆΠ½ΠΎ исходя ΠΈΠ· ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… условий.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΠΎΡ‚Π΄Π΅Π»Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΎΠΊ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ «ГЭНДАЛЬЀ»

ДинамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ – это ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт эффСктивно Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго, Π·Π°Π΄Π°Ρ‡ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€Π½ΠΎΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ.

Π‘ΡƒΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ: ΠΈΠΌΠ΅ΡŽΡ‰ΡƒΡŽΡΡ Π·Π°Π΄Π°Ρ‡Ρƒ рСкурсивно Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅ΠΌ Π½Π° Π±ΠΎΠ»Π΅Π΅ малСнькиС ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΈΡ… β€” Π½Π° Π΅Ρ‰Ρ‘ мСньшиС ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Но Ρ€Π΅ΡˆΠ°Π΅ΠΌ Π·Π°Π΄Π°Ρ‡ΠΈ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС: сначала малСнькиС (Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅), ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ Π·Π°Π΄Π°Ρ‡Π°ΠΌ побольшС (строим ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° основС сохранённых Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… Π·Π°Π΄Π°Ρ‡) ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅, ΠΏΠΎΠΊΠ° Π½Π΅ Ρ€Π΅ΡˆΠΈΠΌ ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ.

НСдостаток: ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ трСбуСтся ΠΌΠ½ΠΎΠ³ΠΎ памяти для хранСния ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ².

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

Lead Software Engineer Π² EPAM

Π’Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π·Π°Π΄Π°Ρ‡ Π½Π΅ зависит ΠΎΡ‚ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ элСмСнта ΠΏΠΎ индСксу Π² массивС Π½Π΅ зависит ΠΎΡ‚ Π΄Π»ΠΈΠ½Ρ‹ массива ΠΈ всСгда выполняСтся Π·Π° константноС врСмя. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя Π΅ΡΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡ΠΈ, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… врСмя выполнСния Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ зависит ΠΎΡ‚ значСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ элСмСнта ΠΏΠΎ индСксу Π² связанном спискС ― Ρ‡Π΅ΠΌ большС элСмСнтов, Ρ‚Π΅ΠΌ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ потрСбуСтся Π½Π° поиск Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ элСмСнта. ЕстСствСнно, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… использованиС ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ слишком ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, поиск ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠ΅Π³ΠΎ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Π³ΠΎΡ€ΠΎΠ΄Π°ΠΌΠΈ Π² случаС ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ построСниС n! Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ², Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… n нСэффСктивно.

НСкоторыС ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡƒΡ‚Π΅ΠΌ разбиСния исходной Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡ΠΈ мСньшСго Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈ слоТности, Ρ€Π΅ΡˆΠΈΠ² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈ объСдинив Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ исходной Π·Π°Π΄Π°Ρ‡ΠΈ. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ называСтся динамичСским ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ Π±Ρ‹Π» ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ Π ΠΈΡ‡Π°Ρ€Π΄ΠΎΠΌ Π‘Π΅Π»Π»ΠΌΠ°Π½ΠΎΠΌ Π² 1940-Ρ… Π³ΠΎΠ΄Π°Ρ….

ДинамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ придСрТиваСтся Π΄Π²ΡƒΡ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ Π·Π°Π΄Π°Ρ‡:

Одной ΠΈΠ· самых извСстных Π·Π°Π΄Π°Ρ‡ динамичСского программирования являСтся Π·Π°Π΄Π°Ρ‡Π° вычислСния чисСл Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ, ΠΈ ΠΎΠ½Π° эффСктивно Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ восходящСго динамичСского программирования. ΠŸΡ€ΠΈ использовании этого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° для нахоТдСния N-Π³ΠΎ элСмСнта Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ происходит ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ, Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… элСмСнтов ΠΊΠ°ΠΊ суммы Π΄Π²ΡƒΡ… ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ…. Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ O(N), Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ использованиС классичСского рСкурсивного ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ O(2^N), Ρ‡Ρ‚ΠΎ сущСствСнно большС.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ чисСл Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ явлСния, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° Π±ΠΎΠ»Π΅Π΅ практичСский ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ― Π·Π°Π΄Π°Ρ‡Ρƒ коммивояТСра ΠΈΠ»ΠΈ, Π½Π° соврСмСнный Π»Π°Π΄, ΠΊΡƒΡ€ΡŒΠ΅Ρ€Π° ― ΠΊΡƒΡ€ΡŒΠ΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΡΠ΅Ρ‚ΠΈΡ‚ΡŒ N адрСсов, ΠΏΠΎΠ±Ρ‹Π²Π°Π² Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· адрСсов Ρ€ΠΎΠ²Π½ΠΎ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Ρ€Π°Π·Ρƒ ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ свой ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ Π² исходной Ρ‚ΠΎΡ‡ΠΊΠ΅. Π—Π°Π΄Π°Ρ‡Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Π° минимальной Π΄Π»ΠΈΠ½Π½Ρ‹.

Π”Π°Π½Π½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° ― ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Ρ‹ (всСго ΠΈΡ… N!) для N адрСсов, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ минимальной Π΄Π»ΠΈΠ½Ρ‹. Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° O(N! * N) ΠΈ врСмя вычислСния ΠΎΡ‡Π΅Π½ΡŒ быстро растСт ΠΏΡ€ΠΈ ростС количСства адрСсов ― Ссли для Ρ‚Ρ€Π΅Ρ… адрСсов Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΡˆΠ΅ΡΡ‚ΡŒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ², Ρ‚ΠΎ для 10 ΡƒΠΆΠ΅ ΠΎΠΊΠΎΠ»ΠΎ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ²!

ИспользованиС ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² динамичСского программирования ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π΄Π°Ρ‚ΡŒ Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, Π½ΠΎ, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ достаточно Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ ΠΈ Π·Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎΠ΅ врСмя. Π‘ΡƒΡ‚ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ Π΄Π°Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² поискС блиТайшСго адрСса Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ шагС ― ΠΈΠ· исходной Ρ‚ΠΎΡ‡ΠΊΠΈ, Π·Π°Ρ‚Π΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ блиТайшСго ΠΏΡƒΠ½ΠΊΡ‚Π° назначСния ΠΈΠ· ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ адрСса ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ, Π½ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ мСньшС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ― O(N^2 * 2^N), Ρ‡Ρ‚ΠΎ для Ρ‚Π΅Ρ… ΠΆΠ΅ 10 адрСсов 1124 вычислСний.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ рассмотрСли ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ идСю динамичСского программирования ― Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ слоТной Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Π±ΠΎΠ»Π΅Π΅ простых, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ суммарно ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π·Π° Π³ΠΎΡ€Π°Π·Π΄ΠΎ мСньшСС врСмя.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π£Ρ‡Π΅Π±Π½ΠΈΠΊ ΠΏΠΎ динамичСскому ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ: созданиС эффСктивных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° Python

Если Π²Ρ‹ ΠΈΠ·ΡƒΡ‡Π°Π΅Ρ‚Π΅ Python, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ слоТно ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ этот шаг ΠΎΡ‚ написания ΠΎΠ±Ρ€Π°Π·Ρ†Π° ΠΊΠΎΠ΄Π° Π΄ΠΎ эффСктивного ΠΊΠΎΠ΄Π°. По ΠΌΠ΅Ρ€Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ Π½Π°Π±ΠΈΡ€Π°Π΅Ρ‚Π΅ Π½Π°Π²Ρ‹ΠΊΠΈ, ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ становится всС Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎΠΉ, выступая Π² качСствС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ показатСля успСха ΠΏΡ€ΠΈ собСсСдовании ΠΏΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈ Π² Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΡ….

Один ΠΈΠ· способов ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Π²Π°ΡˆΠΈΡ… рСкурсивных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ β€” Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ динамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΡΠΊΠΎΠ½ΠΎΠΌΡΡ‰ΡƒΡŽ врСмя Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ Π½Π° основС хранСния, вмСсто рСкурсии Π³Ρ€ΡƒΠ±ΠΎΠΉ силы. Π’ динамичСском ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ссли всС шаги процСсса ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹, Ρ‚ΠΎ оптимизируСтся ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π’ нашСм случаС ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ шаг β€” это Ρ‚ΠΎΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ наимСньшСС количСство Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ наимСньшСС количСство Π½ΠΎΠ²Ρ‹Ρ… вычислСний.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π²Π°ΠΌ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ эффСктивному ΠΊΠΎΠ΄Ρƒ Python, Π²ΠΎΡ‚ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ руководство ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ эффСктивно ΠΈ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ распространСнных Π·Π°Π΄Π°Ρ‡ собСсСдования.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅?

ДинамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ β€” это ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ слоТных ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΏΡƒΡ‚Π΅ΠΌ рСкурсивного разбиСния ΠΈΡ… Π½Π° ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡ΠΈ, каТдая ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π°Ρ‚Π΅ΠΌ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½ΠΎ. ДинамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ рСкурсивноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ экономит врСмя Π½Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ вычислСниС Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ·ΠΆΠ΅.

Π­Ρ‚ΠΎ отличаСтся ΠΎΡ‚ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ Β» РаздСляй ΠΈ властвуй» Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡ΠΈ Π² Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΡ… динамичСского программирования ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ, поэтому Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… шагов, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡ΠΈ, Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡.

Π­Ρ‚ΠΎ ΠΏΠΎΠ΄Π²ΠΎΠ΄ΠΈΡ‚ нас ΠΊ Π³Π»Π°Π²Π½ΠΎΠΌΡƒ прСимущСству динамичСского программирования. ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ эти ΠΎΠ±Ρ‰ΠΈΠ΅ шаги, динамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ позволяСт Π½Π°ΠΌ просто ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ шага Π² ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π°Π· ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: динамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ являСтся частным случаСм Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎΠΉ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ рСкурсивного программирования, ΠΎΠ΄Π½Π°ΠΊΠΎ Π½Π΅ Π²ΠΎ всСх рСкурсивных случаях ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ динамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ динамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ эффСктивно? РСкурсия ΠΏΡ€ΠΎΡ‚ΠΈΠ² DP

Если ΠΎΠ½ΠΈ Ρ‚Π°ΠΊ тСсно ΠΏΠ΅Ρ€Π΅ΠΏΠ»Π΅Ρ‚Π΅Π½Ρ‹, ΠΏΠΎΡ‡Π΅ΠΌΡƒ динамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ отдаСтся ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΡŽ, ΠΊΠΎΠ³Π΄Π° это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ? Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ рСкурсивныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π³Ρ€ΡƒΠ±ΠΎΠΉ силы часто ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ, ΠΊΠΎΠ³Π΄Π° ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌΠΈΡΡ шагами, тратя Π½Π΅Π½ΡƒΠΆΠ½ΠΎΠ΅ врСмя ΠΈ рСсурсы Π² процСссС.

ДинамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, гарантируя, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ΠΉ шаг выполняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, ΠΈ сохраняя Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ этого шага Π² сборщикС, Ρ‚Π°ΠΊΠΎΠΌ ΠΊΠ°ΠΊ Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΈΠ»ΠΈ массив, для Π²Ρ‹Π·ΠΎΠ²Π° всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° это понадобится снова. ΠŸΡ€ΠΈ этом динамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ позволяСт ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ выполнСния.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Π’ динамичСском ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ использования пространства сущСствСнно сниТаСтся, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ для хранСния Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ трСбуСтся пространство, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ Π² рСкурсивных Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π³Ρ€ΡƒΠ±ΠΎΠΉ силы.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ динамичСского программирования

ДинамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΌΠΈΡ€Π΅

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ², процСссы, основанныС Π½Π° памяти, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ динамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ понятны людям. Рассмотрим этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ:

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠΉΡ‚ΠΈ Π² Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΌΠ°Π³Π°Π·ΠΈΠ½ Ρ‡Π΅Ρ€Π΅Π· нСсколько ΡƒΠ»ΠΈΡ†, Π½ΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ Ρ‚ΡƒΠ΄Π° Π΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ. Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡Ρƒ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Π° ΠΊ ΠΌΠ°Π³Π°Π·ΠΈΠ½Ρƒ, Π²Ρ‹ просматриваСтС ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Ρ‹ Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅ вашСго смартфона, Π° Π·Π°Ρ‚Π΅ΠΌ Π½Π°ΠΏΡ€Π°Π²Π»ΡΠ΅Ρ‚Π΅ΡΡŒ Ρ‚ΡƒΠ΄Π°.

Если Π±Ρ‹ Π²Ρ‹ Π΄ΡƒΠΌΠ°Π»ΠΈ рСкурсивно, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΠΏΠΎΠΉΡ‚ΠΈ Π² ΠΌΠ°Π³Π°Π·ΠΈΠ½, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ врСмя, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Ρ‰Π΅ Ρ€Π°Π· ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ направлСния.

ВмСсто этого ΠΌΡ‹, СстСствСнно, Π΄ΡƒΠΌΠ°Π΅ΠΌ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ, запоминая направлСния ΠΊ ΠΌΠ°Π³Π°Π·ΠΈΠ½Ρƒ с Ρ‚ΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΈΡ… Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ искали, ΠΈ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя Π½Π° ΠΈΡ… поиск, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΏΠΎΠΉΠ΄Π΅ΠΌ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅.

По сути, это Ρ‚ΠΎ, ΠΊΠ°ΠΊ динамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ….

Ѐакторная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ, насколько динамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΠΎΠ»Π΅Π΅ эффСктивно, Ρ‡Π΅ΠΌ рСкурсия, Π½ΠΎ Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΠΊΠΎΠ΄ΠΎΠΌ Python!

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

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π½Π° Ρ€Π°Π·Π½ΠΈΡ†Ρƒ.

Recursion

Π’Ρ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ подпись Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ; ΠΎΠ΄Π½Π°ΠΊΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с Π΄Ρ€ΡƒΠ³ΠΎΠΉ подписью ΠΈ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π΅Π΅ ΠΈΠ· прСдоставлСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ простоС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ это Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΌΠ΅ΠΌΠΎΠΈΠ·Π°Ρ†ΠΈΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡ‡Π΅ΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ слоТныС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…:

Π’ этой Π·Π°Π΄Π°Ρ‡Π΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ слоТно ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ΡΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π½Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ. Но Ссли Π²Ρ‹ ΠΏΡ€ΠΈΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ΡΡŒ, Π²Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ ΠΈ индСксный ΠΊΠΎΡ€Ρ‚Π΅ΠΆ часто ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‚ΡΡ. На всС эти ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡ΠΈ Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΌΠ΅ΠΌΠΎΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° основС ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° Смкости ΠΈ индСкса. Π­Ρ‚ΠΎ СдинствСнноС Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π² этом ΠΊΠΎΠ΄Π΅ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ с простой рСкурсиСй. ΠŸΠ΅Ρ€Π΅Π΄ рСкурсивным шагом ΠΌΡ‹ провСряСм, доступСн Π»ΠΈ Π½Π°ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΎΠΊ. Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ послС ΠΎΡ†Π΅Π½ΠΊΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΌΡ‹ снова сохраняСм Π΅Π³ΠΎ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΎΠΊ.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с Ρ€Π°Π·ΠΌΠ΅Π½ΠΎΠΌ ΠΌΠΎΠ½Π΅Ρ‚

Π­Ρ‚ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Β«ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Ρ€Π°Π·ΠΌΠ΅Π½Ρ‹ ΠΌΠΎΠ½Π΅Ρ‚Β», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ часто Π·Π°Π΄Π°ΡŽΡ‚ Π½Π° собСсСдованиях ΠΏΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ.

ИмСя список Π΄Π΅Π½Π΅ΠΆΠ½Ρ‹Ρ… ΠΊΡƒΠΏΡŽΡ€, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ количСство способов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ сумму. НапримСр, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π° Π²ΠΈΠ΄Π° счСтов, 10 ΠΈ 20 Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ², ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ 30 Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ², Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π° способа:

ΠŸΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π±ΡƒΠ΄ΡŒΡ‚Π΅ особСнно остороТны, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ. 30 Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ прСдставлСны ΠΊΠ°ΠΊ 20 + 10 Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ 10 + 20 Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ², Π½ΠΎ это ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½Π΅ стоит Ρ€Π°ΡΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ±Π° случая.

ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅ рСкурсивноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚Ρƒ для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…; Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ динамичСского программирования. НачнитС с рСкурсивного Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈ создайтС динамичСскоС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ДинамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…

ΠΠ²Ρ‚ΠΎΡ€ΠΈΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ

ДинамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

ДинамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ β€” Ρ‚Π΅ΠΌΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π² Ρ€ΡƒΠ½Π΅Ρ‚Π΅ посвящСно довольно ΠΌΠ°Π»ΠΎ статСй, поэтому ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Сю Π·Π°Π½ΡΡ‚ΡŒΡΡ. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π½Ρ‹ классичСскиС Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΡƒΡŽ ΠΈ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΡƒΡŽ Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΡƒ, Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π°Π½ΠΎ обоснованиС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΠΌ ΠΈ описаны Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΊ ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π’Π΅ΡΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΉ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΊΠΎΠ΄ написан Π½Π° Java.

О Ρ‡Ρ‘ΠΌ Π²ΠΎΠΎΠ±Ρ‰Π΅ Ρ€Π΅Ρ‡ΡŒ? Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅?

Π₯ΠΎΡ€ΠΎΡˆΠΎ, ΠΊΠ°ΠΊ это ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ?

РСшСниС Π·Π°Π΄Π°Ρ‡ΠΈ динамичСским ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

И Ρ‡Ρ‚ΠΎ, ΠΌΠ½Π΅ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ рСкурсивный ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π°Π΄ΠΎ? Π― ΡΠ»Ρ‹ΡˆΠ°Π», ΠΎΠ½ΠΈ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Π΅.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π΅ Π½Π°Π΄ΠΎ, Π΅ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠΈ. Π Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ ΠΈΡ… Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ:

ИдСя Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

Π—Π΄Π΅ΡΡŒ Π½Π°ΠΌ Π΄Π°Π½Ρ‹ ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ состояния (a0 = a1 = 1), ΠΈ зависимости. ЕдинствСнная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ β€” ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ 2n β€” условиС чётности числа, Π° 2n+1 β€” нСчётности. Π˜Π½Ρ‹ΠΌΠΈ словами, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ, Ρ‡Ρ‘Ρ‚Π½ΠΎ Π»ΠΈ число, ΠΈ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² зависимости ΠΎΡ‚ этого ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°ΠΌ.

РСкурсивноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½Π°Ρ рСализация состоит Π² написании ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

РСкурсивноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ с ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

ИдСя ΠΌΠ΅ΠΌΠΎΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΡ‡Π΅Π½ΡŒ проста β€” Π΅Π΄ΠΈΠ½ΠΎΠΆΠ΄Ρ‹ вычисляя Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΌΡ‹ заносим Π΅Π³ΠΎ Π² ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ структуру Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ вычислСниСм ΠΌΡ‹ провСряСм, Π΅ΡΡ‚ΡŒ Π»ΠΈ вычисляСмоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² этой структурС, ΠΈ Ссли Π΅ΡΡ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΅Π³ΠΎ. Π’ качСствС структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ массив, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΉ Ρ„Π»Π°Π³ΠΎΠ²Ρ‹ΠΌΠΈ значСниями. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта ΠΏΠΎ индСксу N Ρ€Π°Π²Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Ρ„Π»Π°Π³Π°, Π·Π½Π°Ρ‡ΠΈΡ‚, ΠΌΡ‹ Π΅Π³ΠΎ Π΅Ρ‰Ρ‘ Π½Π΅ вычисляли. Π­Ρ‚ΠΎ создаёт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ трудности, Ρ‚.ΠΊ. Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„Π»Π°Π³Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ΡŒ мноТСству Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ всСгда ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ. Π›ΠΈΡ‡Π½ΠΎ я ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ β€” всС дСйствия Π² Π½Π΅ΠΉ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π·Π° O(1), Ρ‡Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ. Однако, ΠΏΡ€ΠΈ большом количСствС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π΄Π²Π° числа ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Ρ…ΡΡˆ, Ρ‡Ρ‚ΠΎ, СстСствСнно, ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, красно-Ρ‡Ρ‘Ρ€Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ.

Для ΡƒΠΆΠ΅ написанной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ f(int) ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

НС слишком слоТно, ΡΠΎΠ³Π»Π°ΡΠΈΡ‚Π΅ΡΡŒ? Π—Π°Ρ‚ΠΎ это избавляСт ΠΎΡ‚ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ³ΠΎ числа ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. ΠŸΠ»Π°Ρ‚ΠΈΡ‚Π΅ Π²Ρ‹ Π·Π° это лишним расходом памяти.

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ вычислСниС

Π’Π΅ΠΏΠ΅Ρ€ΡŒ вСрнёмся ΠΊ Ρ‚ΠΎΠΌΡƒ, с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Π»ΠΈ β€” рСкурсия Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ. НС слишком ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ это приносило Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ нСприятности Π² настоящСй ΠΆΠΈΠ·Π½ΠΈ, Π½ΠΎ Π½Π° сорСвнованиях ΠΏΠΎ спортивному ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ каТдая миллисСкунда Π½Π° счСту.

ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ вычислСния ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли функция ссылаСтся ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π° элСмСнты ΠΏΠ΅Ρ€Π΅Π΄ Π½Π΅ΠΉ β€” это Π΅Π³ΠΎ основной, Π½ΠΎ Π½Π΅ СдинствСнный минус. Наша Π·Π°Π΄Π°Ρ‡Π° этому ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ удовлСтворяСт.

4–5 дСкабря, Онлайн, Π‘Π΅cΠΏΠ»Π°Ρ‚Π½ΠΎ

Π‘ΡƒΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ: ΠΌΡ‹ создаём массив Π½Π° N элСмСнтов ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ заполняСм Π΅Π³ΠΎ значСниями. Π’Ρ‹, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, ΡƒΠΆΠ΅ догадались, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ Π² Ρ‚ΠΎΠΌ числС Ρ‚Π΅ значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ для ΠΎΡ‚Π²Π΅Ρ‚Π° Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹. Π’ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ части Π·Π°Π΄Π°Ρ‡ Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΡƒ этот Ρ„Π°ΠΊΡ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ для ΠΎΡ‚Π²Π΅Ρ‚Π° часто Π±Ρ‹Π²Π°ΡŽΡ‚ Π½ΡƒΠΆΠ½Ρ‹ ΠΊΠ°ΠΊ Ρ€Π°Π· всС значСния. НапримСр, ΠΏΡ€ΠΈ поискС наимСньшСго ΠΏΡƒΡ‚ΠΈ ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π΅ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ ΠΏΡƒΡ‚ΡŒ Π΄ΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Ρ‚ΠΎΡ‡ΠΊΠΈ, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ всС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹. Но Π² нашСй Π·Π°Π΄Π°Ρ‡Π΅ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ log2(N) Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ большС), для 922337203685477580-Π³ΠΎ элСмСнта (MaxLong/10) Π½Π°ΠΌ потрСбуСтся 172 вычислСния.

Π•Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΈΠΌ минусом Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° являСтся ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ большой расход памяти.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ стСка индСксов

БСйчас Π½Π°ΠΌ прСдстоит, ΠΏΠΎ сути, Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свою ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ. ИдСя состоит Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ β€” сначала ΠΌΡ‹ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠΌ Β«Π²Π½ΠΈΠ·Β» ΠΎΡ‚ N Π΄ΠΎ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… состояний, запоминая Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ. Π—Π°Ρ‚Π΅ΠΌ возвращаСмся Β«Π²Π²Π΅Ρ€Ρ…Β», ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ вычисляя значСния ΠΎΡ‚ этих Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Π² Ρ‚ΠΎΠΌ порядкС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ записали.

Зависимости Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ стСка – Ρ‚ΠΎ, сколько вычислСний Π½Π°ΠΌ потрСбуСтся ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ. ИмСнно Ρ‚Π°ΠΊ я ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» упомянутоС Π²Ρ‹ΡˆΠ΅ число 172.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΏΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ индСксы ΠΈ вычисляСм для Π½ΠΈΡ… значСния ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°ΠΌ – гарантируСтся, Ρ‡Ρ‚ΠΎ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ значСния ΡƒΠΆΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ вычислСны. Π₯Ρ€Π°Π½ΠΈΡ‚ΡŒ Π±ΡƒΠ΄Π΅ΠΌ ΠΊΠ°ΠΊ Ρ€Π°Π½ΡŒΡˆΠ΅ – Π² Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π΅.

ВсС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ значСния вычислСны, ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ρ‚Π°ΠΊΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ Ρ‚Ρ€ΡƒΠ΄ΠΎΡ‘ΠΌΠΊΠΎΠ΅, ΠΎΠ΄Π½Π°ΠΊΠΎ это Ρ‚ΠΎΠ³ΠΎ стоит.

Π₯ΠΎΡ€ΠΎΡˆΠΎ, ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ° β€” это красиво. А Ρ‡Ρ‚ΠΎ с Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ всё Π΄Π°Π½ΠΎ?

Для большСй ясности Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ Π½Π° ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΡƒΡŽ Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΡƒ:

На Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ лСсСнки, содСрТащСй N ступСнСк, находится мячик, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΏΡ€Ρ‹Π³Π°Ρ‚ΡŒ ΠΏΠΎ Π½ΠΈΠΌ Π²Π½ΠΈΠ·, ΠΊ основанию. ΠœΡΡ‡ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Ρ‹Π³Π½ΡƒΡ‚ΡŒ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΡΡ‚ΡƒΠΏΠ΅Π½ΡŒΠΊΡƒ, Π½Π° ΡΡ‚ΡƒΠΏΠ΅Π½ΡŒΠΊΡƒ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ΄Π½Ρƒ ΠΈΠ»ΠΈ Ρ‡Π΅Ρ€Π΅Π· 2. (Π’ΠΎ Π΅ΡΡ‚ΡŒ, Ссли мячик Π»Π΅ΠΆΠΈΡ‚ Π½Π° 8-ΠΎΠΉ ΡΡ‚ΡƒΠΏΠ΅Π½ΡŒΠΊΠ΅, Ρ‚ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒΡΡ Π½Π° 5-ΡƒΡŽ, 6-ΡƒΡŽ ΠΈΠ»ΠΈ 7-ΡƒΡŽ.) ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ число всСвозмоТных Β«ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΎΠ²Β» мячика с Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π½Π° зСмлю.

ИдСя Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

На ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΡΡ‚ΡƒΠΏΠ΅Π½ΡŒΠΊΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ β€” сдСлав ΠΏΡ€Ρ‹ΠΆΠΎΠΊ с Π΄Π»ΠΈΠ½ΠΎΠΉ Ρ€Π°Π²Π½ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅. На Π²Ρ‚ΠΎΡ€ΡƒΡŽ ΡΡ‚ΡƒΠΏΠ΅Π½ΡŒΠΊΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ сдСлав ΠΏΡ€Ρ‹ΠΆΠΎΠΊ Π΄Π»ΠΈΠ½ΠΎΠΉ 2, ΠΈΠ»ΠΈ с ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΡΡ‚ΡƒΠΏΠ΅Π½ΡŒΠΊΠΈ β€” всСго 2 Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°. На Ρ‚Ρ€Π΅Ρ‚ΡŒΡŽ ΡΡ‚ΡƒΠΏΠ΅Π½ΡŒΠΊΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ сдСлав ΠΏΡ€Ρ‹ΠΆΠΎΠΊ Π΄Π»ΠΈΠ½ΠΎΠΉ Ρ‚Ρ€ΠΈ, с ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΈΠ»ΠΈ со Π²Ρ‚Ρ€ΠΎΠΉ ступСнСк. Π’.Π΅. всСго 4 Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° (0->3; 0->1->3; 0->2->3; 0->1->2->3). Π’Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим Ρ‡Π΅Ρ‚Π²Ρ‘Ρ€Ρ‚ΡƒΡŽ ΡΡ‚ΡƒΠΏΠ΅Π½ΡŒΠΊΡƒ. На Π½Π΅Ρ‘ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ с ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΡΡ‚ΡƒΠΏΠ΅Π½ΡŒΠΊΠΈ β€” ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Ρƒ Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ Π΄ΠΎ Π½Π΅Ρ‘, со Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΈΠ»ΠΈ с Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ β€” Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ. Π˜Π½Ρ‹ΠΌΠΈ словами, количСство ΠΏΡƒΡ‚Π΅ΠΉ Π΄ΠΎ 4-ΠΉ ΡΡ‚ΡƒΠΏΠ΅Π½ΡŒΠΊΠΈ Π΅ΡΡ‚ΡŒ сумма ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΎΠ² Π΄ΠΎ 1-ΠΉ, 2-ΠΉ ΠΈ 3-ΠΉ ступСнСк. ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ°ΡΡΡŒ, F(N) = F(N-1)+F(N-2)+F(N-3). ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Ρ‚Ρ€ΠΈ ΡΡ‚ΡƒΠΏΠ΅Π½ΡŒΠΊΠΈ Π±ΡƒΠ΄Π΅ΠΌ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ состояниями.

РСализация Ρ‡Π΅Ρ€Π΅Π· Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ

Π—Π΄Π΅ΡΡŒ Π½ΠΈΡ‡Π΅Π³ΠΎ Ρ…ΠΈΡ‚Ρ€ΠΎΠ³ΠΎ Π½Π΅Ρ‚.

РСализация Ρ‡Π΅Ρ€Π΅Π· массив Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

Π˜ΡΡ…ΠΎΠ΄Ρ ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ, ΠΏΠΎ Π±ΠΎΠ»ΡŒΡˆΠΎΠΌΡƒ счёту, простоС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° массивС ΠΈΠ· N элСмСнтов ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, я ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽ Ρ‚ΡƒΡ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° массивС всСго ΠΈΠ· Ρ‚Ρ€Ρ‘Ρ….

Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ зависит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ Ρ‚Ρ€Ρ‘Ρ… ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ…, Π½ΠΈ ΠΎΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ индСксом мСньшС i-3 Π½Π°ΠΌ Π±Ρ‹ Π½Π΅ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄Π΅ ΠΌΡ‹ записываСм Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° мСсто самого старого, Π½Π΅ Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ большС. Π¦ΠΈΠΊΠ»ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ остатка ΠΎΡ‚ дСлСния Π½Π° 3 ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π½Π°ΠΌ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΊΡƒΡ‡ΠΈ условных ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ². ΠŸΡ€ΠΎΡΡ‚ΠΎ, ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎ, элСгантно.

Π’Π°ΠΌ Π²Π²Π΅Ρ€Ρ…Ρƒ Π΅Ρ‰Ρ‘ Π±Ρ‹Π»ΠΎ написано ΠΏΡ€ΠΎ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΡƒΡŽ Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΡƒ.

Π‘ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠΉ Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠΎΠΉ Π½Π΅ связано Π½ΠΈΠΊΠ°ΠΊΠΈΡ… особСнностСй, ΠΎΠ΄Π½Π°ΠΊΠΎ я, Π½Π° всякий случай, Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€ΡŽ здСсь ΠΎΠ΄Π½Ρƒ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΈ Π½Π° Π½Π΅Ρ‘.

Π’ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ NxM Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈΠ³Ρ€ΠΎΠΊ находится Π² Π»Π΅Π²ΠΎΠΉ Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ ΠΊΠ»Π΅Ρ‚ΠΊΠ΅. Π—Π° ΠΎΠ΄ΠΈΠ½ Ρ…ΠΎΠ΄ Π΅ΠΌΡƒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Π² сосСднюю ΠΊΠ»Π΅Ρ‚ΠΊΡƒ Π»ΠΈΠ±ΠΎ Π²ΠΏΡ€Π°Π²ΠΎ, Π»ΠΈΠ±ΠΎ Π²Π½ΠΈΠ· (Π²Π»Π΅Π²ΠΎ ΠΈ Π²Π²Π΅Ρ€Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ). ΠŸΠΎΡΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅, сколько Π΅ΡΡ‚ΡŒ способов Ρƒ ΠΈΠ³Ρ€ΠΎΠΊΠ° ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² ΠΏΡ€Π°Π²ΡƒΡŽ ниТнюю ΠΊΠ»Π΅Ρ‚ΠΊΡƒ.

ИдСя Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

Π›ΠΎΠ³ΠΈΠΊΠ° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Π° Ρ‚Π°ΠΊΠΎΠ²ΠΎΠΉ Π² Π·Π°Π΄Π°Ρ‡Π΅ ΠΏΡ€ΠΎ мячик ΠΈ лСстницу β€” Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π² ΠΊΠ»Π΅Ρ‚ΠΊΡƒ (x,y) ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ ΠΈΠ· ΠΊΠ»Π΅Ρ‚ΠΎΠΊ (x-1,y) ΠΈΠ»ΠΈ (x, y-1). Π˜Ρ‚ΠΎΠ³ΠΎ F(x,y) = F(x-1, y)+F(x,y-1). Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ всС ΠΊΠ»Π΅Ρ‚ΠΊΠΈ Π²ΠΈΠ΄Π° (1,y) ΠΈ (x,1) ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ β€” ΠΏΠΎ прямой Π²Π½ΠΈΠ· ΠΈΠ»ΠΈ ΠΏΠΎ прямой Π²ΠΏΡ€Π°Π²ΠΎ.

РСализация Ρ‡Π΅Ρ€Π΅Π· Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ

Π Π°Π΄ΠΈ всСго святого, Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΡƒΡŽ Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΡƒ Ρ‡Π΅Ρ€Π΅Π· Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ. Π£ΠΆΠ΅ Π±Ρ‹Π»ΠΎ упомянуто, Ρ‡Ρ‚ΠΎ рСкурсия ΠΌΠ΅Π½Π΅Π΅ Π²Ρ‹Π³ΠΎΠ΄Π½Π°, Ρ‡Π΅ΠΌ Ρ†ΠΈΠΊΠ» ΠΏΠΎ Π±Ρ‹ΡΡ‚Ρ€ΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΈΡŽ, Ρ‚Π°ΠΊ двумСрная рСкурсия Π΅Ρ‰Ρ‘ ΠΈ читаСтся уТасно. Π­Ρ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Ρ‚Π°ΠΊΠΎΠΌ простом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠ½Π° смотрится Π»Π΅Π³ΠΊΠΎ ΠΈ Π±Π΅Π·ΠΎΠ±ΠΈΠ΄Π½ΠΎ.

РСализация Ρ‡Π΅Ρ€Π΅Π· массив Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠΎΠΉ, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ β€” провСряСм, являСтся Π»ΠΈ ΠΊΠ»Π΅Ρ‚ΠΊΠ° ΠΊΡ€Π°Π΅ΠΌ, ΠΈ Π·Π°Π΄Π°Ρ‘ΠΌ Π΅Ρ‘ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° основС сосСдних ΠΊΠ»Π΅Ρ‚ΠΎΠΊ.

ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ, я всё понял. На Ρ‡Ρ‘ΠΌ ΠΌΠ½Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ свои Π½Π°Π²Ρ‹ΠΊΠΈ?

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ ряд Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ Π½Π° ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΡƒΡŽ ΠΈ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΡƒΡŽ Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΡƒ, Ρ€Π°Π·Π±ΠΎΡ€Ρ‹ ΠΏΡ€ΠΈΠ»Π°Π³Π°ΡŽΡ‚ΡΡ.

Π’Π·Ρ€Ρ‹Π²ΠΎΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Ρ€Π°Π΄ΠΈΠΎΠ°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚Ρ…ΠΎΠ΄Ρ‹ Π΄Π²ΡƒΡ… Π²ΠΈΠ΄ΠΎΠ² β€” особо опасныС (Ρ‚ΠΈΠΏ A) ΠΈ нСопасныС (Ρ‚ΠΈΠΏ B). Для ΠΈΡ… хранСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹. ПослС помСщСния ΠΎΡ‚Ρ…ΠΎΠ΄ΠΎΠ² Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ послСдниС ΡƒΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ стопкой. Π‘Ρ‚ΠΎΠΏΠΊΠ° считаСтся взрывоопасной, Ссли Π² Π½Π΅ΠΉ подряд ΠΈΠ΄Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Ρ‚ΠΈΠΏΠ° A. Π‘Ρ‚ΠΎΠΏΠΊΠ° считаСтся бСзопасной, Ссли ΠΎΠ½Π° Π½Π΅ являСтся взрывоопасной. Для Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ количСства ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² N ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ количСство Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² бСзопасных стопок.

РСшСниС

ΠžΡ‚Π²Π΅Ρ‚ΠΎΠΌ являСтся (N+1)-Π΅ число Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ. Π”ΠΎΠ³Π°Π΄Π°Ρ‚ΡŒΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ, просто вычислив 2-3 ΠΏΠ΅Ρ€Π²Ρ‹Ρ… значСния. Π‘Ρ‚Ρ€ΠΎΠ³ΠΎ Π΄ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ, построив Π΄Π΅Ρ€Π΅Π²ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… построСний.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ динамичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ основной элСмСнт дСлится Π½Π° Π΄Π²Π° β€” основной (заканчиваСтся Π½Π° B) ΠΈ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΉ (заканчиваСтся Π½Π° A). ΠŸΠΎΠ±ΠΎΡ‡Π½Ρ‹Π΅ элСмСнты ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ Π² основныС Π·Π° ΠΎΠ΄Π½Ρƒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ (ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉΡΡ Π½Π° A, ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ B). Π­Ρ‚ΠΎ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½ΠΎ для чисСл Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ.

РСализация

ΠŸΠΎΠ΄ΡŠΡ‘ΠΌ ΠΏΠΎ лСстницС

ΠœΠ°Π»ΡŒΡ‡ΠΈΠΊ подошСл ΠΊ ΠΏΠ»Π°Ρ‚Π½ΠΎΠΉ лСстницС. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ Π½Π° Π»ΡŽΠ±ΡƒΡŽ ΡΡ‚ΡƒΠΏΠ΅Π½ΡŒΠΊΡƒ, Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΠ»Π°Ρ‚ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Π½Π° Π½Π΅ΠΉ сумму. ΠœΠ°Π»ΡŒΡ‡ΠΈΠΊ ΡƒΠΌΠ΅Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΡˆΠ°Π³ΠΈΠ²Π°Ρ‚ΡŒ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΡΡ‚ΡƒΠΏΠ΅Π½ΡŒΠΊΡƒ, Π»ΠΈΠ±ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΡ€Ρ‹Π³ΠΈΠ²Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΡΡ‚ΡƒΠΏΠ΅Π½ΡŒΠΊΡƒ. ВрСбуСтся ΡƒΠ·Π½Π°Ρ‚ΡŒ, какая наимСньшая сумма понадобится ΠΌΠ°Π»ΡŒΡ‡ΠΈΠΊΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π΄ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ ΡΡ‚ΡƒΠΏΠ΅Π½ΡŒΠΊΠΈ.

РСшСниС

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ сумма, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠ°Π»ΡŒΡ‡ΠΈΠΊ отдаст Π½Π° N-ΠΎΠΉ ΡΡ‚ΡƒΠΏΠ΅Π½ΡŒΠΊΠ΅, Π΅ΡΡ‚ΡŒ сумма, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½ ΠΎΡ‚Π΄Π°Π» Π΄ΠΎ этого плюс ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ самой ΡΡ‚ΡƒΠΏΠ΅Π½ΡŒΠΊΠΈ. Β«Π‘ΡƒΠΌΠΌΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½ ΠΎΡ‚Π΄Π°Π» Π΄ΠΎ этого» зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, с ΠΊΠ°ΠΊΠΎΠΉ ΡΡ‚ΡƒΠΏΠ΅Π½ΡŒΠΊΠΈ ΠΌΠ°Π»ΡŒΡ‡ΠΈΠΊ ΡˆΠ°Π³Π°Π΅Ρ‚ Π½Π° N-ΡƒΡŽ β€” с (N-1)-ΠΉ ΠΈΠ»ΠΈ с (N-2)-ΠΉ. Π’Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΈΠΌΠ΅Π½ΡŒΡˆΡƒΡŽ.

РСализация

ΠšΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€

Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСт Ρ‚Ρ€ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ:

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅, ΠΊΠ°ΠΊΠΎΠ΅ наимСньшСС число ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ· числа 1 Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ число N. Π’Ρ‹Π²Π΅Π΄ΠΈΡ‚Π΅ это число, ΠΈ, Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строкС, Π½Π°Π±ΠΎΡ€ исполнСнных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π²ΠΈΠ΄Π° Β«111231Β».

РСшСниС

НаивноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π΅Π»ΠΈΡ‚ΡŒ число Π½Π° 3, ΠΏΠΎΠΊΠ° это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈΠ½Π°Ρ‡Π΅ Π½Π° 2, Ссли это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈΠ½Π°Ρ‡Π΅ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ, ΠΈ Ρ‚Π°ΠΊ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΎ Π½Π΅ обратится Π² Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ. Π­Ρ‚ΠΎ Π½Π΅Π²Π΅Ρ€Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Ρ‚.ΠΊ. ΠΎΠ½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠ±Π°Π²ΠΈΡ‚ΡŒ число Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ, Π° Π·Π°Ρ‚Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° Ρ‚Ρ€ΠΈ, ΠΈΠ·-Π·Π° Ρ‡Π΅Π³ΠΎ Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… числах (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 32718) Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ошибки.

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ числа ΠΎΡ‚ 2 Π΄ΠΎ N минимального количСства дСйствий Π½Π° основС ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… элСмСнтов, ΠΈΠ½Π°Ρ‡Π΅ говоря: F(N) = min(F(N-1), F(N/2), F(N/3)) + 1. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ всС индСксы Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ†Π΅Π»Ρ‹ΠΌΠΈ.

Для воссоздания списка дСйствий Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ΄Ρ‚ΠΈ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΈ ΠΈΡΠΊΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ индСкс i, Ρ‡Ρ‚ΠΎ F(i)=F(N), Π³Π΄Π΅ N β€” Π½ΠΎΠΌΠ΅Ρ€ рассматриваСмого элСмСнта. Если i=N-1, записываСм Π² Π½Π°Ρ‡Π°Π»ΠΎ строки 1, Ссли i=N/2 β€” Π΄Π²ΠΎΠΉΠΊΡƒ, ΠΈΠ½Π°Ρ‡Π΅ β€” Ρ‚Ρ€ΠΎΠΉΠΊΡƒ.

РСализация

Π‘Π°ΠΌΡ‹ΠΉ Π΄Π΅ΡˆΡ‘Π²Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ

Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠ»Π΅Ρ‚ΠΊΠ΅ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ N*M записано Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ число. Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΈΠ³Ρ€ΠΎΠΊ находится Π² Π»Π΅Π²ΠΎΠΉ Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ ΠΊΠ»Π΅Ρ‚ΠΊΠ΅. Π—Π° ΠΎΠ΄ΠΈΠ½ Ρ…ΠΎΠ΄ Π΅ΠΌΡƒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Π² сосСднюю ΠΊΠ»Π΅Ρ‚ΠΊΡƒ Π»ΠΈΠ±ΠΎ Π²ΠΏΡ€Π°Π²ΠΎ, Π»ΠΈΠ±ΠΎ Π²Π½ΠΈΠ· (Π²Π»Π΅Π²ΠΎ ΠΈ Π²Π²Π΅Ρ€Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ). ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠ»Π΅Ρ‚ΠΊΡƒ с ΠΈΠ³Ρ€ΠΎΠΊΠ° Π±Π΅Ρ€ΡƒΡ‚ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΈΠ»ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠ² Π΅Π΄Ρ‹, ΠΊΠ°ΠΊΠΎΠ΅ число записано Π² этой ΠΊΠ»Π΅Ρ‚ΠΊΠ΅ (Π΅Π΄Ρƒ Π±Π΅Ρ€ΡƒΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ Π·Π° ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΈ послСднюю ΠΊΠ»Π΅Ρ‚ΠΊΠΈ Π΅Π³ΠΎ ΠΏΡƒΡ‚ΠΈ).

ВрСбуСтся Π½Π°ΠΉΡ‚ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ вСс Π΅Π΄Ρ‹ Π² ΠΊΠΈΠ»ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…, ΠΎΡ‚Π΄Π°Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΈΠ³Ρ€ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² ΠΏΡ€Π°Π²Ρ‹ΠΉ Π½ΠΈΠΆΠ½ΠΈΠΉ ΡƒΠ³ΠΎΠ».

РСшСниС

Π’ Π»ΡŽΠ±ΡƒΡŽ ΠΊΠ»Π΅Ρ‚ΠΊΡƒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π»ΠΈΠ±ΠΎ ΠΈΠ· ΠΊΠ»Π΅Ρ‚ΠΊΠΈ, находящСйся нСпосрСдствСнно Π½Π°Π΄ Π½Π΅ΠΉ, Π»ΠΈΠ±ΠΎ ΠΈΠ· ΠΊΠ»Π΅Ρ‚ΠΊΠΈ, находящСйся нСпосрСдствСнно слСва. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, F(x,y) = min(F(x-1,y), F(x,y-1)). Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π³Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹Π΅ случаи, ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²ΡƒΡŽ строку ΠΈ столбСц, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Π΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ константой β€” ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ числом, Π·Π°Π²Π΅Π΄ΠΎΠΌΠΎ большим содСрТимого любой ΠΈΠ· ΠΊΠ»Π΅Ρ‚ΠΎΠΊ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *