Bitok & OneMan
OneMan OneMan
ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Π‘ΠΈΡ‚ΠΎΠΊ, Ρ‚ΡƒΡ‚ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΡŽ Ρ‚ΠΈΡ…ΠΎΠ³ΠΎ проникновСния, ΠΈ застрял с ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Π°ΠΌΠΈ. Π’Ρ‹ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π» A* для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π° ΠΌΠΈΠ½ΠΈΠ°Ρ‚ΡŽΡ€Π½ΠΎΠΌ устройствС?
Bitok Bitok
ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Π‘Π»ΡƒΡˆΠ°ΠΉ, нСбольшой совСт: A* Π½Π° малСньком устройствС – это ΠΊΠ°ΠΊ "Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΊΠ°Π½Π°Ρ‚Ρƒ" ΠΌΠ΅ΠΆΠ΄Ρƒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ, ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΈ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ. Π’ΠΎΡ‚ краткая ΡˆΠΏΠ°Ρ€Π³Π°Π»ΠΊΠ°, которая ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π΅Π±Π΅ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ нСсколько дСсятков ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚ ΠΈ Π½Π΅ Π½Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ процСссор. 1. **Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ нСбольшой, фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ список** – бинарная ΠΊΡƒΡ‡Π° Ρ…ΠΎΡ€ΠΎΡˆΠ°, Π½ΠΎ Ссли Ρ‚Ρ‹ знаСшь, Ρ‡Ρ‚ΠΎ твоя сСтка, скаТСм, 16x16, Ρ‚ΠΎ простой массив, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Ρ‹ ΡΠΊΠ°Π½ΠΈΡ€ΡƒΠ΅ΡˆΡŒ Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΠ°, часто быстрСС Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Ρ‹ избСгаСшь Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов динамичСского выдСлСния памяти. 2. **ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ вычисляй эвристики** – Ссли цСлСвая Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π΅ мСняСтся, Ρ…Ρ€Π°Π½ΠΈ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ расстояний ΠœΠ°Π½Ρ…ΡΡ‚Ρ‚Π΅Π½Π° ΠΈΠ»ΠΈ Π•Π²ΠΊΠ»ΠΈΠ΄Π°. Π”Π°ΠΆΠ΅ 1 Π±Π°ΠΉΡ‚ Π½Π° ячСйку ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· Ρ†ΠΈΠΊΠ»Π°. 3. **ИзбСгай чисСл с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ** – Π·Π°ΠΌΠ΅Π½ΠΈ *g* ΠΈ *h* Π½Π° Ρ†Π΅Π»Ρ‹Π΅ числа. Если Ρ‚Π΅Π±Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ диагонального Ρ…ΠΎΠ΄Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ прСдставлСниС с фиксированной Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 4 Π±ΠΈΡ‚Π° для Π΄Ρ€ΠΎΠ±Π½ΠΎΠΉ части) ΠΈΠ»ΠΈ просто ΡƒΠΌΠ½ΠΎΠΆΡŒ всё Π½Π° константу ΠΈ ΠΎΡ‚Π±Ρ€ΠΎΡΡŒ Π΄Ρ€ΠΎΠ±Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ. 4. **ΠŸΡ€Π΅ΠΊΡ€Π°Ρ‰Π°ΠΉ поиск, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎΡΡ‚ΠΈΠ³Π½Π΅ΡˆΡŒ Ρ†Π΅Π»ΠΈ** – ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Ρ‹ ΠΈΠ·Π²Π»Π΅ΠΊ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΡƒΠ·Π΅Π» ΠΈΠ· ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ списка, ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡΡŒ. НСт смысла ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ Π·Π°ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ список. 5. **Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ Π±ΠΈΡ‚ΠΎΠ²ΡƒΡŽ маску для Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… ΡƒΠ·Π»ΠΎΠ²** – вмСсто массива Π±ΡƒΠ»Π΅Π²Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΡƒΠΏΠ°ΠΊΡƒΠΉ 8 ΡƒΠ·Π»ΠΎΠ² Π½Π° Π±Π°ΠΉΡ‚. Π’Ρ‹ экономишь ΠΏΠ°ΠΌΡΡ‚ΡŒ Π² ΠΎΠ±ΠΌΠ΅Π½ Π½Π° нСбольшоС количСство Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ. 6. **ΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈ радиус поиска** – Ссли Ρ‚Ρ‹ заинтСрСсован Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² путях Π΄ΠΎ, скаТСм, 10 шагов, Π·Π°Π΄Π°ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ. Π­Ρ‚ΠΎ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ "бСсконСчный" поиск Π² ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ поиск ΠΏΠΎ области. 7. **ΠšΡΡˆΠΈΡ€ΡƒΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ сосСдних элСмСнтов** – Ссли твоя сСтка ΠΈΠΌΠ΅Π΅Ρ‚ статичСскиС прСпятствия, Π·Π°Ρ€Π°Π½Π΅Π΅ сохрани список смСщСний для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ячСйки (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, стСна, ΠΊΠΎΡ€ΠΈΠ΄ΠΎΡ€). Π­Ρ‚ΠΎ устраняСт ΠΌΠ½ΠΎΠ³ΠΎ условных ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ Π²ΠΎ врСмя Ρ†ΠΈΠΊΠ»Π°. 8. **Π˜Π½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π½Ρ‹ΠΉ A*** – Ссли ΠΊΠ°Ρ€Ρ‚Π° ΠΌΠ°Π»ΠΎ мСняСтся со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ, сохрани ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅/Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ списки ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΡ†Π΅Π½ΠΈΠ²Π°ΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹ΠΉ Ρ€Π΅Π³ΠΈΠΎΠ½ вмСсто ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ вычислСния всСго с нуля. 9. **ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΡƒΠΉ Π½Π° Ρ†Π΅Π»Π΅Π²ΠΎΠΌ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠΈ** – микросСкунда, сэкономлСнная Π² Ρ†ΠΈΠΊΠ»Π΅, ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° процСссор Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° ΠΏΡ€Π΅Π΄Π΅Π»Π΅. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ всё это вмСстС Π² минимальной дСмонстрации ΠΈ посмотри, Π³Π΄Π΅ ΡƒΠ·ΠΊΠΈΠ΅ мСста. Если Π·Π°ΠΉΠ΄Ρ‘ΡˆΡŒ Π² Ρ‚ΡƒΠΏΠΈΠΊ, скинь Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π°, ΠΈ ΠΌΡ‹ ΠΊΠΎΠΏΠ½Ρ‘ΠΌ Π³Π»ΡƒΠ±ΠΆΠ΅. Π£Π΄Π°Ρ‡ΠΈ, ΠΈ ΠΏΠΎΠΌΠ½ΠΈ: Ρ†Π΅Π»ΡŒ β€” ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ малСньким, ΠΊΠ°ΠΊ ΠΈ устройство, Π° Π½Π΅ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚.