Site Loader

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ A* / Habr

ΠŸΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΈΠ³Ρ€ Π½Π°ΠΌ часто Π½ΡƒΠΆΠ½ΠΎ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΡƒΡ‚ΠΈ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ. ΠœΡ‹ Π½Π΅ просто стрСмимся Π½Π°ΠΉΡ‚ΠΈ ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠ΅Π΅ расстояниС, Π½Π°ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡ‡Π΅ΡΡ‚ΡŒ ΠΈ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ двиТСния. ΠŸΠ΅Ρ€Π΅Π΄Π²ΠΈΠ³Π°ΠΉΡ‚Π΅ Π·Π²Ρ‘Π·Π΄ΠΎΡ‡ΠΊΡƒ (Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ) ΠΈ крСстик (ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠΈΠΉ ΠΏΡƒΡ‚ΡŒ. [ΠŸΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.: Π² ΡΡ‚Π°Ρ‚ΡŒΡΡ… этого Π°Π²Ρ‚ΠΎΡ€Π° всСгда ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… вставок, Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π» ΡΡ‚Π°Ρ‚ΡŒΠΈ.]
Для поиска этого ΠΏΡƒΡ‚ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ поиска ΠΏΠΎ Π³Ρ€Π°Ρ„Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ, Ссли ΠΊΠ°Ρ€Ρ‚Π° прСдставляСт собой Π³Ρ€Π°Ρ„. A* часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² качСствС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° поиска ΠΏΠΎ Π³Ρ€Π°Ρ„Ρƒ. Поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ β€” это ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ ΠΈΠ· Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² поиска ΠΏΠΎ Π³Ρ€Π°Ρ„Ρƒ, поэтому Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Ρ‘ΠΌ с Π½Π΅Π³ΠΎ ΠΈ постСпСнно ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘ΠΌ ΠΊ A*.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ°Ρ€Ρ‚Ρ‹


ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° β€” ΠΏΠΎΠ½ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅. Π§Ρ‚ΠΎ подаётся Π½Π° Π²Ρ…ΠΎΠ΄? Π§Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅?

Π’Ρ…ΠΎΠ΄: Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ поиска ΠΏΠΎ Π³Ρ€Π°Ρ„Ρƒ, Π² Ρ‚ΠΎΠΌ числС ΠΈ A*, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π² качСствС Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π³Ρ€Π°Ρ„. Π“Ρ€Π°Ρ„ β€” это Π½Π°Π±ΠΎΡ€ Ρ‚ΠΎΡ‡Π΅ΠΊ (Β«ΡƒΠ·Π»ΠΎΠ²Β») ΠΈ соСдинСний (Β«Ρ€Ρ‘Π±Π΅Ρ€Β») ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. Π’ΠΎΡ‚ Π³Ρ€Π°Ρ„, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я ΠΏΠ΅Ρ€Π΅Π΄Π°Π» A*:

A* Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ. Он Π²ΠΈΠ΄ΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π³Ρ€Π°Ρ„. Он Π½Π΅ Π·Π½Π°Π΅Ρ‚, находится Π»ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π² ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ Π·Π° Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ, Π΄Π²Π΅Ρ€ΡŒ это ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ½Π°Ρ‚Π°, насколько Π²Π΅Π»ΠΈΠΊΠ° ΠΎΠ±Π»Π°ΡΡ‚ΡŒ. Он Π²ΠΈΠ΄ΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π³Ρ€Π°Ρ„! Он Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ°Ρ€Ρ‚ΠΎΠΉ свСрху ΠΈ Π²ΠΎΡ‚ этой:

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

ΠšΠΎΠΌΠΏΡ€ΠΎΠΌΠΈΡΡΡ‹: для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚Ρ‹ Π΅ΡΡ‚ΡŒ мноТСство Ρ€Π°Π·Π½Ρ‹Ρ… способов ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π³Ρ€Π°Ρ„Π° поиска ΠΏΡƒΡ‚ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ A*. ΠšΠ°Ρ€Ρ‚Π° Π½Π° рисункС Π²Ρ‹ΡˆΠ΅ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Π²Π΅Ρ€ΠΈ Π² ΡƒΠ·Π»Ρ‹.

А Ρ‡Ρ‚ΠΎ, Ссли ΠΌΡ‹ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΠΌ Π΄Π²Π΅Ρ€ΠΈ Π² Ρ€Ρ‘Π±Ρ€Π°?

А Ссли ΠΌΡ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ сСтку для поиска ΠΏΡƒΡ‚ΠΈ?

Π“Ρ€Π°Ρ„ поиска ΠΏΡƒΡ‚ΠΈ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π΅ΠΌ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² вашСй ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚Π΅. Π’ ΠΊΠ°Ρ€Ρ‚Π΅ Π½Π° основС сСток ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³Ρ€Π°Ρ„ поиска ΠΏΡƒΡ‚ΠΈ Π±Π΅Π· сСток, ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. A* выполняСтся быстрСС с наимСньшим количСством ΡƒΠ·Π»ΠΎΠ² Π³Ρ€Π°Ρ„Π°. Π‘ сСтками часто ΠΏΡ€ΠΎΡ‰Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Π½ΠΎ Π² Π½ΠΈΡ… получаСтся мноТСство ΡƒΠ·Π»ΠΎΠ². Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ рассматриваСтся сам Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ A*, Π° Π½Π΅ Π΄ΠΈΠ·Π°ΠΉΠ½ Π³Ρ€Π°Ρ„ΠΎΠ². ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ Π³Ρ€Π°Ρ„Π°Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½Π° ΠΌΠΎΠ΅ΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠΉ страницС. Для объяснСний я Π² дальнСйшСм

Π±ΡƒΠ΄Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сСтки, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊ ΠΏΡ€ΠΎΡ‰Π΅ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ.

Алгоритмы


БущСствуСт мноТСство Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… с Π³Ρ€Π°Ρ„Π°ΠΌΠΈ. Π― Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€ΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:

Поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ выполняСт исслСдованиС Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎ Π²ΠΎ всСх направлСниях. Π­Ρ‚ΠΎ нСвСроятно ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ поиска ΠΏΡƒΡ‚ΠΈ, Π½ΠΎ ΠΈ для ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠ°Ρ€Ρ‚, поиска ΠΏΡƒΡ‚Π΅ΠΉ тСчСния, ΠΊΠ°Ρ€Ρ‚ расстояний ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² Π°Π½Π°Π»ΠΈΠ·Π° ΠΊΠ°Ρ€Ρ‚.

Алгоритм ДСйкстры (Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ поиском с Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠΉ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΡŽ) позволяСт Π½Π°ΠΌ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Ρ‹ исслСдования ΠΏΡƒΡ‚Π΅ΠΉ. ВмСсто Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ исслСдования всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΏΡƒΡ‚Π΅ΠΉ ΠΎΠ½ ΠΎΡ‚Π΄Π°Ρ‘Ρ‚ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅ путям с Π½ΠΈΠ·ΠΊΠΎΠΉ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΡŽ. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Π΄Π°Ρ‚ΡŒ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½Π½Ρ‹Π΅ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ двигался ΠΏΠΎ Π΄ΠΎΡ€ΠΎΠ³Π°ΠΌ, ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½ΡƒΡŽ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ лСсов ΠΈ Π²Ρ€Π°Π³ΠΎΠ², ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅. Когда ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ двиТСния ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π½ΠΎΠΉ, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΅Π³ΠΎ вмСсто поиска Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ.

A* β€” это модификация Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ДСйкстры, оптимизированная для СдинствСнной ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ. Алгоритм ДСйкстры ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΡƒΡ‚ΠΈ ΠΊΠΎ всСм Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌ, A* Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅. Он ΠΎΡ‚Π΄Π°Ρ‘Ρ‚ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ путям, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ Π±Π»ΠΈΠΆΠ΅ ΠΊ Ρ†Π΅Π»ΠΈ.

Π― Π½Π°Ρ‡Π½Ρƒ с самого простого β€” поиска Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ, ΠΈ Π±ΡƒΠ΄Ρƒ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, постСпСнно прСвращая Π΅Π³ΠΎ Π² A*.

Поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ


ΠšΠ»ΡŽΡ‡Π΅Π²Π°Ρ идСя всСх этих Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ отслСТиваСм состояниС Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‰Π΅Π³ΠΎΡΡ ΠΊΠΎΠ»ΡŒΡ†Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ называСтся
Π³Ρ€Π°Π½ΠΈΡ†Π΅ΠΉ
. Π’ сСткС этот процСсс ΠΈΠ½ΠΎΠ³Π΄Π° называСтся Π·Π°Π»ΠΈΠ²ΠΊΠΎΠΉ (flood fill), Π½ΠΎ Ρ‚Π° ΠΆΠ΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠ° ΠΈ для ΠΊΠ°Ρ€Ρ‚ Π±Π΅Π· сСток. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡŽ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹:


Как это Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ? ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΡΠ΅ΠΌ эти шаги, ΠΏΠΎΠΊΠ° Π³Ρ€Π°Π½ΠΈΡ†Π° Π½Π΅ окаТСтся пустой:
  1. Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΈ удаляСм Ρ‚ΠΎΡ‡ΠΊΡƒ ΠΈΠ· Π³Ρ€Π°Π½ΠΈΡ†Ρ‹.
  2. ΠŸΠΎΠΌΠ΅Ρ‡Π°Π΅ΠΌ Ρ‚ΠΎΡ‡ΠΊΡƒ ΠΊΠ°ΠΊ ΠΏΠΎΡΠ΅Ρ‰Ρ‘Π½Π½ΡƒΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΅Ρ‘ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ.
  3. Π Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ, глядя Π½Π° Π΅Ρ‘ сосСдСй. ВсСх сосСдСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹ Π΅Ρ‰Ρ‘ Π½Π΅ Π²ΠΈΠ΄Π΅Π»ΠΈ, добавляСм ΠΊ
    Π³Ρ€Π°Π½ΠΈΡ†Π΅
    .

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим это ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅. Π’Π°ΠΉΠ»Ρ‹ Π½ΡƒΠΌΠ΅Ρ€ΡƒΡŽΡ‚ΡΡ Π² порядкС ΠΈΡ… посСщСния:


Алгоритм описываСтся всСго Π² дСсяти строках ΠΊΠΎΠ΄Π° Π½Π° Python:
frontier = Queue()
frontier.put(start )
visited = {}
visited[start] = True

while not frontier.empty():
   current = frontier.get()
   for next in graph.neighbors(current):
      if next not in visited:
         frontier.put(next)
         visited[next] = True

Π’ этом Ρ†ΠΈΠΊΠ»Π΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ вся ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² поиска ΠΏΠΎ Π³Ρ€Π°Ρ„Ρƒ этой ΡΡ‚Π°Ρ‚ΡŒΠΈ, Π² Ρ‚ΠΎΠΌ числС ΠΈ A*. Но ΠΊΠ°ΠΊ Π½Π°ΠΌ Π½Π°ΠΉΡ‚ΠΈ ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠΈΠΉ ΠΏΡƒΡ‚ΡŒ? Π¦ΠΈΠΊΠ» Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ создаёт ΠΏΡƒΡ‚Π΅ΠΉ, ΠΎΠ½ просто Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ Π½Π°ΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΡΠ΅Ρ‚ΠΈΡ‚ΡŒ всС Ρ‚ΠΎΡ‡ΠΊΠΈ Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅. Π’Π°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Π³ΠΎΡ€Π°Π·Π΄ΠΎ большСго, Ρ‡Π΅ΠΌ просто поиск ΠΏΡƒΡ‚Π΅ΠΉ. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽ, ΠΊΠ°ΠΊ ΠΎΠ½ примСняСтся Π² ΠΈΠ³Ρ€Π°Ρ… tower defense, Π½ΠΎ Π΅Π³ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΊΠ°Ρ€Ρ‚Π°Ρ… расстояний, Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠ°Ρ€Ρ‚ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠΌ. Однако здСсь ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для поиска ΠΏΡƒΡ‚Π΅ΠΉ, поэтому Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ Ρ†ΠΈΠΊΠ» Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ,
ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΌΡ‹ ΠΏΡ€ΠΈΡˆΠ»ΠΈ
для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ посСщённой Ρ‚ΠΎΡ‡ΠΊΠΈ, ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΡƒΠ΅ΠΌ visited Π² came_from:
frontier = Queue()
frontier.put(start )
came_from = {}
came_from[start] = None

while not frontier.empty():
   current = frontier.get()
   for next in graph.neighbors(current):
      if next not in came_from:
         frontier.put(next)
         came_from[next] = current

Π’Π΅ΠΏΠ΅Ρ€ΡŒ came_from для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° мСсто, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ ΠΏΡ€ΠΈΡˆΠ»ΠΈ. Π­Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° Β«Ρ…Π»Π΅Π±Π½Ρ‹Π΅ ΠΊΡ€ΠΎΡˆΠΊΠΈΒ» ΠΈΠ· сказки. Нам этого достаточно для воссоздания Ρ†Π΅Π»ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ стрСлки ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΊ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ.

Код воссоздания ΠΏΡƒΡ‚Π΅ΠΉ прост: слСдуСм ΠΏΠΎ стрСлкам ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΎΡ‚ Ρ†Π΅Π»ΠΈ ΠΊ Π½Π°Ρ‡Π°Π»Ρƒ. ΠŸΡƒΡ‚ΡŒ β€” это ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ€Ρ‘Π±Π΅Ρ€, Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΡ‰Π΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠ·Π»Ρ‹:

current = goal 
path = [current]
while current != start: 
   current = came_from[current]
   path.append(current)
path.append(start) # optional
path.reverse() # optional

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

Π Π°Π½Π½ΠΈΠΉ Π²Ρ‹Ρ…ΠΎΠ΄


ΠœΡ‹ нашли ΠΏΡƒΡ‚ΠΈ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ Π²ΠΎ всС Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚ΠΎΡ‡ΠΊΠΈ. Часто Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ всС ΠΏΡƒΡ‚ΠΈ, Π½Π°ΠΌ просто Π½ΡƒΠΆΠ΅Π½ ΠΏΡƒΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°ΠΉΠ΄Ρ‘ΠΌ Π½Π°ΡˆΡƒ Ρ†Π΅Π»ΡŒ. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ Π³Ρ€Π°Π½ΠΈΡ†Π° пСрСстаёт Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡΡ послС нахоТдСния Ρ†Π΅Π»ΠΈ.

Код достаточно прямолинССн:

frontier = Queue()
frontier.put(start )
came_from = {}
came_from[start] = None

while not frontier.empty():
   current = frontier.get()

   if current == goal: 
      break           

   for next in graph.neighbors(current):
      if next not in came_from:
         frontier.put(next)
         came_from[next] = current

Π‘Ρ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ пСрСмСщСния


Пока ΠΌΡ‹ Π΄Π΅Π»Π°Π»ΠΈ шаги с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΡŽ. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях поиска ΠΏΡƒΡ‚Π΅ΠΉ Ρƒ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² двиТСния Π΅ΡΡ‚ΡŒ разная ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ. НапримСр, Π² Civilization Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· Ρ€Π°Π²Π½ΠΈΠ½Ρ‹ ΠΈΠ»ΠΈ ΠΏΡƒΡΡ‚Ρ‹Π½ΡŽ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚ΠΎΠΈΡ‚ΡŒ 1 ΠΎΡ‡ΠΊΠΎ двиТСния, Π° Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· лСс β€” 5 ΠΎΡ‡ΠΊΠΎΠ² двиТСния. На ΠΊΠ°Ρ€Ρ‚Π΅ Π² самом Π½Π°Ρ‡Π°Π»Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΏΡ€ΠΎΡ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· Π²ΠΎΠ΄Ρƒ стоит Π² 10 Ρ€Π°Π· Π΄ΠΎΡ€ΠΎΠΆΠ΅, Ρ‡Π΅ΠΌ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ Ρ‚Ρ€Π°Π²Π΅. Π•Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ являСтся диагональноС Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π² сСткС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ стоит большС, Ρ‡Π΅ΠΌ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ осям. Нам Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ поиск ΠΏΡƒΡ‚ΠΈ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π» эту ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ. Π”Π°Π²Π°ΠΉΡ‚Π΅ сравним
количСство шагов
ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° с расстояниСм ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π°:

Для этого Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ДСйкстры (Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ поиском с Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠΉ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΡŽ). Π§Π΅ΠΌ ΠΎΠ½ отличаСтся ΠΎΡ‚ поиска Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ? Нам Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ двиТСния, поэтому Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π½ΠΎΠ²ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ

cost_so_far, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° ΠΎΠ±Ρ‰Π΅ΠΉ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΡŽ двиТСния с Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ. ΠŸΡ€ΠΈ ΠΎΡ†Π΅Π½ΠΊΠ΅ Ρ‚ΠΎΡ‡Π΅ΠΊ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ пСрСдвиТСния. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΠΌ Π½Π°ΡˆΡƒ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ с ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°ΠΌΠΈ. МСнСС ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρƒ нас ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΎΠ΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° посСщаСтся нСсколько Ρ€Π°Π· с Ρ€Π°Π·Π½ΠΎΠΉ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΡŽ, поэтому Π½ΡƒΠΆΠ½ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ. ВмСсто добавлСния Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΊ Π³Ρ€Π°Π½ΠΈΡ†Π΅ Π² случаС, ΠΊΠΎΠ³Π΄Π° Ρ‚ΠΎΡ‡ΠΊΡƒ Π½ΠΈ Ρ€Π°Π·Ρƒ Π½Π΅ посСщали, ΠΌΡ‹ добавляСм Π΅Ρ‘, Ссли Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ‚ΠΎΡ‡ΠΊΠ΅ Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Π΅ΠΌ Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΉ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ ΠΏΡƒΡ‚ΡŒ.

frontier = PriorityQueue()
frontier.put(start, 0)
came_from = {}
cost_so_far = {}
came_from[start] = None
cost_so_far[start] = 0

while not frontier.empty():
   current = frontier.get()

   if current == goal:
      break
   
   for next in graph.neighbors(current):
      new_cost = cost_so_far[current] + graph.cost(current, next)
      if next not in cost_so_far or new_cost < cost_so_far[next]:
         cost_so_far[next] = new_cost
         priority = new_cost
         frontier.put(next, priority)
         came_from[next] = current

ИспользованиС ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ с ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°ΠΌΠΈ вмСсто ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ измСняСт способ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹. ΠšΠΎΠ½Ρ‚ΡƒΡ€Π½Ρ‹Π΅ Π»ΠΈΠ½ΠΈΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ это ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π²ΠΈΠ΄Π΅ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π³Ρ€Π°Π½ΠΈΡ†Π° Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ΡΡ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ Ρ‡Π΅Ρ€Π΅Π· лСса, ΠΈ поиск ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠ΅Π³ΠΎ ΠΏΡƒΡ‚ΠΈ выполняСтся Π²ΠΎΠΊΡ€ΡƒΠ³ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ лСса, Π° Π½Π΅ сквозь Π½Π΅Π³ΠΎ:


Π‘Ρ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ двиТСния, ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰Π°ΡΡΡ ΠΎΡ‚ 1, позволяСт Π½Π°ΠΌ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ интСрСсныС Π³Ρ€Π°Ρ„Ρ‹, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сСтки. На ΠΊΠ°Ρ€Ρ‚Π΅ Π² Π½Π°Ρ‡Π°Π»Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ двиТСния основана Π½Π° расстоянии ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΌΠ½Π°Ρ‚Π°ΠΌΠΈ. Π‘Ρ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ двиТСния ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ области Π½Π° основании близости Π²Ρ€Π°Π³ΠΎΠ² ΠΈΠ»ΠΈ союзников. Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Π°Ρ Π΄Π΅Ρ‚Π°Π»ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ: обычная ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ с ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°ΠΌΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ вставки ΠΈ удалСния, Π½ΠΎ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… вСрсиях Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ДСйкстры ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΈ Ρ‚Ρ€Π΅Ρ‚ΡŒΡ опСрация, ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰Π°Ρ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ элСмСнта, ΡƒΠΆΠ΅ находящСгося Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ с ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°ΠΌΠΈ. Π― Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ эту ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, ΠΈ объясняю это Π½Π° страницС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°.

ЭвристичСский поиск


Π’ поискС Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ ДСйкстры Π³Ρ€Π°Π½ΠΈΡ†Π° Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ΡΡ Π²ΠΎ всСх направлСниях. Π­Ρ‚ΠΎ Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€, Ссли Π²Ρ‹ ΠΈΡ‰Π΅Ρ‚Π΅ ΠΏΡƒΡ‚ΡŒ ΠΊΠΎ всСм Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌ ΠΈΠ»ΠΈ ΠΊΠΎ мноТСству Ρ‚ΠΎΡ‡Π΅ΠΊ. Однако ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ поиск выполняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΠ΄Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ. Π”Π°Π²Π°ΠΉΡ‚Π΅ сдСлаСм Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Ρ€Π°Π½ΠΈΡ†Π° Ρ€Π°ΡΡˆΠΈΡ€ΡΠ»Π°ΡΡŒ ΠΊ Ρ†Π΅Π»ΠΈ большС, Ρ‡Π΅ΠΌ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… направлСниях. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΡΠ²Ρ€ΠΈΡΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΡΠΎΠΎΠ±Ρ‰Π°ΡŽΡ‰ΡƒΡŽ Π½Π°ΠΌ, насколько ΠΌΡ‹ Π±Π»ΠΈΠ·ΠΊΠΈ ΠΊ Ρ†Π΅Π»ΠΈ:
def heuristic(a, b):
   # Manhattan distance on a square grid
   return abs(a.x - b.x) + abs(a.y - b.y)

Π’ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ ДСйкстры для порядка ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ с ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°ΠΌΠΈ ΠΌΡ‹ использовали расстояниС ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π°. Π’ ΠΆΠ°Π΄Π½ΠΎΠΌ поискС ΠΏΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠ΅ΠΌΡƒ совпадСнию для порядка ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ с ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°ΠΌΠΈ ΠΌΡ‹ вмСсто этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΎΡ†Π΅Π½Π΅Π½Π½ΠΎΠ΅ расстояниС Π΄ΠΎ Ρ†Π΅Π»ΠΈ. Π’ΠΎΡ‡ΠΊΠ°, блиТайшая ΠΊ Ρ†Π΅Π»ΠΈ, Π±ΡƒΠ΄Π΅Ρ‚ исслСдована ΠΏΠ΅Ρ€Π²ΠΎΠΉ. Π’ ΠΊΠΎΠ΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ с ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°ΠΌΠΈ ΠΈΠ· поиска Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ, Π½ΠΎ Π½Π΅ примСняСтся cost_so_far ΠΈΠ· Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ДСйкстры:
frontier = PriorityQueue()
frontier.put(start, 0)
came_from = {}
came_from[start] = None

while not frontier.empty():
   current = frontier.get()

   if current == goal:
      break
   
   for next in graph.neighbors(current):
      if next not in came_from:
         priority = heuristic(goal, next)
         frontier.put(next, priority)
         came_from[next] = current

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚:


Ого! ΠŸΠΎΡ‚Ρ€ΡΡΠ°ΡŽΡ‰Π΅, ΠΏΡ€Π°Π²Π΄Π°? Но Ρ‡Ρ‚ΠΎ случится Π½Π° Π±ΠΎΠ»Π΅Π΅ слоТной ΠΊΠ°Ρ€Ρ‚Π΅?


Π­Ρ‚ΠΈ ΠΏΡƒΡ‚ΠΈ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠΈΠΌΠΈ. Π˜Ρ‚Π°ΠΊ, этот Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстрСС, ΠΊΠΎΠ³Π΄Π° прСпятствий Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ, Π½ΠΎ ΠΏΡƒΡ‚ΠΈ Π½Π΅ слишком ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹. МоТно Π»ΠΈ это ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ? ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ.

Алгоритм A*


Алгоритм ДСйкстры Ρ…ΠΎΡ€ΠΎΡˆ Π² поискС ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠ΅Π³ΠΎ ΠΏΡƒΡ‚ΠΈ, Π½ΠΎ ΠΎΠ½ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ врСмя Π½Π° исслСдованиС всСх Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ, Π΄Π°ΠΆΠ΅ бСспСрспСктивных. Π–Π°Π΄Π½Ρ‹ΠΉ поиск исслСдуСт пСрспСктивныС направлСния, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π½Π°ΠΉΡ‚ΠΈ ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠΈΠΉ ΠΏΡƒΡ‚ΡŒ. Алгоритм A* ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΈ ΠΏΠΎΠ΄Π»ΠΈΠ½Π½ΠΎΠ΅ расстояниС ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π°, ΠΈ ΠΎΡ†Π΅Π½Π΅Π½Π½ΠΎΠ΅ расстояниС Π΄ΠΎ Ρ†Π΅Π»ΠΈ.

Код ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ДСйкстры:

frontier = PriorityQueue()
frontier.put(start, 0)
came_from = {}
cost_so_far = {}
came_from[start] = None
cost_so_far[start] = 0

while not frontier.empty():
   current = frontier.get()

   if current == goal:
      break
   
   for next in graph.neighbors(current):
      new_cost = cost_so_far[current] + graph.cost(current, next)
      if next not in cost_so_far or new_cost < cost_so_far[next]:
         cost_so_far[next] = new_cost
         priority = new_cost + heuristic(goal, next)
         frontier.put(next, priority)
         came_from[next] = current

Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹: Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ДСйкстры вычисляСт расстояниС ΠΎΡ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ. Π–Π°Π΄Π½Ρ‹ΠΉ поиск ΠΏΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠ΅ΠΌΡƒ совпадСнию ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π΅Ρ‚ расстояниС Π΄ΠΎ Ρ‚ΠΎΡ‡ΠΊΠΈ Ρ†Π΅Π»ΠΈ. A* ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ сумму этих Π΄Π²ΡƒΡ… расстояний.

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ отвСрстия Π² Ρ€Π°Π·Π½Ρ‹Ρ… мСстах стСны. Π’Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΆΠ°Π΄Π½Ρ‹ΠΉ поиск Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚, A* Ρ‚ΠΎΠΆΠ΅ Π΅Π³ΠΎ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚, исслСдуя Ρ‚Ρƒ ΠΆΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ. Когда ΠΆΠ°Π΄Π½Ρ‹ΠΉ поиск ΠΏΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠ΅ΠΌΡƒ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ (Π±ΠΎΠ»Π΅Π΅ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ), A* Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ, ΠΊΠ°ΠΊ ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ДСйкстры, Π½ΠΎ всё Ρ€Π°Π²Π½ΠΎ исслСдуСт мСньшС, Ρ‡Π΅ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ДСйкстры.

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

Π˜β€¦ Π½Π° этом всё! Π’ этом ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ A*.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅


Π’Ρ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ? ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‚ΠΎ Ρƒ мСня Π΅ΡΡ‚ΡŒ инструкция ΠΏΠΎ пошаговой Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π³Ρ€Π°Ρ„ΠΎΠ², ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² поиска ΠΏΡƒΡ‚ΠΈ Π½Π° Python, C++ ΠΈ C#.

Какой Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для поиска ΠΏΡƒΡ‚Π΅ΠΉ Π½Π° ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚Π΅?

  • Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΡƒΡ‚ΠΈ ΠΈΠ· ΠΈΠ»ΠΈ ΠΊΠΎ всСм Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΈΠ»ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ДСйкстры. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ, Ссли ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ двиТСния ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Π°. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ДСйкстры, Ссли ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ двиТСния измСняСтся.
  • Если Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΡƒΡ‚ΠΈ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΆΠ°Π΄Π½Ρ‹ΠΉ поиск ΠΏΠΎ Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠ΅ΠΌΡƒ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ ΠΈΠ»ΠΈ A*. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв стоит ΠΎΡ‚Π΄Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅ A*. Когда Π΅ΡΡ‚ΡŒ ΠΈΡΠΊΡƒΡˆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΆΠ°Π΄Π½Ρ‹ΠΉ поиск, Ρ‚ΠΎ ΠΏΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ Π½Π°Π΄ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ A* с «нСдопустимой» эвристикой.

А Ρ‡Ρ‚ΠΎ насчёт ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡƒΡ‚Π΅ΠΉ? Поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ДСйкстры Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ Π½Π°ΠΉΠ΄ΡƒΡ‚ ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠΈΠΉ ΠΏΡƒΡ‚ΡŒ ΠΏΠΎ Π³Ρ€Π°Ρ„Ρƒ. Π–Π°Π΄Π½Ρ‹ΠΉ поиск Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΅Π³ΠΎ Π½Π°ΠΉΠ΄Ρ‘Ρ‚. A* Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ Π½Π°ΠΉΠ΄Ρ‘Ρ‚ ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠΈΠΉ ΠΏΡƒΡ‚ΡŒ, Ссли эвристика Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ большС истинного расстояния. Когда эвристика становится мСньшС, A* прСвращаСтся Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ДСйкстры. Когда эвристика становится большС, A* прСвращаСтся Π² ΠΆΠ°Π΄Π½Ρ‹ΠΉ поиск ΠΏΠΎ Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠ΅ΠΌΡƒ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ совпадСнию.

А ΠΊΠ°ΠΊ насчёт ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ? Π›ΡƒΡ‡ΡˆΠ΅ всСго ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ Π³Ρ€Π°Ρ„Π°. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ сСтку, Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ это. УмСньшСниС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π³Ρ€Π°Ρ„Π° ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ всСм Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌ поиска ΠΏΠΎ Π³Ρ€Π°Ρ„Π°ΠΌ. ПослС этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ². ΠŸΡ€ΠΎΡΡ‚Ρ‹Π΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ быстрСС. Π–Π°Π΄Π½Ρ‹ΠΉ поиск ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ выполняСтся быстрСС, Ρ‡Π΅ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ДСйкстры, Π½ΠΎ Π½Π΅ обСспСчиваСт ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡƒΡ‚Π΅ΠΉ. Для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ поиску ΠΏΡƒΡ‚Π΅ΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ являСтся A*.

А Ρ‡Ρ‚ΠΎ насчёт использования Π½Π΅ Π½Π° ΠΊΠ°Ρ€Ρ‚Π°Ρ…? Π― использовал Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΊΠ°Ρ€Ρ‚Ρ‹, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Π½Π° Π½ΠΈΡ… ΠΏΡ€ΠΎΡ‰Π΅ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°. Однако эти Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ поиска ΠΏΠΎ Π³Ρ€Π°Ρ„Π°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Π»ΡŽΠ±Ρ‹Ρ… Π³Ρ€Π°Ρ„Π°Ρ…, Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Ρ… ΠΊΠ°Ρ€Ρ‚Π°Ρ…, ΠΈ я пытался ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π² Π²ΠΈΠ΄Π΅, Π½Π΅ зависящСм ΠΎΡ‚ Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½Ρ‹Ρ… сСток. Π‘Ρ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ двиТСния Π½Π° ΠΊΠ°Ρ€Ρ‚Π°Ρ… прСвращаСтся Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ вСса Ρ€Ρ‘Π±Π΅Ρ€ Π³Ρ€Π°Ρ„Π°. Эвристики пСрСнСсти Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΠΊΠ°Ρ€Ρ‚Ρ‹ Π½Π΅ Ρ‚Π°ΠΊ просто, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ эвристику для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π³Ρ€Π°Ρ„Π°. Для плоских ΠΊΠ°Ρ€Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄ΡƒΡ‚ расстояния, поэтому здСсь ΠΌΡ‹ использовали ΠΈΡ….

Π― написал Π΅Ρ‰Ρ‘ ΠΌΠ½ΠΎΠ³ΠΎ всСго ΠΎ поискС ΠΏΡƒΡ‚Π΅ΠΉ здСсь. НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ поиск ΠΏΠΎ Π³Ρ€Π°Ρ„Π°ΠΌ β€” это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° Ρ‡Π°ΡΡ‚ΡŒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ. Π‘Π°ΠΌ ΠΏΠΎ сСбС A* Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠ΅ аспСкты, ΠΊΠ°ΠΊ совмСстноС Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ прСпятствий, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠ°Ρ€Ρ‚Ρ‹, ΠΎΡ†Π΅Π½ΠΊΡƒ опасных областСй, Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, радиусы ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π°, Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡŽ, сглаТиваниС ΠΏΡƒΡ‚Π΅ΠΉ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅.

ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅ объяснСниС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² поиска ΠΏΡƒΡ‚ΠΈ ΠΈ A* / Habr


Π§Π°ΡΡ‚ΡŒ 1. ΠžΠ±Ρ‰ΠΈΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ поиска


Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅


Поиск ΠΏΡƒΡ‚ΠΈ β€” это ΠΎΠ΄Π½Π° ΠΈΠ· Ρ‚Π΅Ρ… Ρ‚Π΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ самыС большиС слоТности для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈΠ³Ρ€. ОсобСнно ΠΏΠ»ΠΎΡ…ΠΎ люди ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ A*, ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠΌ каТСтся, Ρ‡Ρ‚ΠΎ это какая-Ρ‚ΠΎ нСпостиТимая магия.

ЦСль Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ β€” ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ поиск ΠΏΡƒΡ‚ΠΈ Π² Ρ†Π΅Π»ΠΎΠΌ ΠΈ A* Π² частности ΠΎΡ‡Π΅Π½ΡŒ понятным ΠΈ доступным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΠΎΠ»ΠΎΠΆΠΈΠ² Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΊΠΎΠ½Π΅Ρ† распространённому Π·Π°Π±Π»ΡƒΠΆΠ΄Π΅Π½ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ эта Ρ‚Π΅ΠΌΠ° слоТна. ΠŸΡ€ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ объяснСнии всё достаточно просто.

Π£Ρ‡Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ поиск ΠΏΡƒΡ‚ΠΈ для ΠΈΠ³Ρ€; Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π±ΠΎΠ»Π΅Π΅ акадСмичСских статСй, ΠΌΡ‹ опустим Ρ‚Π°ΠΊΠΈΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ поиска, ΠΊΠ°ΠΊ поиск Π² Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ (Depth-First) ΠΈΠ»ΠΈ поиск Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ (Breadth-First). ВмСсто этого ΠΌΡ‹ постараСмся ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ быстрСС Π΄ΠΎΠΉΡ‚ΠΈ ΠΎΡ‚ нуля Π΄ΠΎ A*.

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ части ΠΌΡ‹ объясним ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠ΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ поиска ΠΏΡƒΡ‚ΠΈ. Π Π°Π·ΠΎΠ±Ρ€Π°Π²ΡˆΠΈΡΡŒ с этими Π±Π°Π·ΠΎΠ²Ρ‹ΠΌΠΈ концСпциями, Π²Ρ‹ ΠΏΠΎΠΉΠΌΡ‘Ρ‚Π΅, Ρ‡Ρ‚ΠΎ A* Π½Π° ΡƒΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΠ΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π΅Π½.

ΠŸΡ€ΠΎΡΡ‚Π°Ρ схСма


Π₯отя Π²Ρ‹ смоТСтС ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ эти ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ΠΈ ΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ слоТным 3D-срСдам, Π΄Π°Π²Π°ΠΉΡ‚Π΅ всё-Ρ‚Π°ΠΊΠΈ Π½Π°Ρ‡Π½Ρ‘ΠΌ с Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ простой схСмы: ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΎΠΉ сСтки Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 5 x 5. Для удобства я ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΠ» ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ячСйку Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ Π±ΡƒΠΊΠ²ΠΎΠΉ.
ΠŸΡ€ΠΎΡΡ‚Π°Ρ сСтка.

Π‘Π°ΠΌΠΎΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ сдСлаСм β€” это прСдставим эту срСду Π² Π²ΠΈΠ΄Π΅ Π³Ρ€Π°Ρ„Π°. Π― Π½Π΅ Π±ΡƒΠ΄Ρƒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΠ±ΡŠΡΡΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Ρ€Π°Ρ„; Ссли Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ просто, Ρ‚ΠΎ это Π½Π°Π±ΠΎΡ€ ΠΊΡ€ΡƒΠΆΠΊΠΎΠ², соСдинённых стрСлками. ΠšΡ€ΡƒΠΆΠΊΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Β«ΡƒΠ·Π»Π°ΠΌΠΈΒ», Π° стрСлки β€” Β«Ρ€Ρ‘Π±Ρ€Π°ΠΌΠΈΒ».

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΠ·Π΅Π» прСдставляСт собой «состояниС», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ пСрсонаТ. Π’ нашСм случаС состояниС пСрсонаТа β€” это Π΅Π³ΠΎ позиция, поэтому ΠΌΡ‹ создаём ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΡƒΠ·Π»Ρƒ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ячСйки сСтки:


Π£Π·Π»Ρ‹, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΠΈΠ΅ ячСйки сСтки.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Ρ€Ρ‘Π±Ρ€Π°. Они ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ состояния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ Β«Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒΒ» ΠΈΠ· ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ состояния; Π² нашСм случаС ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ ΠΈΠ· любой ячСйки Π² сосСднюю, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ…:


Π”ΡƒΠ³ΠΈ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ допустимыС пСрСмСщСния ΠΌΠ΅ΠΆΠ΄Ρƒ ячСйками сСтки.

Если ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ ΠΈΠ· A Π² B, Ρ‚ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ B являСтся «сосСдним» с A ΡƒΠ·Π»ΠΎΠΌ.

Π‘Ρ‚ΠΎΠΈΡ‚ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ€Ρ‘Π±Ρ€Π° ΠΈΠΌΠ΅ΡŽΡ‚ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅; Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Ρ€Ρ‘Π±Ρ€Π° ΠΈ ΠΈΠ· A Π² B, ΠΈ ΠΈΠ· B Π² A. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ излишним, Π½ΠΎ Π½Π΅ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ слоТныС «состояния». НапримСр, пСрсонаТ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΏΠ°ΡΡ‚ΡŒ с ΠΊΡ€Ρ‹ΡˆΠΈ Π½Π° ΠΏΠΎΠ», Π½ΠΎ Π½Π΅ способСн Π΄ΠΎΠΏΡ€Ρ‹Π³Π½ΡƒΡ‚ΡŒ с ΠΏΠΎΠ»Π° Π½Π° ΠΊΡ€Ρ‹ΡˆΡƒ. МоТно ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΈΠ· состояния Β«ΠΆΠΈΠ²Β» Π² состояниС Β«ΠΌΡ‘Ρ€Ρ‚Π²Β», Π½ΠΎ Π½Π΅ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. И Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€


Допустим, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒΡΡ ΠΈΠ· A Π² T. ΠœΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ с A. МоТно ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ€ΠΎΠ²Π½ΠΎ Π΄Π²Π° дСйствия: ΠΏΡ€ΠΎΠΉΡ‚ΠΈ Π² B ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ Π² F.

Допустим, ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΠ»ΠΈΡΡŒ Π² B. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΄Π²Π° дСйствия: Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ Π² A ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² C. ΠœΡ‹ ΠΏΠΎΠΌΠ½ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΈ Π² A ΠΈ рассматривали Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π²Ρ‹Π±ΠΎΡ€Π° Ρ‚Π°ΠΌ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ смысла Π΄Π΅Π»Π°Ρ‚ΡŒ это снова (ΠΈΠ½Π°Ρ‡Π΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ вСсь дСнь Π½Π° пСрСмСщСния A β†’ B β†’ A β†’ B…). ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ ΠΏΠΎΠΉΠ΄Ρ‘ΠΌ Π² C.

ΠΠ°Ρ…ΠΎΠ΄ΡΡΡŒ Π² C, Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ Π½Π°ΠΌ Π½Π΅ΠΊΡƒΠ΄Π°. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ Π² B бСссмыслСнно, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ это Ρ‚ΡƒΠΏΠΈΠΊ. Π’Ρ‹Π±ΠΎΡ€ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π² B, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ Π² A, Π±Ρ‹Π» ΠΏΠ»ΠΎΡ…ΠΎΠΉ ΠΈΠ΄Π΅Π΅ΠΉ; Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, стоит ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ вмСсто Π½Π΅Π³ΠΎ F?

ΠœΡ‹ просто ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ этот процСсс, ΠΏΠΎΠΊΠ° Π½Π΅ окаТСмся Π² T. Π’ этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΡ‹ просто воссоздадим ΠΏΡƒΡ‚ΡŒ ΠΈΠ· A, Π²Π΅Ρ€Π½ΡƒΠ²ΡˆΠΈΡΡŒ ΠΏΠΎ своим шагам. ΠœΡ‹ находимся Π² T; ΠΊΠ°ΠΊ ΠΌΡ‹ Ρ‚ΡƒΠ΄Π° Π΄ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ? Из O? Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ½Π΅Ρ† ΠΏΡƒΡ‚ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄ O β†’ T. Как ΠΌΡ‹ Π΄ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ Π² O? И Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Π£Ρ‡Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ ΠΌΡ‹ Π½Π΅ двиТСмся; всё это Π±Ρ‹Π»ΠΎ лишь мыслСнным процСссом. ΠœΡ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ ΡΡ‚ΠΎΡΡ‚ΡŒ Π² A, ΠΈ Π½Π΅ сдвинСмся ΠΈΠ· Π½Π΅Ρ‘, ΠΏΠΎΠΊΠ° Π½Π΅ Π½Π°ΠΉΠ΄Ρ‘ΠΌ ΠΏΡƒΡ‚ΡŒ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ. Когда я Π³ΠΎΠ²ΠΎΡ€ΡŽ Β«ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΠ»ΠΈΡΡŒ Π² BΒ», Ρ‚ΠΎ имСю Π² Π²ΠΈΠ΄Ρƒ Β«ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΠ»ΠΈΡΡŒ Π² BΒ».

ΠžΠ±Ρ‰ΠΈΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ


Π­Ρ‚ΠΎΡ‚ Ρ€Π°Π·Π΄Π΅Π» β€” самая ваТная Ρ‡Π°ΡΡ‚ΡŒ всСй ΡΡ‚Π°Ρ‚ΡŒΠΈ. Π’Π°ΠΌ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π΅Π³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΌΠ΅Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ поиск ΠΏΡƒΡ‚ΠΈ; ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ (Π² Ρ‚ΠΎΠΌ числС ΠΈ A*) β€” это просто Π΄Π΅Ρ‚Π°Π»ΠΈ. Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΠΉΠΌΡ‘Ρ‚Π΅ смысл.

К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ этот Ρ€Π°Π·Π΄Π΅Π» нСвСроятно прост.

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Ρ„ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ наш ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΠ² Π΅Π³ΠΎ Π² псСвдокод.

Нам Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΡƒΠ·Π»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ ΠΊΠ°ΠΊ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ ΠΈΠ· Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°. Π’ Π½Π°Ρ‡Π°Π»Π΅ это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΠ·Π΅Π», Π½ΠΎ Π² процСссС «исслСдования» сСтки ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΡƒΠ·Π½Π°Π²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π΄ΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π΄ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΡƒΠ·Π»ΠΎΠ². Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Π·ΠΎΠ²Ρ‘ΠΌ этот список ΡƒΠ·Π»ΠΎΠ² reachable:

reachable = [start_node]

Π’Π°ΠΊΠΆΠ΅ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ рассмотрСнныС ΡƒΠ·Π»Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ… снова. Назовём ΠΈΡ… explored:
explored = []

Π”Π°Π»ΡŒΡˆΠ΅ я ΠΈΠ·Π»ΠΎΠΆΡƒ ядро Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°: Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ шагС поиска ΠΌΡ‹ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡƒΠ·Π»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ, ΠΈ смотрим, Π΄ΠΎ ΠΊΠ°ΠΊΠΈΡ… Π½ΠΎΠ²Ρ‹Ρ… ΡƒΠ·Π»ΠΎΠ² ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ ΠΈΠ· Π½Π΅Π³ΠΎ. Если ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ, ΠΊΠ°ΠΊ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ (Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ) ΡƒΠ·Π»Π°, Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡Π° Ρ€Π΅ΡˆΠ΅Π½Π°! Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΌΡ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ поиск.

Π’Π°ΠΊ просто, Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ Ρ€Π°Π·ΠΎΡ‡Π°Ρ€ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚? И это Π²Π΅Ρ€Π½ΠΎ. Но ΠΈΠ· этого ΠΈ состоит вСсь Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ. Π”Π°Π²Π°ΠΉΡ‚Π΅ запишСм Π΅Π³ΠΎ пошагово псСвдокодом.

ΠœΡ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ ΠΈΡΠΊΠ°Ρ‚ΡŒ, ΠΏΠΎΠΊΠ° ΠΈΠ»ΠΈ Π½Π΅ добСрёмся Π΄ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° (Π² этом случаС ΠΌΡ‹ нашли ΠΏΡƒΡ‚ΡŒ ΠΈΠ· Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ ΡƒΠ·Π΅Π»), ΠΈΠ»ΠΈ ΠΏΠΎΠΊΠ° Ρƒ нас Π½Π΅ закончатся ΡƒΠ·Π»Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ поиск (Π² Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΌΠ΅ΠΆΠ΄Ρƒ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌ ΡƒΠ·Π»Π°ΠΌΠΈ ΠΏΡƒΡ‚ΠΈ Π½Π΅Ρ‚).

while reachable is not empty:

ΠœΡ‹ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡƒΠ·Π»ΠΎΠ², Π΄ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ Π΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ, ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΊΠ° Π½Π΅ исслСдован:
    node = choose_node(reachable)

Если ΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ ΡƒΠ·Π½Π°Π»ΠΈ, ΠΊΠ°ΠΊ Π΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π΄ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°, Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°! Нам просто Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΡƒΡ‚ΡŒ, слСдуя ΠΏΠΎ ссылкам previous ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΊ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΡƒΠ·Π»Ρƒ:
    if node == goal_node:
       path = []
       while node != None:
            path.add(node)
            node = node.previous
        
        return path

НСт смысла Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΡƒΠ·Π΅Π» большС ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π°, поэтому ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ это ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ:
    reachable.remove(node)
    explored.add(node)

ΠœΡ‹ опрСдСляСм ΡƒΠ·Π»Ρ‹, Π΄ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ΡΡŽΠ΄Π°. НачинаСм со списка ΡƒΠ·Π»ΠΎΠ², сосСдних с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ, ΠΈ удаляСм Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΡƒΠΆΠ΅ исслСдовали:
    new_reachable = get_adjacent_nodes(node) - explored

ΠœΡ‹ Π±Π΅Ρ€Ρ‘ΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ…:
    for adjacent in new_reachable:

Если ΠΌΡ‹ ΡƒΠΆΠ΅ Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ ΡƒΠ·Π»Π°, Ρ‚ΠΎ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅ΠΌ Π΅Π³ΠΎ. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС добавляСм Π΅Π³ΠΎ Π² список reachable, отслСТивая, ΠΊΠ°ΠΊ Π² Π½Π΅Π³ΠΎ ΠΏΠΎΠΏΠ°Π»ΠΈ:
        if adjacent not in reachable:
            adjacent.previous = node  # Remember how we got there.
            reachable.add(adjacent)

НахоТдСниС ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° β€” это ΠΎΠ΄ΠΈΠ½ ΠΈΠ· способов Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Ρ†ΠΈΠΊΠ»Π°. Π’Ρ‚ΠΎΡ€ΠΎΠΉ β€” это ΠΊΠΎΠ³Π΄Π° reachable становится пустым: Ρƒ нас Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈΡΡŒ ΡƒΠ·Π»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈ ΠΌΡ‹ Π½Π΅ достигли ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΈΠ· Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ ΡƒΠ·Π΅Π» ΠΏΡƒΡ‚ΠΈ Π½Π΅Ρ‚:
return None

Π˜β€¦ Π½Π° этом всё. Π­Ρ‚ΠΎ вСсь Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, Π° ΠΊΠΎΠ΄ построСния ΠΏΡƒΡ‚ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄:
function find_path (start_node, end_node):
    reachable = [start_node]
    explored = []

    while reachable is not empty:
        # Choose some node we know how to reach.
        node = choose_node(reachable)

        # If we just got to the goal node, build and return the path.
        if node == goal_node:
            return build_path(goal_node)

        # Don't repeat ourselves.
        reachable.remove(node)
        explored.add(node)

        # Where can we get from here?
        new_reachable = get_adjacent_nodes(node) - explored
        for adjacent in new_reachable:
            if adjacent not in reachable
                adjacent.previous = node  # Remember how we got there.
                reachable.add(adjacent)

    # If we get here, no path was found :(
    return None

Π’ΠΎΡ‚ функция, которая строит ΠΏΡƒΡ‚ΡŒ, слСдуя ΠΏΠΎ ссылкам previous ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΊ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΡƒΠ·Π»Ρƒ:
function build_path (to_node):
    path = []
    while to_node != None:
        path.add(to_node)
        to_node = to_node.previous
    return path

Π’ΠΎΡ‚ ΠΈ всё. Π­Ρ‚ΠΎ псСвдокод ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° поиска ΠΏΡƒΡ‚ΠΈ, Π² Ρ‚ΠΎΠΌ числС ΠΈ A*.

ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡ‚Ρ‹Π²Π°ΠΉΡ‚Π΅ этот Ρ€Π°Π·Π΄Π΅Π», ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΠΉΠΌΡ‘Ρ‚Π΅, ΠΊΠ°ΠΊ всё Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΈ, Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ всё Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. ИдСально Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π½Π° Π±ΡƒΠΌΠ°Π³Π΅, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ Π΄Π΅ΠΌΠΎ:

Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ Π΄Π΅ΠΌΠΎ


Π’ΠΎΡ‚ Π΄Π΅ΠΌΠΎ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° (Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π° страницС ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π° ΡΡ‚Π°Ρ‚ΡŒΠΈ). choose_node просто Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ случайный ΡƒΠ·Π΅Π». ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ пошагово ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° список ΡƒΠ·Π»ΠΎΠ² reachable ΠΈ explored, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π° Ρ‚ΠΎ, ΠΊΡƒΠ΄Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ссылки previous.
Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ поиск Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ обнаруТиваСтся ΠΏΡƒΡ‚ΡŒ; ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠ·Π»Ρ‹ Π΄Π°ΠΆΠ΅ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅


ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ здСсь Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ β€” это ΠΎΠ±Ρ‰ΠΈΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ для любого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° поиска ΠΏΡƒΡ‚ΠΈ.

Но Ρ‡Ρ‚ΠΎ ΠΆΠ΅ ΠΎΡ‚Π»ΠΈΡ‡Π°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ A* β€” это A*?

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

Π§Π°ΡΡ‚ΡŒ 2. Π‘Ρ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΠΈ поиска


Если Π²Ρ‹ Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ поняли описанный Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, Ρ‚ΠΎ Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ΡΡŒ ΠΊ Π½Π΅ΠΌΡƒ ΠΈ ΠΏΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ Π·Π°Π½ΠΎΠ²ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ для понимания дальнСйшСй ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Когда Π²Ρ‹ Π² Π½Ρ‘ΠΌ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘Ρ‚Π΅ΡΡŒ, A* покаТСтся Π²Π°ΠΌ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ СстСствСнным ΠΈ Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ.

Π‘Π΅ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚


Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ части я оставил ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ Π΄Π²Π° вопроса: Ссли ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ поиска ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠ΄, ΠΏΠΎΡ‡Π΅ΠΌΡƒ A* Π²Π΅Π΄Ρ‘Ρ‚ сСбя ΠΊΠ°ΠΊ A*? И ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π΄Π΅ΠΌΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ?

ΠžΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° ΠΎΠ±Π° вопроса связаны Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ. Π₯ΠΎΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π·Π°Π΄Π°Π½, я оставил нСраскрытым ΠΎΠ΄ΠΈΠ½ аспСкт, ΠΈ ΠΊΠ°ΠΊ оказываСтся, ΠΎΠ½ являСтся ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ для объяснСния повСдСния Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² поиска:

node = choose_node(reachable)

ИмСнно эта Π½Π΅Π²ΠΈΠ½Π½ΠΎ выглядящая строка ΠΎΡ‚Π»ΠΈΡ‡Π°Π΅Ρ‚ всС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ поиска Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°. ΠžΡ‚ способа Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ choose_node зависит всё.

Π’Π°ΠΊ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΆΠ΅ Π΄Π΅ΠΌΠΎ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ? ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ choose_node Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ ΡƒΠ·Π΅Π» случайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

Π”Π»ΠΈΠ½Π° ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅


ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΠΎΠ³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ Π² различия ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ choose_node, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π² описанном Π²Ρ‹ΡˆΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ нСбольшой нСдосмотр.

Когда ΠΌΡ‹ рассматривали ΡƒΠ·Π»Ρ‹, сосСдниС с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ, Ρ‚ΠΎ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΆΠ΅ Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ:

if adjacent not in reachable:
    adjacent.previous = node  # Remember how we got there.
    reachable.add(adjacent)

Π­Ρ‚ΠΎ ошибка: Ρ‡Ρ‚ΠΎ Ссли ΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΈ Π»ΡƒΡ‡ΡˆΠΈΠΉ способ Π΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π΄ΠΎ Π½Π΅Π³ΠΎ? Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ссылку previous ΡƒΠ·Π»Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Ρ€Π°Π·ΠΈΡ‚ΡŒ этот Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ ΠΏΡƒΡ‚ΡŒ.

Π§Ρ‚ΠΎΠ±Ρ‹ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ ΠΏΡƒΡ‚ΠΈ ΠΎΡ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° Π΄ΠΎ любого достиТимого ΡƒΠ·Π»Π°. ΠœΡ‹ Π½Π°Π·ΠΎΠ²Ρ‘ΠΌ это ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΡŽ (cost) ΠΏΡƒΡ‚ΠΈ. Пока ΠΏΡ€ΠΈΠΌΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΈΠ· ΡƒΠ·Π»Π° Π² ΠΎΠ΄ΠΈΠ½ ΠΈΠ· сосСдних ΡƒΠ·Π»ΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΡΡ‚ΠΎΡΠ½Π½ΡƒΡŽ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ, Ρ€Π°Π²Π½ΡƒΡŽ 1.

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ поиск, ΠΌΡ‹ присвоим Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ cost ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ infinity; благодаря этому любой ΠΏΡƒΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΡ€ΠΎΡ‡Π΅ этого. Π’Π°ΠΊΠΆΠ΅ ΠΌΡ‹ присвоим cost ΡƒΠ·Π»Π° start_node Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0.

Π’ΠΎΠ³Π΄Π° Π²ΠΎΡ‚ ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΊΠΎΠ΄:

if adjacent not in reachable:
    reachable.add(adjacent)

# If this is a new path, or a shorter path than what we have, keep it.
if node.cost + 1 < adjacent.cost:
    adjacent.previous = node
    adjacent.cost = node.cost + 1

Одинаковая ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ поиска


Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим ΠΌΠ΅Ρ‚ΠΎΠ΄ choose_node. Если ΠΌΡ‹ стрСмимся Π½Π°ΠΉΡ‚ΠΈ ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠΈΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ, Ρ‚ΠΎ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ ΡƒΠ·Π΅Π» случайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ β€” Π½Π΅ самая Π»ΡƒΡ‡ΡˆΠ°Ρ идСя.

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

Π’ΠΎΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ choose_node:

function choose_node (reachable):
    best_node = None

    for node in reachable:
        if best_node == None or best_node.cost > node.cost:
            best_node = node
    
    return best_node

Π˜Π½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ понятно, Ρ‡Ρ‚ΠΎ поиск этого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ΡΡ Β«Ρ€Π°Π΄ΠΈΠ°Π»ΡŒΠ½ΠΎΒ» ΠΎΡ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°, ΠΏΠΎΠΊΠ° Π½Π΅ достигнСт ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ. Π’ΠΎΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ Π΄Π΅ΠΌΠΎ Ρ‚Π°ΠΊΠΎΠ³ΠΎ повСдСния:

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅


ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² способС Π²Ρ‹Π±ΠΎΡ€Π° рассматриваСмого ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΡƒΠ·Π»Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π½Π°ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ достаточно Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ: ΠΎΠ½ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠΈΠΉ ΠΏΡƒΡ‚ΡŒ ΠΎΡ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π΄ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°.

Но этот Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ всё Ρ€Π°Π²Π½ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ стСпСни остаётся Β«Π³Π»ΡƒΠΏΡ‹ΠΌΒ». Он ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΏΠΎΠ²ΡΡŽΠ΄Ρƒ, ΠΏΠΎΠΊΠ° Π½Π΅ наткнётся Π½Π° ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ ΡƒΠ·Π΅Π». НапримСр, ΠΊΠ°ΠΊΠΎΠΉ смысл Π² ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ поиск Π² Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ A, Ссли ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ отдаляСмся ΠΎΡ‚ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°?

МоТно Π»ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ choose_node ΡƒΠΌΠ½Π΅Π΅? МоТСм Π»ΠΈ ΠΌΡ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ направлял поиск Π² сторону ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°, Π΄Π°ΠΆΠ΅ Π½Π΅ зная Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ?

ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ β€” Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ части ΠΌΡ‹ Π½Π°ΠΊΠΎΠ½Π΅Ρ†-Ρ‚ΠΎ Π΄ΠΎΠΉΠ΄Ρ‘ΠΌ Π΄ΠΎ choose_node, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅ΠΉ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ поиска ΠΏΡƒΡ‚ΠΈ Π² A*.

Π§Π°ΡΡ‚ΡŒ 3. Π‘Π½ΠΈΠΌΠ°Π΅ΠΌ завСсу Ρ‚Π°ΠΉΠ½Ρ‹ с A*


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

Π’ΠΎΠ»ΡˆΠ΅Π±Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ


ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ запускаСм Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ поиска Π½Π° особом ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ с Ρ‡ΠΈΠΏΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π²ΠΎΡ€ΠΈΡ‚ΡŒ магию. Благодаря этому ΠΏΠΎΡ‚Ρ€ΡΡΠ°ΡŽΡ‰Π΅ΠΌΡƒ Ρ‡ΠΈΠΏΡƒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒ choose_node ΠΎΡ‡Π΅Π½ΡŒ простым способом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ создаст ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠΈΠΉ ΠΏΡƒΡ‚ΡŒ, Π½Π΅ тСряя Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° исслСдованиС частичных ΠΏΡƒΡ‚Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΠΈΠΊΡƒΠ΄Π° Π½Π΅ Π²Π΅Π΄ΡƒΡ‚:
function choose_node (reachable):
    return magic(reachable, "любой ΡƒΠ·Π΅Π», ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Π½Π° ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠ΅ΠΌ ΠΏΡƒΡ‚ΠΈ")

Π—Π²ΡƒΡ‡ΠΈΡ‚ ΡΠΎΠ±Π»Π°Π·Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π½ΠΎ магичСским Ρ‡ΠΈΠΏΠ°ΠΌ всё Ρ€Π°Π²Π½ΠΎ трСбуСтся ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ ΠΊΠΎΠ΄. Π’ΠΎΡ‚ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ аппроксимация:
function choose_node (reachable):
    min_cost = infinity
    best_node = None

    for node in reachable:
        cost_start_to_node = node.cost
        cost_node_to_goal = magic(node, "ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠΈΠΉ ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ†Π΅Π»ΠΈ")
        total_cost = cost_start_to_node + cost_node_to_goal

        if min_cost > total_cost:
            min_cost = total_cost
            best_node = node

    return best_node

Π­Ρ‚ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ способ Π²Ρ‹Π±ΠΎΡ€Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΡƒΠ·Π»Π°: Π²Ρ‹ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΡƒΠ·Π΅Π», Π΄Π°ΡŽΡ‰ΠΈΠΉ Π½Π°ΠΌ ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠΈΠΉ ΠΏΡƒΡ‚ΡŒ ΠΎΡ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π΄ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ ΠΈ Π½ΡƒΠΆΠ½ΠΎ.

Π’Π°ΠΊΠΆΠ΅ ΠΌΡ‹ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ количСство ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ ΠΌΠ°Π³ΠΈΠΈ: ΠΌΡ‹ Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊΠΎΠ²Π° ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ пСрСмСщСния ΠΎΡ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΡƒΠ·Π»Ρƒ (это node.cost), ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ магию Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для прСдсказания стоимости пСрСмСщСния ΠΎΡ‚ ΡƒΠ·Π»Π° ΠΊ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌΡƒ ΡƒΠ·Π»Ρƒ.

НС магичСский, Π½ΠΎ довольно ΠΏΠΎΡ‚Ρ€ΡΡΠ°ΡŽΡ‰ΠΈΠΉ A*


К соТалСнию, магичСскиС Ρ‡ΠΈΠΏΡ‹ β€” это Π½ΠΎΠ²ΠΈΠ½ΠΊΠ°, Π° Π½Π°ΠΌ Π½ΡƒΠΆΠ½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΈ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅Π³ΠΎ оборудования. Π‘ΠžΠ»ΡŒΡˆΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° нас устраиваСт, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ этой строки:
# Throws MuggleProcessorException
cost_node_to_goal = magic(node, "ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠΈΠΉ ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ†Π΅Π»ΠΈ")

Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ магию, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ Π΅Ρ‰Ρ‘ Π½Π΅ исслСдованного ΠΏΡƒΡ‚ΠΈ. Ну Π»Π°Π΄Π½ΠΎ, Ρ‚ΠΎΠ³Π΄Π° Π΄Π°Π²Π°ΠΉΡ‚Π΅ сдСлаСм ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·. Π‘ΡƒΠ΄Π΅ΠΌ оптимистичными ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌ ΡƒΠ·Π»Π°ΠΌΠΈ Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ, ΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ просто Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ напрямик:
cost_node_to_goal = distance(node, goal_node)

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠΈΠΉ ΠΏΡƒΡ‚ΡŒ ΠΈ минимальноС расстояниС Ρ€Π°Π·Π½Ρ‹Π΅: минимальноС расстояниС ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌ ΡƒΠ·Π»Π°ΠΌΠΈ Π½Π΅Ρ‚ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… прСпятствий.

Π­Ρ‚Ρƒ ΠΎΡ†Π΅Π½ΠΊΡƒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ достаточно просто. Π’ Π½Π°ΡˆΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… с сСтками это расстояниС городских ΠΊΠ²Π°Ρ€Ρ‚Π°Π»ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ двумя ΡƒΠ·Π»Π°ΠΌΠΈ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ abs(Ax - Bx) + abs(Ay - By)). Если Π±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ ΠΏΠΎ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ, Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Ρ€Π°Π²Π½ΠΎ sqrt( (Ax - Bx)^2 + (Ay - By)^2 ), ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π‘Π°ΠΌΠΎΠ΅ Π²Π°ΠΆΠ½ΠΎΠ΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ слишком Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΠΎΡ†Π΅Π½ΠΊΡƒ стоимости.

Π˜Ρ‚Π°ΠΊ, Π²ΠΎΡ‚ нСмагичСская вСрсия choose_node:

function choose_node (reachable):
    min_cost = infinity
    best_node = None

    for node in reachable:
        cost_start_to_node = node.cost
        cost_node_to_goal = estimate_distance(node, goal_node)
        total_cost = cost_start_to_node + cost_node_to_goal

        if min_cost > total_cost:
            min_cost = total_cost
            best_node = node

    return best_node

Ѐункция, ΠΎΡ†Π΅Π½ΠΈΠ²Π°ΡŽΡ‰Π°Ρ расстояниС ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π΄ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°, называСтся эвристикой, ΠΈ этот Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ поиска, Π»Π΅Π΄ΠΈ ΠΈ Π΄ΠΆΠ΅Π½Ρ‚Π»ΡŒΠΌΠ΅Π½Ρ‹, называСтся … A*.

Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ Π΄Π΅ΠΌΠΎ


Пока Π²Ρ‹ ΠΎΠΏΡ€Π°Π²Π»ΡΠ΅Ρ‚Π΅ΡΡŒ ΠΎΡ‚ шока, Π²Ρ‹Π·Π²Π°Π½Π½ΠΎΠ³ΠΎ осознаниСм Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π·Π°Π³Π°Π΄ΠΎΡ‡Π½Ρ‹ΠΉ A* Π½Π° самом Π΄Π΅Π»Π΅ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ прост, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° Π΄Π΅ΠΌΠΎ (ΠΈΠ»ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ). Π’Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, поиск Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ°Π»ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π² Π½Π΅Π²Π΅Ρ€Π½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅


НаконСц-Ρ‚ΠΎ ΠΌΡ‹ дошли Π΄ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° A*, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся Π½Π΅ Ρ‡Π΅ΠΌ ΠΈΠ½Ρ‹ΠΌ, ΠΊΠ°ΠΊ описанным Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ части ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΎΠ±Ρ‰ΠΈΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ поиска с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΡΠΌΠΈ, описанными Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ части, ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ choose_node, которая Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ ΡƒΠ·Π΅Π», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎ нашСй ΠΎΡ†Π΅Π½ΠΊΠ΅ ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ°Π΅Ρ‚ нас ΠΊ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌΡƒ ΡƒΠ·Π»Ρƒ. Π’ΠΎΡ‚ ΠΈ всё.

Π’ΠΎΡ‚ Π²Π°ΠΌ для справки ΠΏΠΎΠ»Π½Ρ‹ΠΉ псСвдокод основного ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

function find_path (start_node, end_node):
    reachable = [start_node]
    explored = []

    while reachable is not empty:
        # Choose some node we know how to reach.
        node = choose_node(reachable)

        # If we just got to the goal node, build and return the path.
        if node == goal_node:
            return build_path(goal_node)

        # Don't repeat ourselves.
        reachable.remove(node)
        explored.add(node)

        # Where can we get from here that we haven't explored before?
        new_reachable = get_adjacent_nodes(node) - explored
        for adjacent in new_reachable:
            # First time we see this node?
            if adjacent not in reachable:
                reachable.add(adjacent)
        
            # If this is a new path, or a shorter path than what we have, keep it.
            if node.cost + 1 < adjacent.cost:
                adjacent.previous = node
                adjacent.cost = node.cost + 1

    # If we get here, no path was found :(
    return None

ΠœΠ΅Ρ‚ΠΎΠ΄ build_path:
function build_path (to_node):
    path = []
    while to_node != None:
        path.add(to_node)
        to_node = to_node.previous
    return path

А Π²ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ choose_node, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ Π² A*:
function choose_node (reachable):
    min_cost = infinity
    best_node = None

    for node in reachable:
        cost_start_to_node = node.cost
        cost_node_to_goal = estimate_distance(node, goal_node)
        total_cost = cost_start_to_node + cost_node_to_goal

        if min_cost > total_cost:
            min_cost = total_cost
            best_node = node

    return best_node

Π’ΠΎΡ‚ ΠΈ всё.

А Π·Π°Ρ‡Π΅ΠΌ ΠΆΠ΅ Π½ΡƒΠΆΠ½Π° Ρ‡Π°ΡΡ‚ΡŒ 4?

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ поняли, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ A*, я Ρ…ΠΎΡ‡Ρƒ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΡ‚Ρ€ΡΡΠ°ΡŽΡ‰ΠΈΡ… областях Π΅Π³ΠΎ примСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ поиском ΠΏΡƒΡ‚Π΅ΠΉ Π² сСткС ячССк.

Π§Π°ΡΡ‚ΡŒ 4. A* Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅


ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Ρ‚Ρ€ΠΈ части ΡΡ‚Π°Ρ‚ΡŒΠΈ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с самых основ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² поиска ΠΏΡƒΡ‚Π΅ΠΉ ΠΈ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‡Ρ‘Ρ‚ΠΊΠΈΠΌ описаниСм Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° A*. Всё это Π·Π΄ΠΎΡ€ΠΎΠ²ΠΎ Π² Ρ‚Π΅ΠΎΡ€ΠΈΠΈ, Π½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ это ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ β€” ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ другая Ρ‚Π΅ΠΌΠ°.

НапримСр, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚, Ссли наш ΠΌΠΈΡ€ Π½Π΅ являСтся сСткой?

Π§Ρ‚ΠΎ Ссли пСрсонаТ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ ΠΏΠΎΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π½Π° 90 градусов?

Как ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π³Ρ€Π°Ρ„, Ссли ΠΌΠΈΡ€ бСсконСчСн?

Π§Ρ‚ΠΎ Ссли нас Π½Π΅ Π²ΠΎΠ»Π½ΡƒΠ΅Ρ‚ Π΄Π»ΠΈΠ½Π° ΠΏΡƒΡ‚ΠΈ, Π½ΠΎ ΠΌΡ‹ зависим ΠΎΡ‚ солнСчной энСргии ΠΈ Π½Π°ΠΌ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ большС Π½ΡƒΠΆΠ½ΠΎ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ΄ солнСчным свСтом?

Как Π½Π°ΠΉΡ‚ΠΈ ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠΈΠΉ ΠΏΡƒΡ‚ΡŒ ΠΊ Π»ΡŽΠ±ΠΎΠΌΡƒ ΠΈΠ· Π΄Π²ΡƒΡ… ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… ΡƒΠ·Π»ΠΎΠ²?

Ѐункция стоимости


Π’ ΠΏΠ΅Ρ€Π²Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΌΡ‹ искали ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠΈΠΉ ΠΏΡƒΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌ ΡƒΠ·Π»Π°ΠΌΠΈ. Однако вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ частичныС Π΄Π»ΠΈΠ½Ρ‹ ΠΏΡƒΡ‚Π΅ΠΉ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ length, ΠΌΡ‹ Π½Π°Π·Π²Π°Π»ΠΈ Π΅Ρ‘ cost. ΠŸΠΎΡ‡Π΅ΠΌΡƒ?

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ A* ΠΈΡΠΊΠ°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠΈΠΉ, Π½ΠΎ ΠΈ Π»ΡƒΡ‡ΡˆΠΈΠΉ ΠΏΡƒΡ‚ΡŒ, ΠΏΡ€ΠΈΡ‡Ρ‘ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Β«Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎΒ» ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ, исходя ΠΈΠ· Π½Π°ΡˆΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ. Когда Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠΈΠΉ ΠΏΡƒΡ‚ΡŒ, ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΡŽ являСтся Π΄Π»ΠΈΠ½Π° ΠΏΡƒΡ‚ΠΈ, Π½ΠΎ Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠΏΠ»ΠΈΠ²Π°, Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС стоимости ΠΈΠΌΠ΅Π½Π½ΠΎ Π΅Π³ΠΎ. Если ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎ максимуму ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ «врСмя, ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠΌΠΎΠ΅ ΠΏΠΎΠ΄ солнцСм», Ρ‚ΠΎ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ β€” это врСмя, ΠΏΡ€ΠΎΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ΅ Π±Π΅Π· солнца. И Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ Ρ€Π΅Π±Ρ€ΠΎΠΌ Π³Ρ€Π°Ρ„Π° связаны ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹. Π’ ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ задавалась нСявно ΠΈ ΡΡ‡ΠΈΡ‚Π°Π»Π°ΡΡŒ всСгда Ρ€Π°Π²Π½ΠΎΠΉ 1, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ считали шаги Π½Π° ΠΏΡƒΡ‚ΠΈ. Но ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ Ρ€Π΅Π±Ρ€Π° Π² соотвСтствии с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

Ѐункция критСрия


Допустим, наш ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ β€” это Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒ, ΠΈ Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π΄ΠΎ Π·Π°ΠΏΡ€Π°Π²ΠΊΠΈ. Нас устроит любая Π·Π°ΠΏΡ€Π°Π²ΠΊΠ°. ВрСбуСтся ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠΈΠΉ ΠΏΡƒΡ‚ΡŒ Π΄ΠΎ блиТайшСй АЗБ.

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

Π§Ρ‚ΠΎ Ссли Π±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ goal_node Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ ΡƒΠ·Π»Ρƒ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ Ρ‚ΠΎΡ‚ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌ ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Благодаря этому ΠΌΡ‹ смоТСм ΠΈΡΠΊΠ°Ρ‚ΡŒ нСсколько Ρ†Π΅Π»Π΅ΠΉ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Π’Π°ΠΊΠΆΠ΅ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ эвристику, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π»Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π΅ΠΌΡƒΡŽ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… ΡƒΠ·Π»ΠΎΠ².

Π’ зависимости ΠΎΡ‚ спСцифики ситуации ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈ Π½Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ возмоТности Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ Ρ†Π΅Π»ΠΈ идСально, ΠΈΠ»ΠΈ это Π±ΡƒΠ΄Π΅Ρ‚ слишком ΠΌΠ½ΠΎΠ³ΠΎ ΡΡ‚ΠΎΠΈΡ‚ΡŒ (Ссли ΠΌΡ‹ отправляСм пСрсонаТа Ρ‡Π΅Ρ€Π΅Π· ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρƒ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚Ρ‹, Ρ‚Π°ΠΊ Π»ΠΈ Π²Π°ΠΆΠ½Π° Ρ€Π°Π·Π½ΠΈΡ†Π° Π² ΠΎΠ΄ΠΈΠ½ дюйм?), поэтому ΠΌΠ΅Ρ‚ΠΎΠ΄ is_goal_node ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ true, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ находимся «достаточно Π±Π»ΠΈΠ·ΠΊΠΎΒ».

Полная ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΡΡ‚ΡŒ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°


ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΌΠΈΡ€Π° Π² Π²ΠΈΠ΄Π΅ дискрСтной сСтки ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСдостаточным для ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΈΠ³Ρ€. Π’ΠΎΠ·ΡŒΠΌΡ‘ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡˆΡƒΡ‚Π΅Ρ€ ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π»ΠΈΡ†Π° ΠΈΠ»ΠΈ Π³ΠΎΠ½ΠΎΡ‡Π½ΡƒΡŽ ΠΈΠ³Ρ€Ρƒ. ΠœΠΈΡ€ дискрСтСн, Π½ΠΎ Π΅Π³ΠΎ нСльзя ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ сСтки.

Но Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΈ ΠΏΠΎΡΠ΅Ρ€ΡŒΡ‘Π·Π½Π΅ΠΉ: Ρ‡Ρ‚ΠΎ Ссли ΠΌΠΈΡ€ бСсконСчСн? Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС, Π΄Π°ΠΆΠ΅ Ссли ΠΌΡ‹ смоТСм ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² Π²ΠΈΠ΄Π΅ сСтки, Ρ‚ΠΎ Ρƒ нас просто Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ возмоТности ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ сСткС Π³Ρ€Π°Ρ„, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ бСсконСчным.

Однако Π½Π΅ всё потСряно. РазумССтся, для Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° поиска ΠΏΠΎ Π³Ρ€Π°Ρ„Π°ΠΌ Π½Π°ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎ Π½ΡƒΠΆΠ΅Π½ Π³Ρ€Π°Ρ„. Но Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ», Ρ‡Ρ‚ΠΎ Π³Ρ€Π°Ρ„ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΡ‡Π΅Ρ€ΠΏΡ‹Π²Π°ΡŽΡ‰ΠΈΠΌ!

Если Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅ΠΌ с Π³Ρ€Π°Ρ„ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ†Π΅Π»Ρ‹ΠΌ; ΠΌΡ‹ исслСдуСм Π³Ρ€Π°Ρ„ локально, получая ΡƒΠ·Π»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ ΠΈΠ· рассматриваСмого ΡƒΠ·Π»Π°. Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· Π΄Π΅ΠΌΠΎ A*, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠ·Π»Ρ‹ Π³Ρ€Π°Ρ„Π° Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ ΠΈΡΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ.

Π’Π°ΠΊ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹ Π½Π°ΠΌ просто Π½Π΅ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π³Ρ€Π°Ρ„ Π² процСссС исслСдования?

ΠœΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ пСрсонаТа Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ ΡƒΠ·Π»ΠΎΠΌ. ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ get_adjacent_nodes ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ способы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ пСрсонаТ способСн ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒΡΡ ΠΈΠ· Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°, ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ сосСдниС ΡƒΠ·Π»Ρ‹ Π½Π° Π»Π΅Ρ‚Ρƒ.

Π—Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ Ρ‚Ρ€Ρ‘Ρ… ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ


Π”Π°ΠΆΠ΅ Ссли ваш ΠΌΠΈΡ€ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ являСтся 2D-сСткой, Π½ΡƒΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ аспСкты. НапримСр, Ρ‡Ρ‚ΠΎ Ссли пСрсонаТ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ ΠΏΠΎΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π½Π° 90 ΠΈΠ»ΠΈ 180 градусов, ΠΊΠ°ΠΊ это ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈ Π±Ρ‹Π²Π°Π΅Ρ‚?

БостояниС, прСдставляСмоС ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΡƒΠ·Π»ΠΎΠΌ поиска, Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠ΅ΠΉ; Π½Π°ΠΏΡ€ΠΎΡ‚ΠΈΠ², ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² сСбя ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎ слоТноС мноТСство Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. НапримСр, Ссли ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Ρ‹ Π½Π° 90 градусов Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΆΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, сколько ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ячСйки Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ, Ρ‚ΠΎ состояниС пСрсонаТа ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ [position, heading]. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΠ·Π΅Π» ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ пСрсонаТа, Π½ΠΎ ΠΈ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ взгляда; ΠΈ Π½ΠΎΠ²Ρ‹Π΅ Ρ€Ρ‘Π±Ρ€Π° Π³Ρ€Π°Ρ„Π° (явныС ΠΈΠ»ΠΈ косвСнныС) ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‚ это.

Если Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ исходной сСткС 5×5, Ρ‚ΠΎ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠ΅ΠΉ поиска Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ [A, East]. БосСдними ΡƒΠ·Π»Π°ΠΌΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡΠ²Π»ΡΡŽΡ‚ΡΡ [B, East] ΠΈ [A, South] β€” Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ F, Ρ‚ΠΎ сначала Π½ΡƒΠΆΠ½ΠΎ ΡΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡƒΡ‚ΡŒ ΠΎΠ±Ρ€Ρ‘Π» Π²ΠΈΠ΄ [A, East], [A, South], [F, South].

Π¨ΡƒΡ‚Π΅Ρ€ ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π»ΠΈΡ†Π°? Как ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ измСрСния: [X, Y, Z, Heading]. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Π°ΠΆΠ΅ [X, Y, Z, Heading, Health, Ammo].

Π£Ρ‡Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‡Π΅ΠΌ слоТнСС состояниС, Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ слоТной Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ эвристичСская функция. Π‘Π°ΠΌ ΠΏΠΎ сСбС A* прост; искусство часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ благодаря Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ эвристикС.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅


ЦСль этой ΡΡ‚Π°Ρ‚ΡŒΠΈ β€” Ρ€Π°Π· ΠΈ навсСгда Ρ€Π°Π·Π²Π΅ΡΡ‚ΡŒ ΠΌΠΈΡ„ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ A* β€” это Π½Π΅ΠΊΠΈΠΉ мистичСский, Π½Π΅ ΠΏΠΎΠ΄Π΄Π°ΡŽΡ‰ΠΈΠΉΡΡ Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ. Напротив, я ΠΏΠΎΠΊΠ°Π·Π°Π», Ρ‡Ρ‚ΠΎ Π² Π½Ρ‘ΠΌ Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ Π·Π°Π³Π°Π΄ΠΎΡ‡Π½ΠΎΠ³ΠΎ, ΠΈ Π½Π° самом Π΄Π΅Π»Π΅ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ довольно просто вывСсти, Π½Π°Ρ‡Π°Π² с самого нуля.

Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅Π΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅


Π£ Амита ΠŸΠ°Ρ‚Π΅Π»Π° Π΅ΡΡ‚ΡŒ прСвосходноС Β«Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ A*Β» [ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π½Π° Π₯Π°Π±Ρ€Π΅] (ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π΅Π³ΠΎ ΡΡ‚Π°Ρ‚ΡŒΠΈ Π½Π° Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚Π΅ΠΌΡ‹ Ρ‚ΠΎΠΆΠ΅ Π²Π΅Π»ΠΈΠΊΠΎΠ»Π΅ΠΏΠ½Ρ‹!).

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ β€” Π’ΠΈΠΊΠΈΡƒΡ‡Π΅Π±Π½ΠΈΠΊ

Π˜ΡΡ…ΠΎΠ΄Π½Π°Ρ вСрсия ΡΡ‚Π°Ρ‚ΡŒΠΈ (ВороТцов А.Β Π’., Β«Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ?Β») Π±Ρ‹Π»Π° ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π° Π² ΠΆΡƒΡ€Π½Π°Π»Π΅ Β«ΠŸΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»Β»

ГСомСтрия Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅Ρ‚ гСомСтричСскоС ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΠ΅, ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ° β€” абстрактноС матСматичСскоС, Π»ΠΎΠ³ΠΈΠΊΠ° β€” логичСскоС, Ρ„ΠΈΠ·ΠΈΠΊΠ° β€” физичСскоС… А ΠΊΠ°ΠΊΠΎΠ΅ ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ°? Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ° Π΅ΡΡ‚ΡŒ Π½Π°ΡƒΠΊΠ°, слуТащая ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ тСхнологиям. Но Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ достиТСниями этой Π½Π°ΡƒΠΊΠΈ оказались Π½Π΅ сами Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, Π° ΠΎΠ±Ρ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ построСния систСм ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ слоТных Π·Π°Π΄Π°Ρ‡. Базисом этих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΈ систСмный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ Π·Π°Π΄Π°Ρ‡. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ° Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅Ρ‚ алгоритмичСскоС ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΠ΅ ΠΈ ΡƒΡ‡ΠΈΡ‚ систСмному ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρƒ ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ Π·Π°Π΄Π°Ρ‡.

БСгодня ΠΌΡ‹ познакомимся с понятиями Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΈ исполнитСля. ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, Π½Π΅ Ρ‚Π°ΠΊ-Ρ‚ΠΎ просто ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Π΅ΠΌ опрСдСляСтся ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°.

ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ]

ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° β€” ΠΎΠ΄Π½ΠΎ ΠΈΠ· основных Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅[1]. Π­Ρ‚ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄, прСдназначСнная ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŽ, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΠΎΡΡ‚Π°Π²Π»Π΅Π½Π½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ. Алгоритм Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒΡΡ Π½Π° Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΌ языкС, ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅ΠΌ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ толкования. Π˜ΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ ΠΈΠ»ΠΈ машиной. Π˜ΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΌΠ΅Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ всС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΈ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ строго Π·Π°Π΄Π°Π½ΠΎ. ДСйствия, выполняСмыС ΠΏΠΎ этим ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ элСмСнтарными.

Π—Π°ΠΏΠΈΡΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π½Π° Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΌ языкС называСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ. Иногда само понятиС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° отоТдСствляСтся с Π΅Π³ΠΎ записью, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ слова Β«Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΒ» ΠΈ Β«ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Β» β€” ΠΏΠΎΡ‡Ρ‚ΠΈ синонимы. НСбольшоС Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ идСю Π΅Π³ΠΎ построСния. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΆΠ΅ всСгда связана с записью Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΌ языкС.

ΠŸΡ€ΠΈΠ²Π΅Π΄Ρ‘ΠΌ для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° простой Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ дСйствия ΠΏΠ΅ΡˆΠ΅Ρ…ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π΅ΠΌΡƒ бСзопасно ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΡƒΠ»ΠΈΡ†Ρƒ:

  1. ΠŸΠΎΠ΄ΠΎΠΉΡ‚ΠΈ ΠΊ Π΄ΠΎΡ€ΠΎΠ³Π΅.
  2. Π”ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ Π·Π΅Π»Ρ‘Π½ΠΎΠ³ΠΎ сигнала свСтофора.
  3. ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π΄ΠΎΡ€ΠΎΠ³Ρƒ.
  4. Если Π²ΠΏΠ΅Ρ€Π΅Π΄ΠΈ Π΅ΡΡ‚ΡŒ Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½Π° Π΄ΠΎΡ€ΠΎΠ³Π°, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΡˆΠ°Π³Ρƒ 1.

Алгоритмы ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ свойством дСтСрминированности (опрСдСлённости): ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ шаг ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΎΡ‚ шага ΠΊ ΡˆΠ°Π³Ρƒ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π³ΠΎ ΠΌΠΎΠ³ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ΠΈΠ»ΠΈ мСханичСскоС устройство.

ΠšΡ€ΠΎΠΌΠ΅ дСтСрминированности, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ свойством конСчности ΠΈ массовости:

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎΡΡ‚ΡŒ
Алгоритм всСгда Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π·Π° ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ число шагов, Π½ΠΎ это число Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ свСрху.
ΠœΠ°ΡΡΠΎΠ²ΠΎΡΡ‚ΡŒ
Алгоритм примСняСтся ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ классу Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… (чисСл, ΠΏΠ°Ρ€ чисСл, Π½Π°Π±ΠΎΡ€Ρƒ Π±ΡƒΠΊΠ² ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΌΡƒ). НС ΠΈΠΌΠ΅Π΅Ρ‚ смысла ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ нахоТдСния наибольшСго ΠΎΠ±Ρ‰Π΅Π³ΠΎ дСлитСля Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°Ρ€Ρ‹ чисСл 10 ΠΈ 15.

Поясним эти свойства Π½Π° простом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ вычислСния числа Ο€{\displaystyle \pi }: Ο€=4(1βˆ’13+15βˆ’17+…)=4βˆ‘i=0∞(βˆ’1)i2i+1{\displaystyle \pi =4\left(1-{\frac {1}{3}}+{\frac {1}{5}}-{\frac {1}{7}}+\dots \right)=4\sum _{i=0}^{\infty }{\frac {(-1)^{i}}{2i+1}}}.

ЯвляСтся Π»ΠΈ эта Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ вычислСния числа Ο€{\displaystyle \pi }? ΠžΡ‚Π²Π΅Ρ‚ Π½Π° этот вопрос β€” Β«Π½Π΅Ρ‚Β», Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ здСсь Π½Π΅Ρ‚ Π½ΠΈ свойства массовости (Π½Π΅Ρ‚ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…), Π½ΠΈ свойства конСчности (сумма бСсконСчного количСства чисСл)[2].

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ суммирования бСсконСчного ряда Π½Π΅ являСтся элСмСнтарной Π½ΠΈ для соврСмСнных ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ², Π½ΠΈ для Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°, Π° Ссли Ρ€Π°Π·Π»ΠΎΠΆΠΈΡ‚ΡŒ эту ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ шаги слоТСния, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ бСсконСчноС число шагов. Алгоритмы ΠΆΠ΅ ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π·Π° ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ число шагов ΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ число шагов ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ вычислСний.

ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ элСмСнтарных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ элСмСнтарных дСйствий[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ]

Алгоритмы ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠ²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ элСмСнтарных дСйствий Π½Π°Π΄ элСмСнтарными ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ. КакиС дСйствия ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ элСмСнтарны, Π° ΠΊΠ°ΠΊΠΈΠ΅ β€” Π½Π΅Ρ‚, зависит ΠΎΡ‚ исполнитСля (Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹). Набор элСмСнтарных дСйствий ΠΈ элСмСнтарных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ исполнитСля Ρ‡Ρ‘Ρ‚ΠΊΠΎ зафиксирован. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ€Π½Ρ‹Π΅ дСйствия ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ с нСбольшим числом элСмСнтарных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ВсС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ дСйствия ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒΡŽ элСмСнтарных. Π’ соврСмСнных ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ… Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ числа ΠΈ ΠΈΡ€Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ числа Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ элСмСнтарными ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ[3]. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ€Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Π² соврСмСнных ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ… являСтся Π±ΠΈΡ‚ β€” это ячСйка памяти, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ записано число 0 ΠΈΠ»ΠΈ 1. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π°Π±ΠΎΡ€Π° Π±ΠΈΡ‚ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Ρ†Π΅Π»Ρ‹Π΅ ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ числа. Π’ частности, сущСствуСт простой способ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ†Π΅Π»Ρ‹Π΅ числа ΠΎΡ‚ 0{\displaystyle 0} Π΄ΠΎ 28βˆ’1=255{\displaystyle 2^{8}-1=255} Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ 8 Π±ΠΈΡ‚:

0β†’ 00000000
1β†’ 00000001
2β†’ 00000010
3β†’ 00000011
4β†’ 00000100
5β†’ 00000101
…→ …
250β†’ 11111010
251β†’ 11111011
252β†’ 11111100
253β†’ 11111101
254β†’ 11111110
255β†’ 11111111

Π£ΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ способ прСдставлСния Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹Ρ… чисСл Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½ΡƒΠ»Π΅ΠΉ ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡ† называСтся Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΉ записью числа. ΠšΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π±ΠΈΡ‚Ρƒ Π² этом прСдставлСнии соотвСтствуСт ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ Π΄Π²ΠΎΠΉΠΊΠΈ. Π‘Π°ΠΌΠΎΠΌΡƒ ΠΏΡ€Π°Π²ΠΎΠΌΡƒ Π±ΠΈΡ‚Ρƒ соотвСтствуСт 1=20{\displaystyle 1=2^{0}}, Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ справа β€” 2=21{\displaystyle 2=2^{1}}, Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌΡƒ справа β€” 4=22{\displaystyle 4=2^{2}}, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Двоичная запись соотвСтствуСт Ρ€Π°Π·Π»ΠΎΠΆΠ΅Π½ΠΈΡŽ числа Π² сумму Π½Π΅ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ стСпСнСй Π΄Π²ΠΎΠΉΠΊΠΈ. НапримСр:

Π—Π°Π΄Π°Ρ‡Π° 1

Π”ΠΎΠΊΠ°ΠΆΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½ΠΎΠ΅ число СдинствСнным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ прСдставляСтся Π² Π²ΠΈΠ΄Π΅ суммы Π½Π΅ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ стСпСнСй Π΄Π²ΠΎΠΉΠΊΠΈ. Подсказка: для Π΄Π°Π½Π½ΠΎΠ³ΠΎ числа n{\displaystyle n} Π½Π°ΠΉΠ΄ΠΈΡ‚Π΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ Π΄Π²ΠΎΠΉΠΊΠΈ 2m{\displaystyle 2^{m}}, которая мСньшС n{\displaystyle n}. РассмотритС число nβ€²=nβˆ’2m{\displaystyle n’=n-2^{m}}. Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ матСматичСской ΠΈΠ½Π΄ΡƒΠΊΡ†ΠΈΠΈ.

4 2.jpg

ΠšΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ элСмСнтарных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ лишь ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ число Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π’Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, упорядочСнный Π½Π°Π±ΠΎΡ€ 8 Π±ΠΈΡ‚ (ΠΎΠ΄ΠΈΠ½ Π±Π°ΠΉΡ‚) ΠΈΠΌΠ΅Π΅Ρ‚ 256 Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Из этого простого Ρ„Π°ΠΊΡ‚Π° слСдуСт ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎΠ΅ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅: срСди ΠΊΠΎΠΌΠ°Π½Π΄ исполнитСля Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ слоТСния ΠΈΠ»ΠΈ умноТСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹Ρ… (Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ…) чисСл.

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

Π˜Ρ‚Π°ΠΊ, для ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² лишь Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ числа ΡΠ²Π»ΡΡŽΡ‚ΡΡ элСмСнтарными ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ[4]ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ этих чисСл ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ. КакиС ΠΈΠΌΠ΅Π½Π½ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ числа элСмСнтарны, зависит ΠΎΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ машинного прСдставлСния. МногиС соврСмСнныС процСссоры ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ нСсколько Ρ‚ΠΈΠΏΠΎΠ² машинного прСдставлСния Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… чисСл. Π¦Π΅Π»Ρ‹Π΅ числа практичСски Π²Π΅Π·Π΄Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Π’ процСссорах с 32-Π±ΠΈΡ‚Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ большая Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ связана с числами, записанными Π² 32 Π±ΠΈΡ‚Π°Ρ…. ΠŸΡ€ΠΈ прСдставлСнии Π½Π΅ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… чисСл Π² 32 Π±ΠΈΡ‚Π° помСщаСтся просто двоичная запись. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ прСдставимых Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ чисСл β€” это всС Π½Π΅ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ числа мСньшС 232{\displaystyle 2^{32}}. Π­Ρ‚ΠΎΠΌΡƒ ΠΌΠ°ΡˆΠΈΠ½Π½ΠΎΠΌΡƒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ Π² языкС Π‘ΠΈ соотвСтствуСт Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… unsigned int. Если ΠΌΡ‹ попытаСмся ΡΠ»ΠΎΠΆΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ процСссора Π΄Π²Π° числа Ρ‚ΠΈΠΏΠ° unsigned int, сумма ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… большС Π»ΠΈΠ±ΠΎ Ρ€Π°Π²Π½Π° 232{\displaystyle 2^{32}}, Ρ‚ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ β€” ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ 33-ΠΉ Π±ΠΈΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ утСрян.

ΠŸΡ€ΠΈ прСдставлСнии ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… чисСл Π² Π²ΠΈΠ΄Π΅ 32 Π±ΠΈΡ‚ ΠΎΠ΄ΠΈΠ½ Π±ΠΈΡ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ Π·Π½Π°ΠΊ β€” «плюс» ΠΈΠ»ΠΈ «минус». ΠΠ΅ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ числа, мСньшиС 231{\displaystyle 2^{31}}, Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π² Π²ΠΈΠ΄Π΅ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΉ записи. Π‘Ρ‚Π°Ρ€ΡˆΠΈΠΉ Π±ΠΈΡ‚ Ρƒ Π½ΠΈΡ… Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ. ΠžΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число βˆ’a{\displaystyle -a}, ΠΌΠΎΠ΄ΡƒΠ»ΡŒ a{\displaystyle a} ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ мСньшС Π»ΠΈΠ±ΠΎ Ρ€Π°Π²Π΅Π½ 231{\displaystyle 2^{31}}, записываСтся Π² 32 Π±ΠΈΡ‚Π°Ρ… ΠΊΠ°ΠΊ двоичная запись числа 232βˆ’a{\displaystyle 2^{32}-a}. Π‘Ρ‚Π°Ρ€ΡˆΠΈΠΉ Π±ΠΈΡ‚ для ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… чисСл Ρ€Π°Π²Π΅Π½ 1. Π­Ρ‚ΠΎΠΌΡƒ ΠΌΠ°ΡˆΠΈΠ½Π½ΠΎΠΌΡƒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ соотвСтствуСт Ρ‚ΠΈΠΏ int. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌΡ‹Π΅ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ числа β€” это числа Π½Π° ΠΎΡ‚Ρ€Π΅Π·ΠΊΠ΅ [βˆ’231,231βˆ’1]{\displaystyle [-2^{31},\;2^{31}-1]}.

ΠŸΠΎΠ΄Π²Π΅Π΄Ρ‘ΠΌ ΠΈΡ‚ΠΎΠ³ΠΈ:

Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ исполнитСля Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ элСмСнтарных ΠΊΠΎΠΌΠ°Π½Π΄ (дСйствий), ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… элСмСнтарными ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ число.

Π’Ρ…ΠΎΠ΄ΠΎΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° являСтся ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ элСмСнтарных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π’ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° выполняСтся ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ число элСмСнтарных дСйствий ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Ρ‚Π°ΠΊΠΆΠ΅ являСтся ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ элСмСнтарных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

Π’ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ… элСмСнтарным ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ являСтся Π±ΠΈΡ‚. Π•ΡΡ‚ΡŒ нСсколько стандартных способов записи чисСл (Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ…, Ρ†Π΅Π»Ρ‹Ρ…, ΠΈ Ρ†Π΅Π»Ρ‹Ρ… Π½Π΅ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ…) Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±ΠΈΡ‚ фиксированной Π΄Π»ΠΈΠ½Ρ‹.

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

Бпособы записи Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ²[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ]

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

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ алгоритмичСских языков ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ±Ρ‰ΠΈΠ΅ Ρ‡Π΅Ρ€Ρ‚Ρ‹. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя, Π½Π΅ всСгда цСлСсообразно ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ языком программирования ΠΈ Π·Π°Π³Ρ€ΠΎΠΌΠΎΠΆΠ΄Π°Ρ‚ΡŒ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ нСсущСствСнными дСталями. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ псСвдокод, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° язык Pascal, Π½ΠΎ Π½Π΅ являСтся Ρ‚Π°ΠΊΠΈΠΌ строгим.

Π Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡΠ½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Алгоритм β€” это ΠΌΠ΅Ρ‚ΠΎΠ΄, схСма Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ. А ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° β€” это конкрСтная рСализация Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ скомпилирована ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅. Алгоритм, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, являСтся Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΈΠ΄Π΅ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ схСмой:

ИдСя Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ β†’ Алгоритм β†’ ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°

Π‘Ρ‚Ρ€Π΅Π»ΠΊΠ° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ этапу Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ с ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ΠΌ уровня подробности описания ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

Алгоритм Π•Π²ΠΊΠ»ΠΈΠ΄Π°[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ]

ОписаниС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°:

  1. Если a=b{\displaystyle a=b}, Ρ‚ΠΎ ΠΠžΠ” (наибольший ΠΎΠ±Ρ‰ΠΈΠΉ Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ) =a=b{\displaystyle =a=b} ΠΈ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅ΠΌ вычислСния.
  2. Если a>b{\displaystyle a>b}, Ρ‚ΠΎ ΠΈΠ· a{\displaystyle a} Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π΅ΠΌ b{\displaystyle b} (a←aβˆ’b{\displaystyle a\gets a-b}). ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ 1.
  3. Если ΠΆΠ΅ b>a{\displaystyle b>a}, Ρ‚ΠΎ ΠΈΠ· b{\displaystyle b} Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π΅ΠΌ a{\displaystyle a} (b←bβˆ’a{\displaystyle b\gets b-a}). ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ 1.

Π—Π°ΠΏΠΈΡˆΠ΅ΠΌ этот Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ псСвдокода.

ПсСвдокод 1. Алгоритм Π•Π²ΠΊΠ»ΠΈΠ΄Π°

 1 Function ΠΠžΠ”(a, b)
 2   While a≠b{\displaystyle a\neq b}
 3     If a>b{\displaystyle a>b}
 4       a←aβˆ’b{\displaystyle a\gets a-b}
 5     Else
 6       b←bβˆ’a{\displaystyle b\gets b-a}
 7     End If
 8   End While
 9   Return a
10 End Function

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ While(A) B End While псСвдокода ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Β«ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ B, записанных Π² Ρ‚Π΅Π»Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° While, ΠΏΠΎΠΊΠ° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ условиС AΒ». Π’Π΅Π»ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° While β€” это всС инструкции ΠΌΠ΅ΠΆΠ΄Ρƒ While(A) ΠΈ End While. Если условиС A Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ Π² самом Π½Π°Ρ‡Π°Π»Π΅, Ρ‚ΠΎ Ρ‚Π΅Π»ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° While Π½Π΅ выполняСтся Π½ΠΈ Ρ€Π°Π·Ρƒ. Один шаг выполнСния Ρ‚Π΅Π»Π° Ρ†ΠΈΠΊΠ»Π° называСтся ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ Ρ†ΠΈΠΊΠ»Π°.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ If(A) B Else C End IfΒ» псСвдокода ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ «Ссли Π²Π΅Ρ€Π½ΠΎ A, Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ инструкции B, ΠΈΠ½Π°Ρ‡Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ инструкции CΒ».

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ return a ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Β«Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΊΠ°ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ вычислСний ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ aΒ».

ПокаТСм, Ρ‡Ρ‚ΠΎ наш Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ нахоТдСния ΠΠžΠ”Π° чисСл a{\displaystyle a} ΠΈ b{\displaystyle b}.

Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΠžΠ”(a,b)={\displaystyle (a,\;b)=\;}ΠΠžΠ”(aβˆ’b,b){\displaystyle (a-b,\;b)} ΠΏΡ€ΠΈ a>b{\displaystyle a>b}, поэтому, нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ шагС мСняСтся ΠΎΠ΄Π½ΠΎ ΠΈΠ· чисСл, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΠžΠ”(a,b){\displaystyle (a,\;b)} остаётся Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌ. МаксимальноС ΠΈΠ· чисСл a{\displaystyle a} ΠΈ b{\displaystyle b} с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ шагом ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ, ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΎΠ½ΠΈ становятся Ρ€Π°Π²Π½Ρ‹ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ ΠΈ Ρ€Π°Π²Π½Ρ‹ искомому Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽΠ—Π°Π΄Π°Ρ‡Π° 2

Π”ΠΎΠΊΠ°ΠΆΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΠžΠ”(a,b)={\displaystyle (a,\;b)=\;}ΠΠžΠ”(aβˆ’b,b){\displaystyle (a-b,\;b)} для Π»ΡŽΠ±Ρ‹Ρ… Π½Π΅ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ†Π΅Π»Ρ‹Ρ… a{\displaystyle a} ΠΈ b{\displaystyle b}, Ρ‚Π°ΠΊΠΈΡ… Ρ‡Ρ‚ΠΎ a>b{\displaystyle a>b}.

Алгоритм вычислСния чисСл Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ]

Π’ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ для описания Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ€Π΅ΠΊΡƒΡ€Ρ€Π΅Π½Ρ‚Π½Ρ‹Π΅ ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ опрСдСляСтся Ρ‡Π΅Ρ€Π΅Π· Π΅Ρ‘ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΌΠ΅Π½ΡŒΡˆΠΈΡ…) Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°Ρ…. НаиболСС извСстным ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ являСтся ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ 1, 1, 2, 3, 5, 8, 13, …, опрСдСляСмая ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΠΌΠΈ:

F1=1,F2=1,Fn=Fnβˆ’1+Fnβˆ’2{\displaystyle F_{1}=1,\quad F_{2}=1,\quad F_{n}=F_{n-1}+F_{n-2}}.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ это Ρ€Π΅ΠΊΡƒΡ€Ρ€Π΅Π½Ρ‚Π½ΠΎΠ΅ ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ рСкурсивный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ вычислСния чисСл Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ:

ПсСвдокод 2. Числа Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ

1 Function Fibo(n)
2   If n = 1 Or n = 2
3     Return 1
4   End If
5   Return Fibo(n - 1) + Fibo(n - 2)
6 End Function

ΠŸΡ€ΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ рСкурсивной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π΄Π²Π° вопроса: ΠΏΠΎΡ‡Π΅ΠΌΡƒ функция Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½Π° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ? ΠžΡ‚Π²Π΅Ρ‚ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ вопрос ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ прост, β€” Ссли Ρ€Π΅ΠΊΡƒΡ€Ρ€Π΅Π½Ρ‚Π½Ρ‹Π΅ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ (компилятор) сработал ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, Ρ‚ΠΎ СдинствСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, β€” ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅. Но Π΅ΡΡ‚ΡŒ Π΅Ρ‰Ρ‘ другая Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° β€” ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ΡŒ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ[5].

Наибольший интСрСс Π² этом Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ прСдставляСт строчка 5:

Return Fibo(n - 1) + Fibo(n - 2)

Она ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅: Β«Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ процСсс вычислСния Fibo(n - 1), Π·Π°Ρ‚Π΅ΠΌ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ процСсс вычислСния Fibo(n - 2), Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ вычислСний ΡΠ»ΠΎΠΆΠΈΡ‚ΡŒ ΠΈ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π² качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°Β». МоТно ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ Π² этой строчкС ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ нашСго Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° просит Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ исполнитСля Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Fibo(n - 1), Π° сам ΠΆΠ΄Ρ‘Ρ‚, ΠΊΠΎΠ³Π΄Π° Ρ‚ΠΎΡ‚ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ вычислСния. Π£Π·Π½Π°Ρ‘Ρ‚ Ρƒ Π½Π΅Π³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, просит Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Fibo(n - 2) ΠΈ снова ΠΆΠ΄Ρ‘Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°. Π”Π²Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° складываСт, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ суммы ΠΊΠ°ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΈ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ. Π˜Π½Ρ‚Π΅Ρ€Π΅Ρ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ этот Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ дСйствуСт ΠΏΠΎ Ρ‚Π°ΠΊΠΎΠΌΡƒ ΠΆΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ β€” Ссли Π΅Π³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ большС 1, ΠΎΠ½ Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ исполнитСля для вычислСния Π½ΡƒΠΆΠ½Ρ‹Ρ… Π΅ΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ сСрия Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Π΄Π΅Ρ€Π΅Π²ΠΎ рСкурсивных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ².

Fibtree.jpg Рис. 1. Π”Π΅Ρ€Π΅Π²ΠΎ рСкурсивных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² для F6{\displaystyle F_{6}}.

На рисункС 1 ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΎ Π΄Π΅Ρ€Π΅Π²ΠΎ рСкурсивных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰Π΅Π΅ ΠΏΡ€ΠΈ вычислСнии F6{\displaystyle F_{6}}. Π­Ρ‚ΠΎ Π΄Π΅Ρ€Π΅Π²ΠΎ дСмонстрируСт ΠΊΠ°ΠΊ функция сама сСбя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΈ вычислСнии. НапримСр, ΠΏΡ€ΠΈ вычислСнии F6{\displaystyle F_{6}} Π±Ρ‹Π»ΠΈ Π²Ρ‹Π·Π²Π°Π½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ вычислСния F5{\displaystyle F_{5}} ΠΈ F4{\displaystyle F_{4}}. Для вычислСния F5{\displaystyle F_{5}} понадобились F4{\displaystyle F_{4}} ΠΈ F3{\displaystyle F_{3}}, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ рСкурсивный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π» свою Ρ€Π°Π±ΠΎΡ‚Ρƒ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π΅Ρ€Π΅Π²ΠΎ рСкурсивных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΏΡ€ΠΈ Π»ΡŽΠ±Ρ‹Ρ… Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ±Ρ€Ρ‹Π²Π°Π»ΠΎΡΡŒ ΠΈ Π±Ρ‹Π»ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌ. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π΄Π΅Ρ€Π΅Π²ΠΎ рСкурсивных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² обрываСтся Π½Π° F1{\displaystyle F_{1}} ΠΈ F2{\displaystyle F_{2}}, для вычислСния ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ рСкурсивныС Π²Ρ‹Π·ΠΎΠ²Ρ‹.

Π”ΠΎΠ²ΠΎΠ»ΡŒΠ½ΠΎ часто «зависаниС» ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² связано с использованиСм ΠΏΠ»ΠΎΡ…ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… рСкурсивных ΠΈΠ΄Π΅ΠΉ. Наш ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠΆΠ΅ ΠΏΠ»ΠΎΡ… β€” ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΏΠΎΠ΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ n{\displaystyle n}.

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ рСкурсивными Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌΠΈ Π½ΡƒΠΆΠ½ΠΎ остороТно, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ нСэффСктивными с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹. К соТалСнию рСкурсивныС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Π½Π΅ всСгда ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌΠΈ. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ количСство ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ n{\displaystyle n}-ΠΉ Ρ‡Π»Π΅Π½ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (здСсь ΠΏΠΎΠ΄ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ ΠΌΡ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ строчку Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅). ΠžΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΠΌ это число ΠΊΠ°ΠΊ T(n){\displaystyle T(n)}.

Для вычислСния Fibo(n) Π½Π°ΠΌ потрСбуСтся Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Fibo(n - 1) ΠΈ Fibo(n - 2), поэтому T(n)β‰₯T(nβˆ’1)+T(nβˆ’2){\displaystyle T(n)\geq T(n-1)+T(n-2)}. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ это ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΈ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ T(1)=T(2)>1{\displaystyle T(1)=T(2)>1}, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ ΠΈΠ½Π΄ΡƒΠΊΡ†ΠΈΠΈ Π΄ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ T(n)β‰₯Fn{\displaystyle T(n)\geq F_{n}}. Но числа Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°ΡŽΡ‚ достаточно быстро (F50=20365011074{\displaystyle F_{50}=20365011074}). ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π΄Π°ΠΆΠ΅ Π½Π° ΠΌΠΎΡ‰Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π½Π°ΠΌ Π½Π΅ удастся Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ большС, Ρ‡Π΅ΠΌ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ нСсколько дСсятков Ρ‡Π»Π΅Π½ΠΎΠ² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ. Π’Ρ‹, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, ΡƒΠΆΠ΅ Π΄ΠΎΠ³Π°Π΄Ρ‹Π²Π°Π΅Ρ‚Π΅ΡΡŒ, Π² Ρ‡Ρ‘ΠΌ здСсь ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. Π’ нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² β€” Π² Π΄Π΅Ρ€Π΅Π²Π΅ рСкурсивных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ. НапримСр Fibo(n - 2) Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½Π° Π΄Π²Π° Ρ€Π°Π·Π°: сначала ΠΈΠ· Fibo(n), Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΈΠ· Fibo(n - 1), ΠΈ ΠΎΠ±Π° Ρ€Π°Π·Π° Π±ΡƒΠ΄ΡƒΡ‚ проводится ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ вычислСния. ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ «чСловСчСский» Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ вычислСния чисСл Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ сущСствСнно быстрСС: Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ послСдниС Π΄Π²Π° числа Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ, Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ число ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ этот шаг Π½ΡƒΠΆΠ½ΠΎΠ΅ число Ρ€Π°Π·. ΠŸΡ€ΠΈΠ²Π΅Π΄Ρ‘ΠΌ Π΅Π³ΠΎ описаниС Π½Π° псСвдокодС (см. псСвдокод 3).

Алгоритм 3 для вычислСния Fn{\displaystyle F_{n}} Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ nβˆ’2{\displaystyle n-2} ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ Ρ†ΠΈΠΊΠ»Π° While. Π’ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° растёт Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ с n{\displaystyle n} (ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ n{\displaystyle n} Π² k{\displaystyle k} Ρ€Π°Π· ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Ρ‚ΠΎΠΆΠ΅ увСличится ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π² k{\displaystyle k} Ρ€Π°Π·).

Как ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС рСкурсивный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ оказался сущСствСнно ΠΌΠ΅Π½Π΅Π΅ эффСктивным (дольшС Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΌ ΠΏΡ€ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… n{\displaystyle n}), Π½Π΅ΠΆΠ΅Π»ΠΈ нСрСкурсивный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ.

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

Π›ΡƒΡ‡ΡˆΠΈΠΉ способ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ β€” это Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Ρ‘ Π½Π° нСсколько простых ΠΈ Β«Ρ€Π°Π·Π΄Π΅Π»Π°Ρ‚ΡŒΡΡΒ» с Π½ΠΈΠΌΠΈ ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. По сути, это ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°ΠΆΠ½Ρ‹Ρ… инструмСнтов ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡ ΠΏΡ€ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ Π·Π°Π΄Π°Ρ‡.

ПсСвдокод 3. Числа Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ: нСрСкурсивный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ

 1 Function FiboNR(n)
 2   If n<3{\displaystyle n<3} Then
 3     Return 1
 4   Else
 5     b←1{\displaystyle b\gets 1}         \\ ΠŸΡ€Π΅Π΄ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ вычислСнноС число Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ
 6     a←1{\displaystyle a\gets 1}         \\ ПослСднСС вычислСнноС число Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ
 7     For i∈3…n{\displaystyle i\in 3\ldots n}
 8       c←a+b{\displaystyle c\gets a+b}    \\ ВычисляСм ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ число Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ
 9       b←a{\displaystyle b\gets a}       \\ Π‘Ρ‚Π°Ρ€ΠΎΠ΅ послСднСС число стало прСдпослСдним
10       a←c{\displaystyle a\gets c}       \\ НовоС вычислСнноС число стало послСдним
11     End For
12     Return c
13   End If
14 End Function

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

Π—Π°Π΄Π°Ρ‡Π° Β«Π₯анойскиС башни»[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ]

Рассмотрим Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ классичСский ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° рСкурсивныС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ β€” ΠΈΠ³Ρ€Ρƒ Β«Π₯анойскиС башни», ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π½Π½ΡƒΡŽ Π΅Ρ‰Ρ‘ Π² 1883 Π³ΠΎΠ΄Ρƒ Π­Π΄ΡƒΠ°Ρ€Π΄ΠΎΠΌ Π›ΡŽΠΊΠ°. Π•ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ стСрТня ΠΈ 64 ΠΊΠΎΠ»ΡŒΡ†Π°Μ, Π½Π°Π½ΠΈΠ·Π°Π½Π½Ρ‹Ρ… Π½Π° Π½ΠΈΡ…. Π’ Π½Π°Ρ‡Π°Π»Π΅ всС ΠΊΠΎΜΠ»ΡŒΡ†Π° находятся Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ стСрТнС, ΠΏΡ€ΠΈΡ‡Ρ‘ΠΌ всС ΠΊΠΎΜΠ»ΡŒΡ†Π° Ρ€Π°Π·Π½ΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΌΠ΅Ρ‚Ρ€Π°, ΠΈ мСньшиС ΠΊΠΎΜΠ»ΡŒΡ†Π° Π»Π΅ΠΆΠ°Ρ‚ Π½Π° Π±ΠΎΜΠ»ΡŒΡˆΠΈΡ…. Π—Π° Ρ…ΠΎΠ΄ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Π²Π·ΡΡ‚ΡŒ Π²Π΅Ρ€Ρ…Π½Π΅Π΅ ΠΊΠΎΠ»ΡŒΡ†ΠΎ с любого стСрТня ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡΡ‚Π΅Ρ€ΠΆΠ΅Π½ΡŒ свСрху, ΠΏΡ€ΠΈ этом запрСщаСтся ΠΊΠ»Π°ΡΡ‚ΡŒ большСС ΠΊΠΎΠ»ΡŒΡ†ΠΎ Π½Π° мСньшСС. ЦСль ΠΈΠ³Ρ€Ρ‹ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ всю ΠΏΠΈΡ€Π°ΠΌΠΈΠ΄Ρƒ с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ стСрТня Π½Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ.

-hanoi.jpg

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠΈΡ€Π°ΠΌΠΈΠ΄Ρƒ, Π½Π°ΠΌ Π½Π°Π΄ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΈ самоС Π½ΠΈΠΆΠ½Π΅Π΅ большоС ΠΊΠΎΠ»ΡŒΡ†ΠΎ. Для этого Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΜΠ»ΡŒΡ†Π° Π±Ρ‹Π»ΠΈ Π½Π° Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌ ΡˆΡ‚Ρ‹Ρ€Π΅. Π—Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ N{\displaystyle N} ΠΊΠΎΠ»Π΅Ρ†, Π½Π°ΠΌ сначала Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ столбик ΠΈΠ· Π²Π΅Ρ€Ρ…Π½ΠΈΡ… Nβˆ’1{\displaystyle N-1} ΠΊΠΎΠ»Π΅Ρ† Π½Π° Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΡΡ‚Π΅Ρ€ΠΆΠ΅Π½ΡŒ, Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ самоС большоС ΠΊΠΎΠ»ΡŒΡ†ΠΎ с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π½Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ столбик ΠΈΠ· Nβˆ’1{\displaystyle N-1} ΠΊΠΎΠ»Π΅Ρ† с Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ стСрТня Π½Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ.

ПсСвдокод 4. Π₯анойскиС башни

1 Function Move(n, x, y)
2   If n = 1 Then
3     ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ ΠΊΠΎΠ»ΡŒΡ†ΠΎ с стСрТня x Π½Π° ΡΡ‚Π΅Ρ€ΠΆΠ΅Π½ΡŒ y
4   End If
5   Move(n - 1, x        , 6 - x - y)
6   Move(1    , x        , y        )
7   Move(n - 1, 6 - x - y, y        )
8 End Function

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ ΠΎΠΏΡΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ рСкурсивный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ: для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ для ΠΏΠΈΡ€Π°ΠΌΠΈΠ΄Ρ‹ ΠΈΠ· N{\displaystyle N} ΠΊΠΎΠ»Π΅Ρ†, достаточно Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π΅Ρ‘ для ΠΏΠΈΡ€Π°ΠΌΠΈΠ΄Ρ‹ ΠΈΠ· Nβˆ’1{\displaystyle N-1} ΠΊΠΎΠ»Π΅Ρ†. ΠŸΠΎΡΡ‡ΠΈΡ‚Π°Π΅ΠΌ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ количСство дСйствий, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для провСдСния всСй ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. ΠŸΡƒΡΡ‚ΡŒ f(N){\displaystyle f(N)} β€” Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ число дСйствий, для пСрСноса ΠΏΠΈΡ€Π°ΠΌΠΈΠ΄Ρ‹ ΠΈΠ· n{\displaystyle n} ΠΊΠΎΠ»Π΅Ρ†. Для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΡŒΡ†Π° ΠΎΡ‚Π²Π΅Ρ‚ Ρ€Π°Π²Π΅Π½ Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅: f(1)=1{\displaystyle f(1)=1}, для N{\displaystyle N} ΠΎΡ‚Π²Π΅Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ f(N)=f(Nβˆ’1)+1+f(Nβˆ’1)=2f(

Бписок Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² β€” ВикипСдия

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΠΈΠ· Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ β€” свободной энциклопСдии

НиТС приводится список Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎ катСгориям. Π‘ΠΎΠ»Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ свСдСния приводятся Π² спискС структур Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ спискС основных Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² Ρ‚Π΅ΠΎΡ€ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ²[1]

ΠžΠ±Ρ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€Π½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ | ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄]

ГСнСрация ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ | ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄]

Алгоритмы Π½Π° Π³Ρ€Π°Ρ„Π°Ρ…[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ | ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄]

Алгоритмы нахоТдСния максимального ΠΏΠΎΡ‚ΠΎΠΊΠ°[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ | ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄]

n{\displaystyle n} β€” число Π²Π΅Ρ€ΡˆΠΈΠ½, m{\displaystyle m} β€” число Ρ€Ρ‘Π±Π΅Ρ€, U{\displaystyle U} β€” наибольшая Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π° максимальной пропускной способности сСти.

Алгоритмы нахоТдСния максимального паросочСтания[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ | ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄]

Алгоритмы поиска[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ | ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄]

Алгоритмы Π½Π° строках[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ | ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄]

Алгоритмы поиска строки[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ | ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄]
Алгоритмы вычислСния расстояния ΠΌΠ΅ΠΆΠ΄Ρƒ строками[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ | ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄]
Алгоритмы ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ сравнСния строк с шаблоном[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ | ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄]
ВычислСниС характСристичСских ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ²[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ | ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄]
ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎΠ΅ соотвСтствиС[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ | ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄]
Π˜Π½Π΄Π΅ΠΊΡΡ‹ подстрок[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ | ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄]

Алгоритмы сортировки[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ | ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄]

  • Bogosort
  • Stooge sort
  • Timsort β€” Π³ΠΈΠ±Ρ€ΠΈΠ΄Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сортировки, ΡΠΎΡ‡Π΅Ρ‚Π°ΡŽΡ‰ΠΈΠΉ сортировку вставками ΠΈ сортировку слияниСм
  • Наивная сортировка — гСнСрация всСх n!{\displaystyle n!} Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… пСрСстановок ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ
  • Блинная сортировка
  • Блочная сортировка (Ρ‚Π°ΠΊΠΆΠ΅ извСстСн ΠΊΠ°ΠΊ корзинная сортировка), ср. с поразрядной
  • Быстрая сортировка — с Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ΠΌ исходного Π½Π°Π±ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° Π΄Π²Π΅ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ любой элСмСнт ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹ упорядочСн ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ любого элСмСнта Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹; Π·Π°Ρ‚Π΅ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ примСняСтся рСкурсивно ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π΅
  • Π“Π½ΠΎΠΌΡŒΡ сортировка — ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ±Ρ‰Π΅Π΅ с сортировкой ΠΏΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠΎΠΌ ΠΈ сортировкой вставками. Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°Β β€” O(n2){\displaystyle O(n^{2})}.
  • ΠŸΠΈΡ€Π°ΠΌΠΈΠ΄Π°Π»ΡŒΠ½Π°Ρ сортировка (Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΊΡƒΡ‡Π΅ΠΉ)Β β€” ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ список Π² ΠΊΡƒΡ‡Ρƒ, Π±Π΅Ρ€Ρ‘ΠΌ наибольший элСмСнт ΠΈ добавляСм Π΅Π³ΠΎ Π² ΠΊΠΎΠ½Π΅Ρ† списка
  • Плавная сортировка
  • ΠŸΠΎΡ€Π°Π·Ρ€ΡΠ΄Π½Π°Ρ сортировка — сортируСт строки Π±ΡƒΠΊΠ²Π° Π·Π° Π±ΡƒΠΊΠ²ΠΎΠΉ.
  • Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° Π‘Π΅Π½Ρ‚Π»ΠΈ β€” Π‘Π΅Π΄ΠΆΠ²ΠΈΠΊΠ° (Π°Π½Π³Π».Β BeSe sort)Β β€” модификация быстрой сортировки для составных ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Π·Π°ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π°ΡΡΡ Π² Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π½Π΅ ΠΏΠΎΠΏΠΎΠ»Π°ΠΌ, Π° Π½Π° Ρ‚Ρ€ΠΈ части — Π² Ρ‚Ρ€Π΅Ρ‚ΡŒΡŽ ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ (ΠΏΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ символу) ΠΊΠ»ΡŽΡ‡ΠΈ
  • Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ Π΄Π΅Ρ€Π΅Π²Π° (Π°Π½Π³Π».Β Tree sort)
  • Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ вставок — опрСдСляСм, Π³Π΄Π΅ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ элСмСнт Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² отсортированном спискС, ΠΈ вставляСм Π΅Π³ΠΎ Ρ‚ΡƒΠ΄Π°
  • Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π²Ρ‹Π±ΠΎΡ€Π°Β β€” наимСньшСго ΠΈΠ»ΠΈ наибольшСго элСмСнта ΠΈ помСщСния Π΅Π³ΠΎ Π² Π½Π°Ρ‡Π°Π»ΠΎ ΠΈΠ»ΠΈ ΠΊΠΎΠ½Π΅Ρ† отсортированного списка
  • Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡˆΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ (Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΊΠΎΠΊΡ‚Π΅ΠΉΠ»Π΅ΠΌ)
  • Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° подсчётом — ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, подсчитываСтся число ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… элСмСнтов (3 Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°)
  • Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠΎΠΌ
  • Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° расчёской
  • Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° слияниСм — сортируСм ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΈ Π²Ρ‚ΠΎΡ€ΡƒΡŽ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρƒ списка ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ, Π° Π·Π°Ρ‚Π΅ΠΌΒ β€” сливаСм отсортированныС списки
  • Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° Π¨Π΅Π»Π»Π°Β β€” ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ сортировку вставками
  • ВопологичСская сортировка
  • Π₯итрая сортировка — ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ ΠΈΠ· исходной ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ отсортированныС ΠΏΠΎΠ΄ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, производя ΠΈΡ… слияниС с ΡƒΠΆΠ΅ ΠΈΠ·Π²Π»Π΅Ρ‡Ρ‘Π½Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ
  • Цифровая сортировка — Ρ‚ΠΎ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ ΠŸΠΎΡ€Π°Π·Ρ€ΡΠ΄Π½Π°Ρ сортировка.

Алгоритмы слияния[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ | ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄]

ΠœΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π±ΡƒΠ»Π΅Π²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ | ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄]

Алгоритмы сТатия Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΡŒ[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ | ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄]

  • ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π‘Π°Ρ€Ρ€ΠΎΡƒΠ·Π° β€” Π£ΠΈΠ»Π΅Ρ€Π° (Ρ‚Π°ΠΊΠΆΠ΅ извСстСн ΠΊΠ°ΠΊ Π°Π½Π³Π».Β BWT)Β β€” ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ сТатия Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΡŒ
  • ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π¨ΠΈΠ½Π΄Π»Π΅Ρ€Π° (Π°Π½Π³Π».Β  ST)Β β€” модификация прСобразования Π‘Π°Ρ€Ρ€ΠΎΡƒΠ·Π°Β β€” Π£ΠΈΠ»Π΅Ρ€Π°
  • Алгоритм DEFLATEΒ β€” популярный свободный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сТатия (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ zlib)
  • Π”Π΅Π»ΡŒΡ‚Π°-ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅Β β€” эффСктивно для сТатия Π΄Π°Π½Π½Ρ‹Ρ… с часто ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠΌΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡΠΌΠΈ
  • Π˜Π½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π½ΠΎΠ΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅Β β€” Π΄Π΅Π»ΡŒΡ‚Π°-ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, примСняСмоС ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ строк
  • БСмСйство Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² словарного сТатия ЛСмпСля — Π—ΠΈΠ²Π°:
    • LZ77Β β€” Ρ€ΠΎΠ΄ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΈΠΊ сСмСйства LZ77-Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ²
    • LZ78Β β€” Ρ€ΠΎΠ΄ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΈΠΊ сСмСйства LZ78-Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ²
    • LZMAΒ β€” сокращСниС ΠΎΡ‚ Π°Π½Π³Π».Β Lempel-Ziv-Markov chain-Algorithm
    • LZOΒ β€” Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сТатия, ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ
  • Алгоритм сТатия PPM
  • ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½ сСрий (Π“Ρ€ΡƒΠΏΠΏΠΎΠ²ΠΎΠ΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Ρ‚Π°ΠΊΠΆΠ΅ извСстСн ΠΊΠ°ΠΊ Π°Π½Π³Π».Β RLE)Β β€” ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ сСрия ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… элСмСнтов замСняСтся Π½Π° Π΄Π²Π° символа: элСмСнт ΠΈ число Π΅Π³ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ
  • Алгоритм SEQUITUR (Π°Π½Π³Π».)Β β€” сТатиС Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΡŒ, автоматичСскоС Π°Π΄Π°ΠΏΡ‚ΠΈΠ²Π½ΠΎΠ΅ построСниС контСкстно-свободной Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΈ для ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…
  • Π’Π΅ΠΉΠ²Π»Π΅Ρ‚-ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° основС Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π½ΡƒΠ»ΡŒ-Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² (Π°Π½Π³Π».) (EZW-ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅)
  • Π­Π½Ρ‚Ρ€ΠΎΠΏΠΈΠΉΠ½ΠΎΠ΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅Β β€” схСма кодирования, которая присваиваСт ΠΊΠΎΠ΄Ρ‹ символам Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ соотнСсти Π΄Π»ΠΈΠ½Ρƒ ΠΊΠΎΠ΄ΠΎΠ² с Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ появлСния символов
  • Π­Π½Ρ‚Ρ€ΠΎΠΏΠΈΠΉΠ½ΠΎΠ΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ с извСстными характСристиками
    • Π£Π½Π°Ρ€Π½ΠΎΠ΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅Β β€” ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт число n{\displaystyle n} Π² Π²ΠΈΠ΄Π΅ n{\displaystyle n} Π΅Π΄ΠΈΠ½ΠΈΡ† с Π·Π°ΠΌΡ‹ΠΊΠ°ΡŽΡ‰ΠΈΠΌ Π½ΡƒΠ»Ρ‘ΠΌ
    • Π΄Π΅Π»ΡŒΡ‚Π°|Π³Π°ΠΌΠΌΠ°|ΠΎΠΌΠ΅Π³Π°-ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Элиаса (Π°Π½Π³Π».Β Elias coding)Β β€” ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΠ΄ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ†Π΅Π»Ρ‹Π΅ числа
    • ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈΒ β€” ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠ΄ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ†Π΅Π»Ρ‹Π΅ числа Π² Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠ΄ΠΎΠ²Ρ‹Π΅ слова
    • ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π“ΠΎΠ»ΠΎΠΌΠ±Π°Β β€” Ρ„ΠΎΡ€ΠΌΠ° энтропийного кодирования, которая ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Π° для Π°Π»Ρ„Π°Π²ΠΈΡ‚ΠΎΠ² с гСомСтричСским распрСдСлСниСм
    • ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Райса — Ρ„ΠΎΡ€ΠΌΠ° энтропийного кодирования, которая ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Π° для Π°Π»Ρ„Π°Π²ΠΈΡ‚ΠΎΠ² с гСомСтричСским распрСдСлСниСм

Алгоритмы сТатия с потСрями[ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ | ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄]

Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹? ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ программирования

Алгоритмы ΠΈ структуры Π΄Π°Π½Π½Ρ‹Ρ… β†’ ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ ΠΏΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌ

Π’Π΅Π³ΠΈ: ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, rsa, быстрая сортировка, ΠΏΠΈΡ€Π°ΠΌΠΈΠ΄Π°Π»ΡŒΠ½Π°Ρ сортировка, сортировка слияниСм, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„ΡƒΡ€ΡŒΠ΅, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ дСйкстры, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ бСзопасного Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ, Π°Π½Π°Π»ΠΈΠ· связСй, ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ-ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Π»ΡŒΠ½ΠΎ-Π΄ΠΈΡ„Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, сТатиС Π΄Π°Π½Π½Ρ‹Ρ…, гСнСрация случайных чисСл

Algo_Deep_14.7_Site-5020-9819d3.png

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

Алгоритм β€” Ρ‡Ρ‚ΠΎ это?

Если Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ Π½Π΅ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎ, Ρ‚ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΡƒΡŽ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ, ΠΊΠΎΠ³Π΄Π° Π½Π° Π²Ρ…ΠΎΠ΄ подаётся какая-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π° Π»ΠΈΠ±ΠΎ Π½Π°Π±ΠΎΡ€ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½, Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ выполнСния становится выходная Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π° Π»ΠΈΠ±ΠΎ Π½Π°Π±ΠΎΡ€ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. МоТно ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ β€” это нСкая ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… шагов, благодаря Ρ‡Π΅ΠΌΡƒ происходит ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅.

Π’Π°ΠΊΠΆΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ шагов позволяСт Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½: 1. Π Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π·Π° ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΡ‘ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Если Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π½Π΅ способСн Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ Π·Π° ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ количСство Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ этот Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ бСсполСзСн. 2. Π˜ΠΌΠ΅Ρ‚ΡŒ Ρ‡Ρ‘Ρ‚ΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ инструкции. Π›ΡŽΠ±ΠΎΠΉ шаг Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒΡΡ. ΠŸΡ€ΠΈ этом Π΅Π³ΠΎ инструкции Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹ для любого случая. 3. Π‘Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π΅Π½ ΠΊ использованию. Π Π΅Ρ‡ΡŒ ΠΈΠ΄Ρ‘Ρ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ способСн Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, для устранСния ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΅Π³ΠΎ создавали.

БСгодня Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π² ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, Ρ‚Π°ΠΊ ΠΈ Π² ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅. ΠšΡΡ‚Π°Ρ‚ΠΈ, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΠΌΠΈ матСматичСскими Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ€Π°Π·Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° простыС ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΠΈ ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ корня β€” ΠΈΡ… использовали Π² Π΄Ρ€Π΅Π²Π½Π΅ΠΌ Π’Π°Π²ΠΈΠ»ΠΎΠ½Π΅ Π΅Ρ‰Ρ‘ Π² 1600 Π³. Π΄ΠΎ Π½. э. Но ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄Π°Π»Π΅ΠΊΠΎ Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ΅, Π° рассмотрим, ΠΊΠ°ΠΊ ΠΈ ΠΎΠ±Π΅Ρ‰Π°Π»ΠΈ, основныС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ программирования Π½Π° сСгодняшний дСнь.

Алгоритмы сортировки (ΠΏΠΈΡ€Π°ΠΌΠΈΠ΄Π°Π»ΡŒΠ½Π°Ρ, быстрая, слияниСм)

1-20219-4be9ea.jpg Какой Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сортировки ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ Π»ΡƒΡ‡ΡˆΠΈΠΌ? Π—Π΄Π΅ΡΡŒ Π½Π΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠ³ΠΎ ΠΎΡ‚Π²Π΅Ρ‚Π°, вСдь всё зависит ΠΎΡ‚ Π²Π°ΡˆΠΈΡ… ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠΉ ΠΈ поставлСнных ΠΏΠ΅Ρ€Π΅Π΄ Π²Π°ΠΌΠΈ Π·Π°Π΄Π°Ρ‡. Рассмотрим ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ²: 1. Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° слияниСм. Π’Π°ΠΆΠ½Π΅ΠΉΡˆΠΈΠΉ Π½Π° сСгодня Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ. БазируСтся Π½Π° ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ сравнСния элСмСнтов ΠΈ задСйствуСт ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ «раздСляй ΠΈ властвуй», позволяя Π±ΠΎΠ»Π΅Π΅ эффСктивно Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠ³Π΄Π°-Ρ‚ΠΎ Ρ€Π΅ΡˆΠ°Π»ΠΈΡΡŒ Π·Π° врСмя O (n^2). Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° слияниСм Π±Ρ‹Π»Π° ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½Π° ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΎΠΌ Π”ΠΆΠΎΠ½ΠΎΠΌ Ρ„ΠΎΠ½ НСйманом Π² Π΄Π°Π»Ρ‘ΠΊΠΎΠΌ 1945 Π³ΠΎΠ΄Ρƒ. 2. Быстрая сортировка. Π­Ρ‚ΠΎ ΡƒΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ сортировкС. Π’ΡƒΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ базируСтся, ΠΊΠ°ΠΊ Π½Π° in-place Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠΈ, Ρ‚Π°ΠΊ ΠΈ Π½Π° ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ «раздСляй ΠΈ властвуй». Однако эта сортировка Π½Π΅ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Π°, Ρ‡Ρ‚ΠΎ ΠΈ являСтся Π΅Ρ‘ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ. Π—Π°Ρ‚ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ эффСктивСн ΠΏΡ€ΠΈ сортировкС массивов Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти. 3. ΠŸΠΈΡ€Π°ΠΌΠΈΠ΄Π°Π»ΡŒΠ½Π°Ρ сортировка. Алгоритм in-place ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ (Π·Π° счёт этой ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ сокращаСтся врСмя поиска Π΄Π°Π½Π½Ρ‹Ρ…).

БчитаСтся, Ρ‡Ρ‚ΠΎ Π²Ρ‹ΡˆΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Π»ΡƒΡ‡ΡˆΠ΅, Ссли ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ… с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сортировкой ΠΏΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠΎΠΌ. МоТно ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ благодаря Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌ сортировки Ρƒ нас сСгодня Π΅ΡΡ‚ΡŒ искусствСнный ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚, Π³Π»ΡƒΠ±ΠΈΠ½Π½Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ· Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π΄Π°ΠΆΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚.

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π€ΡƒΡ€ΡŒΠ΅. БыстроС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π€ΡƒΡ€ΡŒΠ΅

2-20219-04d879.jpg

Π­Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½ΠΎ-Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ устройства ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ для функционирования, Π² Ρ‚ΠΎΠΌ числС ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ прСобразования Π€ΡƒΡ€ΡŒΠ΅. И Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½, ΠΈ смартфон, ΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€, ΠΈ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ‚ΠΎΡ€, ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ β€” всё это Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π±Π΅Π· Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² для функционирования, Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ это.

Алгоритм ДСйкстры

3-20219-08cdeb.jpg Π‘Π΅Π· этого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅, Π½Π΅ смоТСт эффСктивно Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚. Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π΅ΡˆΠ°ΡŽΡ‚ΡΡ Π·Π°Π΄Π°Ρ‡ΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° прСдставляСтся Π² Π²ΠΈΠ΄Π΅ Π³Ρ€Π°Ρ„Π°, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ поиск Π½Π°ΠΈΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠ΅Π³ΠΎ ΠΏΡƒΡ‚ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ 2-мя ΡƒΠ·Π»Π°ΠΌΠΈ. Π”Π°ΠΆΠ΅ сСгодня, ΠΊΠΎΠ³Π΄Π° Ρƒ нас Π΅ΡΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΡˆΠ΅, программисты ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ поиск ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠ΅Π³ΠΎ ΠΏΡƒΡ‚ΠΈ, Ссли Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Ρ‘Ρ‚ ΠΎ систСмах, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½ΠΎΠΉ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Алгоритм RSA

Π­Ρ‚ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΏΡ€ΠΈΡˆΡ‘Π» ΠΊ Π½Π°ΠΌ ΠΈΠ· ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ. Он сдСлал ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΡŽ доступной всСм, ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ² Π΅Ρ‘ Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅. Π’ΠΎΠΎΠ±Ρ‰Π΅, RSA-Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сдСлан для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ простой Π·Π°Π΄Π°Ρ‡ΠΈ с Π½Π΅ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ. Он позволяСт Π΄Π΅Π»ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ ΠΈ нСзависимыми ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°ΠΌΠΈ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅.

Алгоритм бСзопасного Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ

Ну, это Π½Π΅ совсСм Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ. Π‘ΠΊΠΎΡ€Π΅Π΅, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ сСмСйством криптографичСских Ρ…ΡΡˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (SHA-1, SHA-2 ΠΈ Ρ‚.Π΄.), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ Π² БША ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ ваТнСйшСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для всСго ΠΌΠΈΡ€Π°. Антивирусы, элСктронная ΠΏΠΎΡ‡Ρ‚Π°, ΠΌΠ°Π³Π°Π·ΠΈΠ½Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρ‹ ΠΈ Ρ‚. ΠΏ. β€” Π²ΠΎ всём этом ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ бСзопасного Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ (Π½Π° Π΄Π΅Π»Π΅ Ρ…ΡΡˆ являСтся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Ρ‹). Алгоритм Π½ΡƒΠΆΠ΅Π½ для опрСдСлСния, ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π»ΠΈ Π²Π°ΠΌ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ‚Π΅Π»ΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ ΠΏΠΎΠ΄Π²Π΅Ρ€Π³Π»ΠΈΡΡŒ Π»ΠΈ Π²Ρ‹ Ρ„ΠΈΡˆΠΈΠ½Π³Ρƒ ΠΈΠ»ΠΈ Π°Ρ‚Π°ΠΊΠ΅ Β«Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ посСрСдинС».

Анализ связСй

4-20219-54d473.jpg ИдСя Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π°Π½Π°Π»ΠΈΠ·Π° связСй проста. НапримСр, Π²Ρ‹ Π»Π΅Π³ΠΊΠΎ смоТСтС ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π³Ρ€Π°Ρ„ΠΈΠΊ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, Ρ‡Ρ‚ΠΎ свСдёт Π·Π°Π΄Π°Ρ‡Ρƒ ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ уровня собствСнной значимости ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°. Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ структурС Π³Ρ€Π°Ρ„Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π²Π°ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½ Π² систСму.

Алгоритм Π±Ρ‹Π» создан Π² Π΄Π°Π»Ρ‘ΠΊΠΎΠΌ 1976 Π³ΠΎΠ΄Ρƒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ сСгодня ΠΏΡ€ΠΈ Ρ€Π°Π½ΠΆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ страниц Π² процСссС поиска Π² Google, ΠΏΡ€ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π»Π΅Π½Ρ‚Ρ‹ новостСй, ΠΏΡ€ΠΈ составлСнии списка Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π΄Ρ€ΡƒΠ·Π΅ΠΉ Π½Π° Facebook, ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π°ΠΌΠΈ Π² LinkedIn ΠΈ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… случаях. Π›ΡŽΠ±ΠΎΠΉ ΠΈΠ· пСрСчислСнных сСрвисов Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ сама ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ° ΠΏΠΎ сути Π½Π΅ мСняСтся.

ΠŸΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ-ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Π»ΡŒΠ½ΠΎ-Π΄ΠΈΡ„Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ

5-20219-8205e6.jpg Пользовались Π»ΠΈ Π²Ρ‹ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΌ, самолётом, сотовой связью? Π’ΠΈΠ΄Π΅Π»ΠΈ Π»ΠΈ Π²Ρ‹ Ρ€ΠΎΠ±ΠΎΡ‚Π° Π² Ρ€Π°Π±ΠΎΡ‚Π΅? Π’ΠΎ всСх этих случаях Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²ΠΈΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π² дСйствии.

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

Алгоритмы сТатия Π΄Π°Π½Π½Ρ‹Ρ…

Π‘Π»ΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ для сТатия Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ΅Π½, вСдь Π² зависимости ΠΎΡ‚ поставлСнных Π·Π°Π΄Π°Ρ‡ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΎΡ‚ zip Π΄ΠΎ mp3 Π»ΠΈΠ±ΠΎ ΠΎΡ‚ JPEG Π΄ΠΎ MPEG-2. Но эти Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Π²Π°ΠΆΠ½Ρ‹ ΠΏΠΎΡ‡Ρ‚ΠΈ для всСх сфСр Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Алгоритм сТатия β€” это Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ Π·Π°Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚. Он позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ сТатиС Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° Π²Π΅Π±-страницС ΠΏΡ€ΠΈ ΠΈΡ… Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€. Или задСйствуСтся Π² Π±Π°Π·Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, Π²ΠΈΠ΄Π΅ΠΎ, ΠΌΡƒΠ·Ρ‹ΠΊΠ΅, ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… вычислСниях. По сути Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ сТатия Π΄Π°Π½Π½Ρ‹Ρ… Π΄Π΅Π»Π°ΡŽΡ‚ систСмы дСшСвлС ΠΈ эффСктивнСС.

Алгоритм Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ случайных чисСл

6-20219-5732f3.jpg На самом Π΄Π΅Π»Π΅ Π½Π΅ сущСствуСт «настоящСго» Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° случайных чисСл, ΠΈ ΠΌΡ‹ ΡƒΠΆΠ΅ ΠΎΠ± этом Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ. Π—Π°Ρ‚ΠΎ Ρƒ нас ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ псСвдослучайных чисСл, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прСкрасно с этим ΡΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ. Они ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΡƒΡŽ Π²Π°Ρ€ΠΈΠ°Ρ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ использования: ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ прилоТСния Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, криптография, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ, Π²ΠΈΠ΄Π΅ΠΎΠΈΠ³Ρ€Ρ‹, искусствСнный ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚, тСсты ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ Ρ‚. Π΄.

Π£Π·Π½Π°Ρ‚ΡŒ большС ΠΌΠΎΠΆΠ½ΠΎ Π½Π° курсС «ΠΠ»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ²». Π–Π΄Ρ‘ΠΌ вас!

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ слова ΠΠ›Π“ΠžΠ Π˜Π’Πœ. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΠ›Π“ΠžΠ Π˜Π’Πœ?

Алгори́тм β€” Π½Π°Π±ΠΎΡ€ инструкций, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΡ… порядок дСйствий исполнитСля для достиТСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°. Π’ старой Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ²ΠΊΠ΅ вмСсто слова «порядок» использовалось слово Β«ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΒ», Π½ΠΎ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ развития ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² слово Β«ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΒ» стали Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰ΠΈΠΌ словом «порядок». НСзависимыС инструкции ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΌ порядкС, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ, Ссли это ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ исполнитСли.

Π Π°Π½Π΅Π΅ Π² русском языкС писали Β«Π°Π»Π³ΠΎΡ€ΠΈΡ„ΠΌΒ», сСйчас Ρ‚Π°ΠΊΠΎΠ΅ написаниС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ€Π΅Π΄ΠΊΠΎ, Π½ΠΎ, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΈΠΌΠ΅Π΅Ρ‚ мСсто ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ (Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ„ΠΌ ΠœΠ°Ρ€ΠΊΠΎΠ²Π°).

Часто Π² качСствС исполнитСля выступаСт ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€, Π½ΠΎ понятиС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ относится ΠΊ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ, Ρ‚Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‘Ρ‚ΠΊΠΎ описанный Ρ€Π΅Ρ†Π΅ΠΏΡ‚ приготовлСния блюда Ρ‚Π°ΠΊΠΆΠ΅ являСтся Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ, Π² Ρ‚Π°ΠΊΠΎΠΌ случаС исполнитСлСм являСтся Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ (Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, Ρ‚ΠΊΠ°Ρ†ΠΊΠΈΠΉ станок, ΠΈ ΠΏΡ€.).

МоТно Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ (ΠΎ Π½ΠΈΡ… Π² основном ΠΈΠ΄Π΅Ρ‚ Π΄Π°Π»Π΅Π΅ Ρ€Π΅Ρ‡ΡŒ), ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅. Π’Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎ сути ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅, рСализуя вычислСниС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π‘Π΅ΠΌΠ°Π½Ρ‚ΠΈΠΊΠ° ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² сущСствСнным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΈ ΡΠ²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΊ Π²Ρ‹Π΄Π°Ρ‡Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… воздСйствий Π»ΠΈΠ±ΠΎ Π² Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π»ΠΈΠ±ΠΎ Π² качСствС Ρ€Π΅Π°ΠΊΡ†ΠΈΠΈ Π½Π° внСшниС события (Π² этом случаС, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ ΠΏΡ€ΠΈ бСсконСчном Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ).

ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° относится ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ, основным, базисным понятиям ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ. Π’Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ процСссы алгоритмичСского Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π° (арифмСтичСскиС дСйствия Π½Π°Π΄ Ρ†Π΅Π»Ρ‹ΠΌΠΈ числами, Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ наибольшСго ΠΎΠ±Ρ‰Π΅Π³ΠΎ дСлитСля Π΄Π²ΡƒΡ… чисСл ΠΈ Ρ‚. Π΄.) извСстны чСловСчСству с Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠΉ дрСвности. Однако Π² явном Π²ΠΈΠ΄Π΅ понятиС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π»ΠΎΡΡŒ лишь Π² Π½Π°Ρ‡Π°Π»Π΅ XX Π²Π΅ΠΊΠ°.

Частичная формализация понятия Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π½Π°Ρ‡Π°Π»Π°ΡΡŒ с ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ (Π½Π΅ΠΌ. Entscheidungsproblem), ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ сформулировал Π”Π°Π²ΠΈΠ΄ Π“ΠΈΠ»ΡŒΠ±Π΅Ρ€Ρ‚ Π² 1928 Π³ΠΎΠ΄Ρƒ. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ этапы Ρ„ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±Ρ‹Π»ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ для опрСдСлСния эффСктивных вычислСний ΠΈΠ»ΠΈ «эффСктивного ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Β»; срСди Ρ‚Π°ΠΊΠΈΡ… Ρ„ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ β€” рСкурсивныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ГСдСля β€” Π­Ρ€Π±Ρ€Π°Π½Π° β€” Клини 1930, 1934 ΠΈ 1935 Π³Π³., Ξ»-исчислСниС Алонзо Π§Ρ‘Ρ€Ρ‡Π° 1936 Π³., Β«Π€ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠ° 1Β» Эмиля ΠŸΠΎΡΡ‚Π° 1936 Π³ΠΎΠ΄Π° ΠΈ машина Π’ΡŒΡŽΡ€ΠΈΠ½Π³Π°. Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ являСтся базисным понятиСм ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ качСствСнно Π½ΠΎΠ²ΠΎΠ΅ понятиС ΠΊΠ°ΠΊ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ приблиТСния ΠΊ ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌΡƒ Π°Π±ΡΠΎΠ»ΡŽΡ‚Ρƒ. Π’ соврСмСнном ΠΌΠΈΡ€Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π² Ρ„ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ составляСт основу образования Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…, ΠΏΠΎ подобию.

ΠΠ›Π“ΠžΠ Π˜Π’Πœ | ЭнциклопСдия ΠšΡ€ΡƒΠ³ΠΎΡΠ²Π΅Ρ‚

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ

ΠΠ›Π“ΠžΠ Π˜Π’Πœ – систСма ΠΏΡ€Π°Π²ΠΈΠ», сформулированная Π½Π° понятном ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŽ языкС, которая опрСдСляСт процСсс ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΎΡ‚ допустимых исходных Π΄Π°Π½Π½Ρ‹Ρ… ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ ΠΈ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ свойствами массовости, конСчности, опрСдСлСнности, дСтСрминированности.

Π‘Π»ΠΎΠ²ΠΎ Β«Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΒ» происходит ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ Π²Π΅Π»ΠΈΠΊΠΎΠ³ΠΎ срСднСазиатского ΡƒΡ‡Π΅Π½ΠΎΠ³ΠΎ 8–9 Π²Π². Аль-Π₯ΠΎΡ€Π΅Π·ΠΌΠΈ (Π₯ΠΎΡ€Π΅Π·ΠΌ – историчСская ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π½Π° Ρ‚Π΅Ρ€Ρ€ΠΈΡ‚ΠΎΡ€ΠΈΠΈ соврСмСнного УзбСкистана). Из матСматичСских Ρ€Π°Π±ΠΎΡ‚ Аль-Π₯ΠΎΡ€Π΅Π·ΠΌΠΈ Π΄ΠΎ нас дошли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π΅ – алгСбраичСская (ΠΎΡ‚ названия этой ΠΊΠ½ΠΈΠ³ΠΈ Ρ€ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ слово Π°Π»Π³Π΅Π±Ρ€Π°) ΠΈ арифмСтичСская. Вторая ΠΊΠ½ΠΈΠ³Π° Π΄ΠΎΠ»Π³ΠΎΠ΅ врСмя ΡΡ‡ΠΈΡ‚Π°Π»Π°ΡΡŒ потСрянной, Π½ΠΎ Π² 1857 Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ ΠšΠ΅ΠΌΠ±Ρ€ΠΈΠ΄ΠΆΡΠΊΠΎΠ³ΠΎ унивСрситСта Π±Ρ‹Π» Π½Π°ΠΉΠ΄Π΅Π½ Π΅Π΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π½Π° латинский язык. Π’ Π½Π΅ΠΉ описаны Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° арифмСтичСских дСйствий, практичСски Ρ‚Π΅ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΈ сСйчас. ΠŸΠ΅Ρ€Π²Ρ‹Π΅ строки этой ΠΊΠ½ΠΈΠ³ΠΈ Π±Ρ‹Π»ΠΈ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½Ρ‹ Ρ‚Π°ΠΊ: Β«Π‘ΠΊΠ°Π·Π°Π» Алгоритми. Π’ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π΄ΠΎΠ»ΠΆΠ½ΡƒΡŽ Ρ…Π²Π°Π»Ρƒ Π‘ΠΎΠ³Ρƒ, Π½Π°ΡˆΠ΅ΠΌΡƒ воТдю ΠΈ Π·Π°Ρ‰ΠΈΡ‚Π½ΠΈΠΊΡƒΒ». Π’Π°ΠΊ имя Аль-Π₯ΠΎΡ€Π΅Π·ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΡˆΠ»ΠΎ Π² Алгоритми, ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΈ появилось слово Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ. Π’Π΅Ρ€ΠΌΠΈΠ½ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ употрСблялся для обозначСния Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… арифмСтичСских ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΈΠΌΠ΅Π½Π½ΠΎ Π² Ρ‚Π°ΠΊΠΎΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ ΠΎΠ½ ΠΈ вошСл Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ СвропСйскиС языки. НапримСр, Π² Π°Π²Ρ‚ΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½ΠΎΠΌ словарС английского языка Webster’s New World Dictionary, ΠΈΠ·Π΄Π°Π½Π½ΠΎΠΌ Π² 1957, слово Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ снабТСно ΠΏΠΎΠΌΠ΅Ρ‚ΠΊΠΎΠΉ Β«ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅Π΅Β» ΠΈ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ арифмСтичСских дСйствий с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ арабских Ρ†ΠΈΡ„Ρ€.

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

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° опрСдСлСния понятия Β«Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΒ».

На протяТСнии ΠΌΠ½ΠΎΠ³ΠΈΡ… Π²Π΅ΠΊΠΎΠ² понятиС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΡΠ²ΡΠ·Ρ‹Π²Π°Π»ΠΎΡΡŒ с числами ΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ простыми дСйствиями Π½Π°Π΄ Π½ΠΈΠΌΠΈ, Π΄Π° ΠΈ сама ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ° Π±Ρ‹Π»Π°, ΠΏΠΎ большСй части, Π½Π°ΡƒΠΊΠΎΠΉ ΠΎ вычислСниях, Π½Π°ΡƒΠΊΠΎΠΉ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ. Π§Π°Ρ‰Π΅ всСго Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΠ»ΠΈΡΡŒ Π² Π²ΠΈΠ΄Π΅ матСматичСских Ρ„ΠΎΡ€ΠΌΡƒΠ». ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ элСмСнтарных шагов Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° задавался расстановкой скобок, Π° сами шаги Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π»ΠΈΡΡŒ Π² Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ арифмСтичСских ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ (ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ равСнства, нСравСнства ΠΈ Ρ‚.Π΄.). Часто вычислСния Π±Ρ‹Π»ΠΈ Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠΌΠΈ, Π° вычислСния Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ – Ρ‚Ρ€ΡƒΠ΄ΠΎΠ΅ΠΌΠΊΠΈΠΌΠΈ, Π½ΠΎ ΡΡƒΡ‚ΡŒ самого Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ процСсса ΠΎΡΡ‚Π°Π²Π°Π»Π°ΡΡŒ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠΉ. Π£ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΎΠ² Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π»Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ Π² осознании ΠΈ строгом ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ понятия Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, Π² Π΅Π³ΠΎ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΈ. Но с Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ΠΌ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ появлялись Π½ΠΎΠ²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ: Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹, Π³Ρ€Π°Ρ„Ρ‹, ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, мноТСства ΠΈ Π΄Ρ€. Как ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ для Π½ΠΈΡ… ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΡΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, ΠΊΠ°ΠΊΠΈΠ΅ шаги ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ элСмСнтарными? Π’ 1920-Ρ… Π·Π°Π΄Π°Ρ‡Π° Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ опрСдСлСния понятия Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° стала ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ. Π’ Ρ‚ΠΎ врСмя сущСствовало Π΄Π²Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Π½Π° матСматичСскиС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹:

ВсС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ алгоритмичСски Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠΌΡ‹, Π½ΠΎ для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π΅Ρ‰Π΅ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΅Ρ‰Π΅ Π½Π΅ Ρ€Π°Π·Π²ΠΈΡ‚Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π·Π΄Π΅Π»Ρ‹ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ.

Π•ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ.

ИдСя ΠΎ сущСствовании алгоритмичСски Π½Π΅Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠΌΡ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ оказалась Π²Π΅Ρ€Π½ΠΎΠΉ, Π½ΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π΅ ΠΎΠ±ΠΎΡΠ½ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±Ρ‹Π»ΠΎ Π΄Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠΈ Π²Ρ‹Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΈ ΠΊ возникновСнию Ρ‚Π΅ΠΎΡ€ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ вошли Ρ‚Ρ€ΡƒΠ΄Ρ‹ ΠΌΠ½ΠΎΠ³ΠΈΡ… извСстных ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΎΠ² – К.Π“Π΅Π΄Π΅Π»ΡŒ, К.Π§Π΅Ρ€Ρ‡, Π‘.Клини, А.Π’ΡŒΡŽΡ€ΠΈΠ½Π³, Π­.ΠŸΠΎΡΡ‚, А.ΠœΠ°Ρ€ΠΊΠΎΠ², А.ΠšΠΎΠ»ΠΌΠΎΠ³ΠΎΡ€ΠΎΠ² ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

Π’ΠΎΡ‡Π½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ понятия Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π΄Π°Π»ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π½Π΅Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠΌΠΎΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΡ… матСматичСских ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

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

ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ Β«Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°Β».

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

ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π±Π»ΠΈΠ·ΠΊΠΎ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ понятиям, Ρ‚Π°ΠΊΠΈΠΌ, ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄ (ΠΌΠ΅Ρ‚ΠΎΠ΄ Гаусса Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ систСм Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ), способ (способ построСния Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° ΠΏΠΎ Ρ‚Ρ€Π΅ΠΌ сторонам с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ циркуля ΠΈ Π»ΠΈΠ½Π΅ΠΉΠΊΠΈ). МоТно ΡΡ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ основныС особСнности ΠΈΠΌΠ΅Π½Π½ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ².

НаличиС исходных Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°.

Алгоритм – это Ρ‚ΠΎΡ‡Π½ΠΎ опрСдСлСнная инструкция, ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ примСняя ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΊ исходным Π΄Π°Π½Π½Ρ‹ΠΌ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ мноТСство ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², допустимых Π² качСствС исходных Π΄Π°Π½Π½Ρ‹Ρ…. НапримСр, Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ дСлСния вСщСствСнных чисСл Π΄Π΅Π»ΠΈΠΌΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹ΠΌ, Π° Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ.

ΠœΠ°ΡΡΠΎΠ²ΠΎΡΡ‚ΡŒ, Ρ‚.Π΅. Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ. Алгоритм слуТит, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ, Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ класса Π·Π°Π΄Π°Ρ‡. Π’Π°ΠΊ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ слоТСния ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΊ любой ΠΏΠ°Ρ€Π΅ Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹Ρ… чисСл.

Π”Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ.

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

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ.

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

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΡΡ‚ΡŒ.

На ΠΊΠ°ΠΆΠ΄ΠΎΠΌ шагС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Ρƒ исполнитСля Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ достаточно ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŽ Π½ΡƒΠΆΠ½ΠΎ Ρ‡Π΅Ρ‚ΠΊΠΎ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΠ½ выполняСтся. Π¨Π°Π³ΠΈ инструкции Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ достаточно простыми, элСмСнтарными, Π° ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ смысл ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ шага ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ дСйствий, ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ (ΠΏΡ€ΠΈ вычислСнии ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΈ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° Π»ΡŽΠ±ΠΎΠΌΡƒ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŽ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΌΠ΅Ρ‚ΡŒ ΡƒΠΌΠ½ΠΎΠΆΠ°Ρ‚ΡŒ ΠΈ Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°ΠΊ Β«xΒ» ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊΠ°ΠΊ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅). ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ вопрос ΠΎ Π²Ρ‹Π±ΠΎΡ€Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ прСдставлСния Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ΅Π½. ЀактичСски Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ Ρ‚ΠΎΠΌ, Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС записан Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ.

Π€ΠΎΡ€ΠΌΡ‹ прСдставлСния Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ².

Для записи Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ язык, ΠΏΡ€ΠΈ этом ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ язык Π²Ρ‹Π±Ρ€Π°Π½. Π—Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Π½Π° русском языкС (ΠΈΠ»ΠΈ любом Π΄Ρ€ΡƒΠ³ΠΎΠΌ СстСствСнном языкС) Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΎ ΠΈ Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎ.

НапримСр, описаниС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π•Π²ΠΊΠ»ΠΈΠ΄Π° нахоТдСния ΠΠžΠ” (наибольшСго ΠΎΠ±Ρ‰Π΅Π³ΠΎ дСлитСля) Π΄Π²ΡƒΡ… Ρ†Π΅Π»Ρ‹Ρ… ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… чисСл ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ прСдставлСно Π² Π²ΠΈΠ΄Π΅ Ρ‚Ρ€Π΅Ρ… шагов. Π¨Π°Π³ 1: Π Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ m Π½Π° n. ΠŸΡƒΡΡ‚ΡŒ p – остаток ΠΎΡ‚ дСлСния.

Π¨Π°Π³ 2: Если p Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠ»ΡŽ, Ρ‚ΠΎ n ΠΈ Π΅ΡΡ‚ΡŒ исходный ΠΠžΠ”.

Π¨Π°Π³ 3: Если p Π½Π΅ Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠ»ΡŽ, Ρ‚ΠΎ сдСлаСм m Ρ€Π°Π²Π½Ρ‹ΠΌ n, Π° n Ρ€Π°Π²Π½Ρ‹ΠΌ p. Π’Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ ΡˆΠ°Π³Ρƒ 1.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ здСсь запись Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° нахоТдСния ΠΠžΠ” ΠΎΡ‡Π΅Π½ΡŒ упрощСнная. Π—Π°ΠΏΠΈΡΡŒ, данная Π•Π²ΠΊΠ»ΠΈΠ΄ΠΎΠΌ, прСдставляСт собой страницу тСкста, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ дСйствий сущСствСнно слоТнСй.

Одним ΠΈΠ· распространСнных способов записи Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² являСтся запись Π½Π° языкС Π±Π»ΠΎΠΊ-схСм. Π—Π°ΠΏΠΈΡΡŒ прСдставляСт собой Π½Π°Π±ΠΎΡ€ элСмСнтов (Π±Π»ΠΎΠΊΠΎΠ²), соСдинСнных стрСлками. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт – это «шаг» Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ Π±Π»ΠΎΠΊ-схСмы дСлятся Π½Π° Π΄Π²Π° Π²ΠΈΠ΄Π°. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹, содСрТащиС ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ выполнСния ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ дСйствия, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°ΠΌΠΈ, Π° элСмСнты, содСрТащиС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ условия – Ρ€ΠΎΠΌΠ±Π°ΠΌΠΈ. Из ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ² всСгда Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° стрСлка (Π²Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ нСсколько), Π° ΠΈΠ· Ρ€ΠΎΠΌΠ±ΠΎΠ² – Π΄Π²Π΅ (ΠΎΠ΄Π½Π° ΠΈΠ· Π½ΠΈΡ… помСчаСтся словом Β«Π΄Π°Β», другая – словом Β«Π½Π΅Ρ‚Β», ΠΎΠ½ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, соотвСтствСнно, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΠΈΠ»ΠΈ Π½Π΅Ρ‚ провСряСмоС условиС).

На рисункС прСдставлСна Π±Π»ΠΎΠΊ-схСма Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° нахоТдСния ΠΠžΠ”:

ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊ-схСм ΠΈΠ· элСмСнтов всСго лишь Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ позволяСт Ρ„ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот процСсс.

Ѐормализация понятия Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ². ВСория Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ².

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

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΎΠ²: машина ΠŸΠΎΡΡ‚Π° ΠΈ машина Π’ΡŒΡŽΡ€ΠΈΠ½Π³Π°.

Машина ΠŸΠΎΡΡ‚Π° – абстрактная Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ машина, прСдлоТСнная ΠŸΠΎΡΡ‚ΠΎΠΌ (Emil L.Post), которая отличаСтся ΠΎΡ‚ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π’ΡŒΡŽΡ€ΠΈΠ½Π³Π° большСй простотой. ОбС ΠΌΠ°ΡˆΠΈΠ½Ρ‹ «эквивалСнтны» ΠΈ Π±Ρ‹Π»ΠΈ созданы для уточнСния понятия Β«Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΒ».

Π’ 1935 амСриканский ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊ ΠŸΠΎΡΡ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» Π² Β«Π–ΡƒΡ€Π½Π°Π»Π΅ символичСской Π»ΠΎΠ³ΠΈΠΊΠΈΒ» ΡΡ‚Π°Ρ‚ΡŒΡŽ Π€ΠΈΠ½ΠΈΡ‚Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€Π½Ρ‹Π΅ процСссы, Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠ° 1. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΈ появившСйся ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π² Π’Ρ€ΡƒΠ΄Π°Ρ… Лондонского матСматичСского общСства ΡΡ‚Π°Ρ‚ΡŒΠ΅ английского ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ° Π’ΡŒΡŽΡ€ΠΈΠ½Π³Π° О вычислимых числах с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π±Ρ‹Π»ΠΈ Π΄Π°Π½Ρ‹ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ уточнСния понятия Β«Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΒ». Π’Π°ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ΄Π΅ΠΉ ΠŸΠΎΡΡ‚Π° состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π» ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ способ прСобразования ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ построил Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ систСму (алгоритмичСская систСма ΠŸΠΎΡΡ‚Π°). ΠŸΠΎΡΡ‚ Π΄ΠΎΠΊΠ°Π·Π°Π», Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ систСма ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ алгоритмичСской ΠΏΠΎΠ»Π½ΠΎΡ‚ΠΎΠΉ. Π’ 1967 профСссор Π’.УспСнский пСрСсказал эти ΡΡ‚Π°Ρ‚ΡŒΠΈ с Π½ΠΎΠ²Ρ‹Ρ… ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ. Он Π²Π²Π΅Π» Ρ‚Π΅Ρ€ΠΌΠΈΠ½ «машина ΠŸΠΎΡΡ‚Π°Β». Машина ΠŸΠΎΡΡ‚Π° – абстрактная машина, которая Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΌ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ, ΠΎΠ½Π° Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ: Ссли для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΌΠ°ΡˆΠΈΠ½Ρƒ ΠŸΠΎΡΡ‚Π°, Ρ‚ΠΎ ΠΎΠ½Π° алгоритмичСски Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠΌΠ°. Π’ 1970 машина ΠŸΠΎΡΡ‚Π° Π±Ρ‹Π»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° Π² ΠΌΠ΅Ρ‚Π°Π»Π»Π΅ Π² Π‘ΠΈΠΌΡ„Π΅Ρ€ΠΎΠΏΠΎΠ»ΡŒΡΠΊΠΎΠΌ унивСрситСтС. Машина Π’ΡŒΡŽΡ€ΠΈΠ½Π³Π° Π±Ρ‹Π»Π° построСна Π² ΠΌΠ΅Ρ‚Π°Π»Π»Π΅ Π² 1973 Π² Малой ΠšΡ€Ρ‹ΠΌΡΠΊΠΎΠΉ АкадСмии Наук.

Абстрактная машина ΠŸΠΎΡΡ‚Π° прСдставляСт собой Π±Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ Π»Π΅Π½Ρ‚Ρƒ, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π½Π° ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ ΠΊΠ»Π΅Ρ‚ΠΊΠΈ, каТдая ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ пустой, Π»ΠΈΠ±ΠΎ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ Β«VΒ». Π£ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π΅ΡΡ‚ΡŒ Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°, которая ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ вдоль Π»Π΅Π½Ρ‚Ρ‹ Π½Π° ΠΎΠ΄Π½Ρƒ ΠΊΠ»Π΅Ρ‚ΠΊΡƒ Π²ΠΏΡ€Π°Π²ΠΎ ΠΈΠ»ΠΈ Π²Π»Π΅Π²ΠΎ, Π½Π°Π½ΠΎΡΠΈΡ‚ΡŒ Π² ΠΊΠ»Π΅Ρ‚ΠΊΡƒ Π»Π΅Π½Ρ‚Ρ‹ ΠΌΠ΅Ρ‚ΠΊΡƒ, Ссли этой ΠΌΠ΅Ρ‚ΠΊΠΈ Ρ‚Π°ΠΌ Ρ€Π°Π½Π΅Π΅ Π½Π΅ Π±Ρ‹Π»ΠΎ, ΡΡ‚ΠΈΡ€Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΊΡƒ, Ссли ΠΎΠ½Π° Π±Ρ‹Π»Π°, Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π² ΠΊΠ»Π΅Ρ‚ΠΊΠ΅ ΠΌΠ΅Ρ‚ΠΊΠΈ. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΊΠ°ΠΌΠΈ ΠΊΠ»Π΅Ρ‚ΠΊΠ°Ρ… Π»Π΅Π½Ρ‚Ρ‹ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΡƒΠ΅Ρ‚ состояниС Π»Π΅Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π² процСссС Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π’ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° находится Π½Π°Π΄ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΊΠ»Π΅Ρ‚ΠΎΠΊ Π»Π΅Π½Ρ‚Ρ‹ ΠΈ, ΠΊΠ°ΠΊ говорят, ΠΎΠ±ΠΎΠ·Ρ€Π΅Π²Π°Π΅Ρ‚ Π΅Π΅. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ мСстополоТСния Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ вмСстС с состояниСм Π»Π΅Π½Ρ‚Ρ‹ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΡƒΠ΅Ρ‚ состояниС ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠŸΠΎΡΡ‚Π°. Π Π°Π±ΠΎΡ‚Π° ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠŸΠΎΡΡ‚Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° пСрСдвигаСтся вдоль Π»Π΅Π½Ρ‚Ρ‹ (Π½Π° ΠΎΠ΄Π½Ρƒ ΠΊΠ»Π΅Ρ‚ΠΊΡƒ Π·Π° ΠΎΠ΄ΠΈΠ½ шаг) Π²Π»Π΅Π²ΠΎ ΠΈΠ»ΠΈ Π²ΠΏΡ€Π°Π²ΠΎ, наносит ΠΈΠ»ΠΈ стираСт ΠΌΠ΅Ρ‚ΠΊΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ распознаСт, Π΅ΡΡ‚ΡŒ Π»ΠΈ ΠΌΠ΅Ρ‚ΠΊΠ° Π² ΠΊΠ»Π΅Ρ‚ΠΊΠ΅ Π² соотвСтствии с Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ, состоящСй ΠΈΠ· ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄.

Машина Π’ΡŒΡŽΡ€ΠΈΠ½Π³Π° состоит ΠΈΠ· счСтной Π»Π΅Π½Ρ‚Ρ‹ (Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π½Π° ячСйки ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠΉ слСва, Π½ΠΎ Π½Π΅ справа), Ρ‡ΠΈΡ‚Π°ΡŽΡ‰Π΅ΠΉ ΠΈ ΠΏΠΈΡˆΡƒΡ‰Π΅ΠΉ Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, лСнтопротяТного ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ устройства, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· дискрСтных состояний q0, q1, …, qs , ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ совокупности (Π°Π»Ρ„Π°Π²ΠΈΡ‚Ρƒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… состояний), ΠΏΡ€ΠΈ этом q0 называСтся Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ состояниСм. Π§ΠΈΡ‚Π°ΡŽΡ‰Π°Ρ ΠΈ ΠΏΠΈΡˆΡƒΡ‰Π°Ρ Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π±ΡƒΠΊΠ²Ρ‹ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ Π°Π»Ρ„Π°Π²ΠΈΡ‚Π° A = {a0, a1, …, at }, ΡΡ‚ΠΈΡ€Π°Ρ‚ΡŒ ΠΈΡ… ΠΈ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ. КаТдая ячСйка Π»Π΅Π½Ρ‚Ρ‹ Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ занята Π±ΡƒΠΊΠ²ΠΎΠΉ ΠΈΠ· мноТСства А. Π§Π°Ρ‰Π΅ всСго встрСчаСтся Π±ΡƒΠΊΠ²Π° Π°0 – Β«ΠΏΡ€ΠΎΠ±Π΅Π»Β». Π“ΠΎΠ»ΠΎΠ²ΠΊΠ° находится Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π°Π΄ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ячСйкой Π»Π΅Π½Ρ‚Ρ‹ – Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ ячСйкой. ЛСнтопротяТный ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π»Π΅Π½Ρ‚Ρƒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° оказываСтся Π½Π°Π΄ сосСднСй ячСйкой Π»Π΅Π½Ρ‚Ρ‹, ΠΏΡ€ΠΈ этом Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ситуация Π²Ρ‹Ρ…ΠΎΠ΄Π° Π·Π° Π»Π΅Π²Ρ‹ΠΉ ΠΊΡ€Π°ΠΉ Π»Π΅Π½Ρ‚Ρ‹, которая являСтся Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠΉ (нСдопустимой), ΠΈΠ»ΠΈ машинного останова, ΠΊΠΎΠ³Π΄Π° машина выполняСт прСдписаниС ΠΎΠ± остановкС.

Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ взгляд Π½Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ.

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

Анна Π§ΡƒΠ³Π°ΠΉΠ½ΠΎΠ²Π°

alexxlab

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

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