Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Коллизия Ρ…ΡΡˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

КоллизиСй Ρ…Π΅Ρˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ H называСтся Π΄Π²Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… x ΠΈ y Ρ‚Π°ΠΊΠΈΡ…, Ρ‡Ρ‚ΠΎ H(x) = H(y).

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

Коллизии криптографичСских Ρ…Π΅Ρˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

ΠœΠ΅Ρ€ΠΎΠΉ криптостойкости Ρ…Π΅Ρˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ являСтся Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ нахоТдСния ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ. Π’Π°ΠΊ ΠΊΠ°ΠΊ криптографичСскиС Ρ…Π΅Ρˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для подтвСрТдСния нСизмСнности исходной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для создания Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ подписи), Ρ‚ΠΎ Π½Π°ΠΉΡ‚ΠΈ коллизию для Π½ΠΈΡ… Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ слоТно (Π½Π΅ ΠΏΡ€ΠΎΡ‰Π΅ Ρ‡Π΅ΠΌ ΠΏΠΎΠ»Π½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ΠΎΠΌ).

Для криптографичСских Ρ…Π΅Ρˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° стойкости ΠΊ Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΡŽ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ:

Π’Π°ΠΊΠΆΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ свойством Ρ…Π΅Ρˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ являСтся ΠΈΡ… Π½Π΅ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠΌΠΎΡΡ‚ΡŒ:

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

Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ Π² Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ…

Коллизии ΠΎΡΠ»ΠΎΠΆΠ½ΡΡŽΡ‚ использованиС Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π°Ρ€ΡƒΡˆΠ°ΡŽΡ‚ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ соотвСтствия ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ…Π΅Ρˆ-ΠΊΠΎΠ΄Π°ΠΌΠΈ ΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠΈ для прСодолСния Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΡ… слоТностСй:

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

Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ

Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ (Π°Π½Π³Π». collision resolution) Π² Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π΅, Π·Π°Π΄Π°Ρ‡Π°, Ρ€Π΅ΡˆΠ°Π΅ΠΌΠ°Ρ нСсколькими способами: ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ, открытая адрСсация ΠΈ Ρ‚.Π΄. ΠžΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ ΡΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ количСство ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ.

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

Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

ВрСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ поиска Π² Π½Π°ΠΈΡ…ΡƒΠ΄ΡˆΠ΅ΠΌ случаС ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ Π΄Π»ΠΈΠ½Π΅ списка, Π° Ссли всС [math]n[/math] ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π·Π°Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ Π² ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ ячСйку (создав список Π΄Π»ΠΈΠ½ΠΎΠΉ [math]n[/math] ) врСмя поиска Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½ΠΎ [math]\Theta(n)[/math] плюс врСмя вычислСния Ρ…Π΅Ρˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ Π½ΠΈΡ‡ΡƒΡ‚ΡŒ Π½Π΅ Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Π΅ΠΌ использованиС связного списка для хранСния всСх [math]n[/math] элСмСнтов.

Π›ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

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

Π‘Ρ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΠΈ поиска [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

ΠŸΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ элСмСнт Π² Π·Π°Π½ΡΡ‚ΡƒΡŽ ячСйку [math]i[/math] Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ячСйки [math]i+1, i+2, i+3[/math] ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅, ΠΏΠΎΠΊΠ° Π½Π΅ Π½Π°ΠΉΠ΄Ρ‘ΠΌ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡƒΡŽ ячСйку. Π’ Π½Π΅Ρ‘ ΠΈ запишСм элСмСнт.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° наличия элСмСнта Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° осущСствляСтся Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ добавлСнию: ΠΌΡ‹ провСряСм ячСйку [math]i[/math] ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅, Π² соотвСтствии с Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ стратСгиСй, ΠΏΠΎΠΊΠ° Π½Π΅ Π½Π°ΠΉΠ΄Ρ‘ΠΌ искомый элСмСнт ΠΈΠ»ΠΈ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡƒΡŽ ячСйку.

ΠŸΡ€ΠΈ поискС элСмСнта ΠΌΠΎΠΆΠ΅Ρ‚ получится Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠΉΠ΄Ρ‘ΠΌ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ поиск продолТаСтся, начиная с Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ†Π°, ΠΏΠΎΠΊΠ° ΠΌΡ‹ Π½Π΅ ΠΏΡ€ΠΈΠ΄Ρ‘ΠΌ Π² Ρ‚Ρƒ ячСйку, ΠΎΡ‚ΠΊΡƒΠ΄Π° начинался поиск.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… стратСгий [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌ Π΄Π²Π΅ β€” ΠΊΡ€Π°ΠΉΠ½Π΅ Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнта ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ кластСров β€” ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ занятых ячССк.

ΠšΠ»Π°ΡΡ‚Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡ замСдляСт всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ: ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ трСбуСтся ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ всё большС элСмСнтов, ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ Ρ‚ΠΎΠΆΠ΅. Π§Π΅ΠΌ большС Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ элСмСнтов, Ρ‚Π΅ΠΌ большС Π² Π½Π΅ΠΉ кластСры ΠΈ Ρ‚Π΅ΠΌ Π²Ρ‹ΡˆΠ΅ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ добавляСмый элСмСнт ΠΏΠΎΠΏΠ°Π΄Ρ‘Ρ‚ Π² кластСр. Для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ кластСризации ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅ Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΡƒΠΊΡƒΡˆΠΊΠΈ.

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнта Π±Π΅Π· ΠΏΠΎΠΌΠ΅Ρ‚ΠΎΠΊ [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

РассуТдСниС Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ случай с Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌ поиском Ρ…Π΅ΡˆΠ°. Π‘ΡƒΠ΄Π΅ΠΌ ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ элСмСнта ΡΠ΄Π²ΠΈΠ³Π°Ρ‚ΡŒ всё ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π½Π° [math]q[/math] ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ Π½Π°Π·Π°Π΄. ΠŸΡ€ΠΈ этом:

Учитывая это Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: ΠΏΡ€ΠΈ поискС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ элСмСнта Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ всС ячСйки с Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ…Π΅ΡˆΠ°, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹ΠΉ элСмСнт ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ячСйку, ΠΈ Π·Π°Ρ‚Π΅ΠΌ рСкурсивно Π΅Π³ΠΎ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ. Если Ρ‚Π°ΠΊΠΎΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ячСйки Π½Π΅Ρ‚, Ρ‚ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ элСмСнт ΠΌΠΎΠΆΠ½ΠΎ просто ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ, сторонниС Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ ΠΏΡ€ΠΈ этом Π½Π΅ Ρ€Π°Π·Ρ€ΡƒΡˆΠ°Ρ‚ΡΡ (Ρ‡Π΅Π³ΠΎ нСльзя ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡ€ΠΎ случай ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΈΡ‡Π½ΠΎΠ³ΠΎ поиска).

Π₯Сш-Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ считаСм Π·Π°Ρ†ΠΈΠΊΠ»Π΅Π½Π½ΠΎΠΉ

Π£Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ (ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹):
[math]\triangleright[/math]
Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ [math]j[/math] Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ пСрСмСщаСтся Π²ΠΏΠ΅Ρ€Ρ‘Π΄ Π½Π° [math]q[/math] (с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ рСкурсивных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² [math]\mathrm[/math] ). Π’ΠΎ Π΅ΡΡ‚ΡŒ этот Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠΉΠ΄Ρ‘Ρ‚ ΠΏΠΎ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ ΠΎΡ‚ удаляСмого элСмСнта Π΄ΠΎ послСднСго β€” с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π° [math]\mathrm[/math] собствСнно для нахоТдСния удаляСмого элСмСнта, ΠΌΡ‹ посСтим всС ячСйки Ρ†Π΅ΠΏΠΈ.
[math]\triangleleft[/math]

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ с Π·Π°Ρ†ΠΈΠΊΠ»ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΌΡ‹ Π½Π΅ рассматриваСм, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ссли [math]q[/math] взаимнопросто с Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Ρ‚ΠΎ для зацикливания Π² Π½Π΅ΠΉ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ свободных ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄ΠΎΠΊΠ°ΠΆΠ΅ΠΌ ΠΏΠΎΡ‡Π΅ΠΌΡƒ этот Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. БобствСнно Π½Π°ΠΌ трСбуСтся сохранСниС Ρ‚Ρ€Ρ‘Ρ… условий.

Π”ΠΎΠΊΠ°ΠΆΠ΅ΠΌ ΠΏΠΎ ΠΈΠ½Π΄ΡƒΠΊΡ†ΠΈΠΈ. Если Π½Π° Π΄Π°Π½Π½ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΡ‹ просто удаляСм элСмСнт (Π±Π°Π·Π°), Ρ‚ΠΎ послС Π½Π΅Π³ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅Ρ‚, всё Π²Π΅Ρ€Π½ΠΎ. Если ΠΆΠ΅ Π½Π΅Ρ‚, Ρ‚ΠΎ Π²Ρ‹Π·Π²Π°Π½Π½Ρ‹ΠΉ Π² ΠΊΠΎΠ½Ρ†Π΅ [math]\mathrm[/math] (см. псСвдокод) Π·Π°ΠΌΠ΅Ρ‚Ρ‘Ρ‚ ΡΠΎΠ·Π΄Π°Π½Π½ΡƒΡŽ Π΄Ρ‹Ρ€Ρƒ (скопированный элСмСнт), ΠΈ сам, ΠΏΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ, Π½ΠΎΠ²Ρ‹Ρ… Π½Π΅ создаст.

ΠŸΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ элСмСнт Π±Ρ‹Π» Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ΄Π°Π»Ρ‘Π½. УдаляСм ΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послСднюю ячСйку Π² Ρ†Π΅ΠΏΠΈ, ΠΈ Ссли Π±Ρ‹ Π½Π° Π΅Ρ‘ мСстС Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° Π΄Ρ‹Ρ€Π° для стороннСй Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ, это Π±Ρ‹ ΠΎΠ·Π½Π°Ρ‡Π°Π»ΠΎ Ρ‡Ρ‚ΠΎ элСмСнт, стоящий Π½Π° [math]q[/math] ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ Π½Π°Π·Π°Π΄, ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Π» нашСй ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ°ΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

Π”Π²ΠΎΠΉΠ½ΠΎΠ΅ Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

Π”Π²ΠΎΠΉΠ½ΠΎΠ΅ Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (Π°Π½Π³Π». double hashing) β€” ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±ΠΎΡ€ΡŒΠ±Ρ‹ с коллизиями, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠΌΠΈ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ адрСсации, основанный Π½Π° использовании Π΄Π²ΡƒΡ… Ρ…Π΅Ρˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для построСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ исслСдования Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

[math]\forall x \neq y \; \exists h_1,h_2 : p(h_1(x)=h_1(y))\gt p((h_1(x)=h_1(y)) \land (h_2(x)=h_2(y)))[/math]

Π’Ρ‹Π±ΠΎΡ€ Ρ…Π΅Ρˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

[math] h_1 [/math] ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Ρ…Π΅Ρˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ. Однако Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ исслСдования ΠΌΠΎΠ³Π»Π° ΠΎΡ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ всю Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, [math] h_2 [/math] Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ значСния:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

Показана Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 13 ячССк, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

[math] h(k,i) = (h_1(k) + i \cdot h_2(k)) \bmod 13 [/math]

[math] h_1(k) = k \bmod 13 [/math]

[math] h_2(k) = 1 + k \bmod 11 [/math]

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, основная ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… [math] k [/math] ΠΏΠ°Ρ€Π° [math] (h_1(k),h_2(k)) [/math] Π΄Π°Π΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ячССк для исслСдования.

ΠŸΡ€ΠΎΡΡ‚Π°Ρ рСализация [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

РСализация с ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Π°Ρ рСализация ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ [ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ]

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

Π₯эш-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π²Ρ‹ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚Π΅ΡΡŒ с Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² CΠΈ, C++, Java ΠΈ Python.

Π₯эш-Ρ‚Π°Π±Π»ΠΈΡ†Π° β€” это структура Π΄Π°Π½Π½Ρ‹Ρ…, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ всС элСмСнты хранятся Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°Ρ€Ρ‹ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π³Π΄Π΅:

Π₯ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (Ρ…ΡΡˆ-функция)

Π’ Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½ΠΎΠ²Ρ‹Ρ… индСксов производится ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ. А элСмСнты, связанныС с этим ΠΊΠ»ΡŽΡ‡ΠΎΠΌ, ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² индСксС. Π­Ρ‚ΠΎΡ‚ процСсс называСтся Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ.

ΠŸΡƒΡΡ‚ΡŒ k β€” ΠΊΠ»ΡŽΡ‡, Π° h(x) β€” Ρ…ΡΡˆ-функция.

Коллизии

Когда Ρ…ΡΡˆ-функция Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ΄ΠΈΠ½ индСкс для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ (нСизвСстно, ΠΊΠ°ΠΊΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² этом индСксС). Π­Ρ‚ΠΎ называСтся ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠ΅ΠΉ Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

Π•ΡΡ‚ΡŒ нСсколько ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π±ΠΎΡ€ΡŒΠ±Ρ‹ с коллизиями:

1. ΠœΠ΅Ρ‚ΠΎΠ΄ Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ

Π‘ΡƒΡ‚ΡŒ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° проста: Ссли Ρ…ΡΡˆ-функция выдСляСт ΠΎΠ΄ΠΈΠ½ индСкс сразу Π΄Π²ΡƒΠΌ элСмСнтам, Ρ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈ Ρ‚ΠΎΠΌ ΠΆΠ΅ индСксС, Π½ΠΎ ΡƒΠΆΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ двусвязного списка.

ПсСвдокод ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ

2. ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚Π°Ρ адрСсация

БущСствуСт нСсколько Π²ΠΈΠ΄ΠΎΠ² ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ адрСсации:

a) Π›ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ΅ Π·ΠΎΠ½Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Π›ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ΅ Π·ΠΎΠ½Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ячСйки.

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

b) ΠšΠ²Π°Π΄Ρ€Π°Ρ‚ΠΈΡ‡Π½ΠΎΠ΅ Π·ΠΎΠ½Π΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΠ½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ΅ β€” Π½ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅. Оно Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ расстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ сосСдними ячСйками большС (большС ΠΎΠ΄Π½ΠΎΠ³ΠΎ). Π­Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ благодаря ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ:

c) Π”Π²ΠΎΠΉΠ½ΠΎΠ΅ Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

h(k, i) = (h1(k) + ih2(k)) mod m

Β«Π₯ΠΎΡ€ΠΎΡˆΠΈΠ΅Β» Ρ…ΡΡˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Β«Π₯ΠΎΡ€ΠΎΡˆΠΈΠ΅Β» Ρ…ΡΡˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ ΡƒΠ±Π΅Ρ€Π΅Π³ΡƒΡ‚ вас ΠΎΡ‚ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ, Π½ΠΎ, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, сократят ΠΈΡ… количСство.

НиТС ΠΌΡ‹ рассмотрим Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ опрСдСлСния «качСства» Ρ…ΡΡˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

1. ΠœΠ΅Ρ‚ΠΎΠ΄ дСлСния

Если k β€” ΠΊΠ»ΡŽΡ‡, Π° m β€” Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Ρ‚ΠΎ Ρ…ΡΡˆ-функция h() вычисляСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

2. ΠœΠ΅Ρ‚ΠΎΠ΄ умноТСния

3. Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Π’ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠΌ Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Ρ…Π΅Ρˆ-функция выбираСтся случайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈ Π½Π΅ зависит ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ.

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

Box2d: анатомия ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ?

Π’ Box2D принято ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‚Π΅Π»Π°, ΠΎΠ΄Π½Π°ΠΊΠΎ Π½Π° самом Π΄Π΅Π»Π΅ ΠΏΡ€ΠΈ расчСтС ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ фикстуры (fixtures, ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‹ слова ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚, Π½ΠΎ я Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, Π΅ΡΡ‚ΡŒ Π»ΠΈ срСди Π½ΠΈΡ… ΡƒΡΡ‚ΠΎΡΠ²ΡˆΠΈΠΉΡΡ). ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ способами, поэтому Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° прСдоставляСт большоС количСство ΡƒΡ‚ΠΎΡ‡Π½ΡΡŽΡ‰Π΅ΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована Π² ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠ΅. НапримСр, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

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

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ столкновСнии

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ столкновСнии содСрТится Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ Ρ‚ΠΈΠΏΠ° b2Contact. Из Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ фикстуры ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ, ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈΡ… ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠΎΠ². БущСствуСт Π΄Π²Π° способа получСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² b2Contact Π² Box2D. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ β€” ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ список ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ² ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚Π΅Π»Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»ΡŒ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ². Рассмотрим ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ дальшС Π±Ρ‹Π»ΠΎ понятнСС, ΠΎ Ρ‡Π΅ΠΌ ΠΈΠ΄Π΅Ρ‚ Ρ€Π΅Ρ‡ΡŒ.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° списка ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ²

Π’ любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ всС ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Ρ‹ ΠΌΠΈΡ€Π° (имССтся Π² Π²ΠΈΠ΄Ρƒ b2World)

ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Ρ‹ Ρ‚Π΅Π»Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

Если Π²Ρ‹Π±Ρ€Π°Π½ этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π° Π² этих списках Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ фикстуры ΡΠΎΠΏΡ€ΠΈΠΊΠ°ΡΠ°ΡŽΡ‚ΡΡ β€” это Π·Π½Π°Ρ‡ΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‚ΡΡ ΠΈΡ… AABB. Если трСбуСтся ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΈΡ€ΡƒΡŽΡ‚ сами фикстуры, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ IsTouching(). К этому вопросу ΠΌΡ‹ Π΅Ρ‰Π΅ вСрнСмся.

Π‘Π»ΡƒΡˆΠ°Ρ‚Π΅Π»ΠΈ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ²

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° списка ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ² становится нСэффСктивной Π² ситуациях, ΠΊΠΎΠ³Π΄Π° столкновСния происходят часто ΠΈ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… количСствах. Устанавливая ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»Π΅ΠΉ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ², Π²Ρ‹ ΠΎΡ‚Π΄Π°Π΅Ρ‚Π΅ ΠΏΠΎΡ€ΡƒΡ‡Π΅Π½ΠΈΠ΅ Box2D ΡΠΎΠΎΠ±Ρ‰Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° происходит Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ интСрСсноС, вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Π½Π°Ρ‡Π°Π»ΠΎΠΌ ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ΠΌ столкновСний. Π‘Π»ΡƒΡˆΠ°Ρ‚Π΅Π»ΡŒ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ² β€” это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса b2ContactListener, Ρ‡Π°ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ замСщаСтся ΠΏΡ€ΠΈ нСобходимости.

Π”ΠΎΠ»ΠΆΠ΅Π½ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² зависимости ΠΎΡ‚ ситуации, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ события Π΄Π°ΡŽΡ‚ Π½Π°ΠΌ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ b2Contact. Π’ процСссС выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Step, ΠΊΠΎΠ³Π΄Π° Box2D опрСдСляСт, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚, ΠΎΠ½ выполняСт ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»Ρ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²Π΅Π΄ΠΎΠΌΠΈΡ‚ΡŒ вас. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ использованиС «ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΏΡ€ΠΈ коллизиях» рассматриваСтся Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ всС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ сосрСдоточим Π½Π° Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ, обрабатывая события столкновСний.

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

Π’Π½Π΅ зависимости ΠΎΡ‚ способа получСния ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ², ΠΎΠ½ΠΈ содСрТат ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. НаиболСС Π²Π°ΠΆΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‰ΠΈΡ…ΡΡ фикстурах ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊ

Когда происходит ΠΎΠ±Ρ…ΠΎΠ΄ списка ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΎΠ΄Π½Π° ΠΈΠ· фикстур ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ извСстна, Π½ΠΎ Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»ΡŒ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ², придСтся ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒΡΡ Π½Π° эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ с Ρ‡Π΅ΠΌ сталкиваСтся. Π§Π΅Ρ‚ΠΊΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ порядка фикстур Π½Π΅ сущСствуСт, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ часто приходится ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ (user data), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΌΡƒ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ фикстура ΠΈΠ»ΠΈ Ρ‚Π΅Π»ΠΎ. Располагая ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ фикстуры, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ GetBody(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ссылку Π½Π° Ρ‚Π΅Π»ΠΎ.

Π‘Ρ‚ΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ шаг Π·Π° шагом.

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

НачнСм с ситуации, ΠΊΠΎΠ³Π΄Π° AABB фикстур Π½Π΅ ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‚ΡΡ, Ρ‚Π°ΠΊ ΠΌΡ‹ смоТСт ΠΏΡ€ΠΎΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ. ΠšΠ»ΠΈΠΊΠ½ΠΈΡ‚Π΅ Ρ„Π»Π°ΠΆΠΎΠΊ Β«AABBsΒ», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ„ΠΈΠΎΠ»Π΅Ρ‚ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹Π΅ области Π²ΠΎΠΊΡ€ΡƒΠ³ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ фикстуры.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

AABB фикстур Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒΡΡ

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ сами фикстуры Π΅Ρ‰Π΅ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ»ΠΈΡΡŒ, Π½Π° этом этапС ΡƒΠΆΠ΅ создаСтся экзСмпляр b2Contact ΠΈ добавляСтся Π² список ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ² ΠΌΠΈΡ€Π° ΠΈ списки ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚Π΅Π»Π°. Если Π²Ρ‹ просматриваСтС эти списки, Ρ‚ΠΎ ΠΏΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² b2Contact ΠΌΠΎΠΆΠ½ΠΎ ΡΡƒΠ΄ΠΈΡ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½, хотя фикстуры Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ»ΠΈΡΡŒ.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ сущСствуСт, Π½ΠΎ IsTouching() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ лоТь

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ ΡΠΈΠΌΡƒΠ»ΡΡ†ΠΈΡŽ, ΠΏΠΎΠΊΠ° Π½Π΅ пСрСсСкутся нСпосрСдствСнно фикстуры…

Ѐикстуры Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°Ρ‚ΡŒΡΡ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

ΠŸΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΠ² Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΡƒΠ³ΠΎΠ» ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄, ΠΊΠ°ΠΊ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… изобраТСниях

Π¨Π°Π³ n
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Π¨Π°Π³ n+1 (Π½Π΅ bullet-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹)
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

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

Π¨Π°Π³ n+1 (Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ β€” bullet-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚)
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Bullet-Ρ‚Π΅Π»Π°, Ρ€Π°ΡΡ…ΠΎΠ΄ΡƒΡŽΡ‚ большС процСссорного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° расчСты ΠΈ для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ. ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… настройках, ΠΈΠ½ΠΎΠ³Π΄Π° ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ β€” Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Ссли Π±Ρ‹ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ двигался достаточно быстро, ΠΎΠ½ ΠΌΠΎΠ³ Π±Ρ‹ ΠΏΡ€ΠΎΠ»Π΅Ρ‚Π΅Ρ‚ΡŒ сквозь ΡƒΠ³ΠΎΠ» ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°, Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Π² столкновСния. Если Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ быстро ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Ρ‚Π΅Π»Π°, ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, мммм… ΠΏΡƒΠ»ΠΈ πŸ™‚ Ρ‚ΠΎΠ³Π΄Π° ΠΈΡ… Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ ΠΊΠ°ΠΊ bullet-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅Π΅ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π΅ΡΡ‚ΠΈΡΡŒ для Π½Π΅-bullet-Ρ‚Π΅Π».

Π’ΠΎΡ‡ΠΊΠΈ столкновСния ΠΈ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒ

К этому ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ Π² нашСм ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π΅ присутствуСт Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ соприкосновСниС, Ρ‡Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ вопросы Π² Π½Π°Ρ‡Π°Π»Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ. Для Π½Π°Ρ‡Π°Π»Π° Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒ ΠΈ Ρ‚ΠΎΡ‡ΠΊΡƒ касания. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π΄Π°Π»Π΅Π΅ ΠΊΠΎΠ΄ вызываСтся ΠΈΠ»ΠΈ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° BeginContact ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»Ρ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ² ΠΈΠ»ΠΈ ΠΈΠ· вашСго ΠΌΠ΅Ρ‚ΠΎΠ΄Π° послС ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ получСния ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π° ΠΈΠ· списка.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π° содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°Ρ… Ρ‚Π΅Π» ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‰ΠΈΡ…ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π° это Π½Π΅ совсСм Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ. Однако ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Ρƒ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΡƒΡŽ структуру b2WorldManifold, которая содСрТит ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ Π² ΠΌΠΈΡ€ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°Ρ….

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Box2D для расчСта Ρ€Π΅Π°ΠΊΡ†ΠΈΠΈ Π½Π° столкновСниС для вычислСния ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚ фикстуры Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Ρ‹Π΅ стороны. Π­Ρ‚ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π΅Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ мСста соприкосновСния фикстур (Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ Π½Π΅ использовали bullet-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹), хотя Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΈΡ… ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ достаточно для расчСтов столкновСний Π² ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠ΅.

Π”Π°Π»Π΅Π΅ рассмотрим Π½ΠΎΡ€ΠΌΠ°Π»ΡŒ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ, которая Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π° ΠΎΡ‚ фикстуры A ΠΊ B:

ΠŸΠΎΡ…ΠΎΠΆΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ для этого столкновСния самый быстрый способ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ…ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², это ΠΎΡ‚Ρ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒ ΡƒΠ³ΠΎΠ» Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° Π²Π²Π΅Ρ€Ρ… ΠΈ Π²Π»Π΅Π²ΠΎ, Π° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π° β€” Π²Π½ΠΈΠ· ΠΈ Π²ΠΏΡ€Π°Π²ΠΎ. Π₯ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ вашС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒ β€” это просто Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅, ΠΎΠ½Π° Π½Π΅ привязана Π½ΠΈ ΠΊ ΠΊΠ°ΠΊΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π° β€” я ΠΈΠ·ΠΎΠ±Ρ€Π°Π·ΠΈΠ» Π΅Π΅ проходящСй Ρ‡Π΅Ρ€Π΅Π· points[0] для удобства.

Π’Π°ΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒ столкновСния Π½Π΅ опрСдСляСт ΡƒΠ³ΠΎΠ» ΠΌΠ΅ΠΆΠ΄Ρƒ фикстурами (вСдь Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ двигаСтся Π²ΠΎΠΎΠ±Ρ‰Π΅ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎ) β€” ΠΎΠ½Π° лишь Π·Π°Π΄Π°Π΅Ρ‚ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅, слСдуя ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ быстрСС всСго компСнсируСтся ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². НапримСр, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ двигаСтся Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ быстрСС, ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ выглядит Ρ‚Π°ΠΊ:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Π’ΠΎΠ³Π΄Π° самый быстрый способ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ фикстуры β€” ΠΎΡ‚Ρ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ Π²Π²Π΅Ρ€Ρ… ΠΈ Π²ΠΏΡ€Π°Π²ΠΎ. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒ для расчСта ΡƒΠ³Π»Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ нСцСлСсообразно. Если трСбуСтся ΡƒΠ·Π½Π°Ρ‚ΡŒ направлСния, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒΡΡ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ:

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

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

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Π˜Ρ‚Π°ΠΊ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ рассмотрСли, ΠΊΠ°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΈ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ, Π½Π° основС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Box2D Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ€Π΅Π°ΠΊΡ†ΠΈΡŽ, Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΡƒΡŽ Π½Π° ΠΊΠΎΠΌΠΏΠ΅Π½ΡΠ°Ρ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Ρ‚ΠΈΠΉ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ вСрнСмся ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ событий.

РСакция Π½Π° столкновСниС

( (b2Contact::Update, b2Island::Report))
Π¨Π°Π³_столкновСния

Π¨Π°Π³_столкновСния + 1
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Π¨Π°Π³_столкновСния + 1
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

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

Π’ это врСмя ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΌΠ΅ΡˆΠ°Ρ‚ΡŒΡΡ ΠΈ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ Π½Π°ΠΌ захочСтся. Если ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ со ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»Π΅ΠΌ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ², ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ PreSolve ΠΈ PostSolve Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ шагС, ΠΏΠΎΠΊΠ° фикстуры ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ, давая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ стандартными срСдствами Ρ€Π΅Π°ΠΊΡ†ΠΈΠΈ Π½Π° коллизию (PreSolve), ΠΈ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΡ‹ Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½Ρ‹ Box2D (PostSolve)

Для большСй наглядности ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ Π²Ρ‹Π²ΠΎΠ΄ printf, которая ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Π° Π² Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Step ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»Ρ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ²:

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: PreSolve and PostSolve Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ нСсколько Ρ€Π°Π·

PreSolve and PostSolve

Оба эти ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° b2Contact, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ доступ ΠΊ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… ΠΈ нормалях, Ρ‡Ρ‚ΠΎ ΠΈ Π² BeginContact. PreSolve Π΄Π°Π΅Ρ‚ Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ характСристики ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π° ΠΏΠ΅Ρ€Π΅Π΄ расчСтом Ρ€Π΅Π°ΠΊΡ†ΠΈΠΈ Π½Π° столкновСниС ΠΈ Π΄Π°ΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π΅Π°ΠΊΡ†ΠΈΡŽ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ. PostSolve позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ вычислСнной Ρ€Π΅Π°ΠΊΡ†ΠΈΠΈ.

Π’ PreSolve ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ настройки ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π°:

Π’Ρ‹Π·ΠΎΠ² SetEnabled(false) Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚, Π·Π½Π°Ρ‡ΠΈΡ‚, рСакция Π½Π° столкновСниС ΠΏΡ€ΠΎΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ ΠΏΡ€ΠΎΠ»Π΅Ρ‚Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ сквозь Π΄Ρ€ΡƒΠ³Π°. ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” односторонняя стСна ΠΈΠ»ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°, ΠΊΠΎΠ³Π΄Π° ΠΈΠ³Ρ€ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ сквозь ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… условиях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎ врСмя выполнСния β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, позиция ΠΈΠ³Ρ€ΠΎΠΊΠ° ΠΈΠ»ΠΈ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ двиТСния.

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

ΠšΡ€ΠΎΠΌΠ΅ ссылки Π½Π° ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚, PreSolve содСрТит Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ характСристики ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ (Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΈ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒ) с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ шага модСлирования. Если ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Π·Π½Π°Π΅Ρ‚, Π·Π°Ρ‡Π΅ΠΌ это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ β€” расскаТитС ΠΌΠ½Π΅ πŸ˜€

PostSolve вызываСтся послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ рСакция Π½Π° столкновСниС Π±Ρ‹Π»Π° рассчитана ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π°. Π£ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π΅ΡΡ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, содСрТащий ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠ΅. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, Π½Π΅ прСвысила Π»ΠΈ рСакция Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΡ€ΠΎΠ³ΠΎΠ²ΠΎΠ΅ значСния, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‡Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Ρ€ΡƒΡˆΠΈΡ‚ΡŒ ΠΈ Ρ‚.ΠΏ. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ » sticky projectiles» содСрТится ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ PostSolve для опрСдСлСния, Π΄ΠΎΠ»ΠΆΠ½Π° Π»ΠΈ стрСла Π·Π°ΡΡ‚Ρ€Π΅Π²Π°Ρ‚ΡŒ Π² мишСни.

ВозвращаСмся ΠΊ ΡΡ†Π΅Π½Π°Ρ€ΠΈΡŽ столкновСния

Ѐикстуры большС Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ

(b2Contact::Update)
AABB всС Π΅Ρ‰Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ ΠΏΠΎΠΊΠ° остаСтся Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… списках ΠΌΠΈΡ€Π° ΠΈ Ρ‚Π΅Π»Π°.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

(ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΌΠ°ΡΡˆΡ‚Π°Π±)
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

AABB фикстур Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ

(b2ContactManager::Collide)
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ удаляСтся ΠΈΠ· списка ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ² ΠΌΠΈΡ€Π° ΠΈ Ρ‚Π΅Π»Π°.

ΠœΠ΅Ρ‚ΠΎΠ΄ EndContact ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° b2Contact, ΠΊΠΎΠ³Π΄Π° фикстуры ΡƒΠΆΠ΅ Π½Π΅ ΡΠΎΠΏΡ€ΠΈΠΊΠ°ΡΠ°ΡŽΡ‚ΡΡ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΌ ΡƒΠΆΠ΅ Π½Π΅ содСрТится Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ EndContact являСтся Π½Π΅ΠΎΡ‚ΡŠΠ΅ΠΌΠ»Π΅ΠΌΡ‹ΠΌ элСмСнтом ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»Ρ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ², Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ позволяСт ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎΠΊΠΈΠ΄Π°ΡŽΡ‚ Π·ΠΎΠ½Ρƒ соприкосновСния.

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

Alex tools

Π₯эш-Ρ‚Π°Π±Π»ΠΈΡ†Π°: Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ

Π₯эш-ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ практичСски Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈ Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ случайного подмноТСства большого Π½Π°Π±ΠΎΡ€Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ. НапримСр, Ссли 2450 ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Ρ…ΡΡˆΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ ΠΊΠΎΡ€Π·ΠΈΠ½ (buckets), Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠΌ случайном распрСдСлСнии, Π² соотвСтствии с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ дня роТдСния, сущСствуСт ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ 95% Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ Π΄Π²Π° ΠΊΠ»ΡŽΡ‡Π° Π±ΡƒΠ΄ΡƒΡ‚ Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π² ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ слот.

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

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ°

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

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ сцСплСниС со связанными списками

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

БвязанныС Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ со связанными списками популярны, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… структур Π΄Π°Π½Π½Ρ‹Ρ… с простыми Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌΠΈ ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ простыС Ρ…ΡΡˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ подходят для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

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

По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Ρ†Π΅ΠΏΠΎΡ‡Π΅Ρ‡Π½Ρ‹Π΅ Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π² силС Π΄Π°ΠΆΠ΅ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° количСство записСй Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ n Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ большС, Ρ‡Π΅ΠΌ количСство Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠ². НапримСр, цСпочСчная Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π° с 1000 слотов ΠΈ 10000 Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ (коэффициСнт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ 10) Π² ΠΏΡΡ‚ΡŒ-Π΄Π΅ΡΡΡ‚ΡŒ Ρ€Π°Π· ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ Ρ‚Π°Π±Π»ΠΈΡ†Π° с 10000 слотов (коэффициСнт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ 1); Π½ΠΎ всС ΠΆΠ΅ Π² 1000 Ρ€Π°Π· быстрСС, Ρ‡Π΅ΠΌ простой ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ список.

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

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

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

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ сцСплСниС со списком Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… ячССк

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

НСкоторыС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ хранят ΠΏΠ΅Ρ€Π²ΡƒΡŽ запись ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ Π² самом массивС слотов. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΎΠ±Ρ…ΠΎΠ΄ΠΎΠ² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ. ЦСлью являСтся ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ эффСктивности ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ доступа ΠΊ Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌ.

НСдостатком являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ пустая ΠΊΠΎΡ€Π·ΠΈΠ½Π° Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚ΠΎ ΠΆΠ΅ мСсто, Ρ‡Ρ‚ΠΎ ΠΈ ΠΊΠΎΡ€Π·ΠΈΠ½Π° с ΠΎΠ΄Π½ΠΈΠΌ Π²Ρ…ΠΎΠ΄ΠΎΠΌ. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ мСсто, Ρ‚Π°ΠΊΠΈΠ΅ Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ часто ΠΈΠΌΠ΅ΡŽΡ‚ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΆΠ΅ слотов, сколько ΠΈ сохранСнных записСй, Π° это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… слотах Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ записСй.

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ сцСплСниС с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ структурами

ВмСсто списка ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ Π΄Ρ€ΡƒΠ³ΡƒΡŽ структуру Π΄Π°Π½Π½Ρ‹Ρ…, которая ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. НапримСр, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠ°ΠΌΠΎΠ±Π°Π»Π°Π½ΡΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ΡΡ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ поиска, тСорСтичСскоС врСмя Π½Π°ΠΈΡ…ΡƒΠ΄ΡˆΠ΅Π³ΠΎ случая ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ (вставка, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅, поиск) ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΎ Π΄ΠΎ O(log n), Π° Π½Π΅ O(n). Однако это вносит Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π΅Ρ‰Π΅ Ρ…ΡƒΠ΄ΡˆΠ΅ΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†, Π³Π΄Π΅ врСмя, Π·Π°Ρ‚Ρ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ Π½Π° вставку ΠΈ балансировку Π΄Π΅Ρ€Π΅Π²Π°, большС, Ρ‡Π΅ΠΌ врСмя, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для выполнСния Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ поиска ΠΏΠΎ всСм элСмСнтам списка. Π Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΠ°ΠΌΠΎΠ±Π°Π»Π°Π½ΡΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ΡΡ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ поиска для сСгмСнтов, являСтся класс HashMap Π² Java 8.

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

ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚Π°Ρ адрСсация

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

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Π₯ΠΎΡ€ΠΎΡˆΠΎ извСстныС ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΎΠ± Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя:

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

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

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

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

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ коллизия Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

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

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

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

ОбъСдинСнноС Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Π“ΠΈΠ±Ρ€ΠΈΠ΄ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ адрСсации, объСдинСнноС Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ связываСт вмСстС Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ ΡƒΠ·Π»ΠΎΠ² Π² самой Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Как ΠΈ открытая адрСсация, ΠΎΠ½ΠΎ обСспСчиваСт использованиС пространства ΠΈ (нСсколько ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½Π½ΠΎΠ΅) прСимущСство ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΎΠΉ. Как ΠΈ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ°, ΠΎΠ½ΠΎ Π½Π΅ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ эффСктом кластСризации; фактичСски Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ эффСктивно Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π° Π΄ΠΎ высокой плотности. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ, ΠΎΠ½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ большС элСмСнтов, Ρ‡Π΅ΠΌ слотов Ρ‚Π°Π±Π»ΠΈΡ†.

ΠšΡƒΠΊΡƒΡˆΠ΅Ρ‡Π½ΠΎΠ΅ Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

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

Hopscotch Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Π”Ρ€ΡƒΠ³ΠΈΠΌ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ адрСсациСй являСтся Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ классиков, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ сочСтаСт Π² сСбС ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΊΡƒΠΊΡƒΡˆΠΊΠΈ ΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ пробирования, Π½ΠΎ Π² Ρ†Π΅Π»ΠΎΠΌ, ΠΏΠΎΡ…ΠΎΠΆΠ΅, позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΈΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ. Π’ частности, ΠΎΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Π΄Π°ΠΆΠ΅ ΠΊΠΎΠ³Π΄Π° коэффициСнт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ 0,9. Алгоритм Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ измСняСмой ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

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

Π₯ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π ΠΎΠ±ΠΈΠ½Π° Π“ΡƒΠ΄Π°

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

Π”Π²ΡƒΡ…Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΠ΅ Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Π₯ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ с 2 Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ Π²Ρ‹Π±ΠΎΡ€Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΄Π²Π΅ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ…ΡΡˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, h1(x) ΠΈ h2(x), для Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. ОбС Ρ…ΡΡˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для вычислСния Π΄Π²ΡƒΡ… ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Когда ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ вставляСтся Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, ΠΎΠ½ помСщаСтся Π² мСстополоТСниС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ содСрТит мСньшС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ мСстополоТСниС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ h1(x), Ссли Π΅ΡΡ‚ΡŒ равСнство Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹). Π’ Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ с двумя Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ примСняСтся ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ стСпСни Π΄Π²ΡƒΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ².

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

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

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