ΠŸΠ΅Ρ€Π΅Ρ‚ΡΠΆΠΊΠ°, ΠŸΡ€Π΅ΠΌΠΈΡ Π’ΠŸΡ€ΠΎΠ³Π΅Ρ€, 13.11
ΠŸΠ΅Ρ€Π΅Ρ‚ΡΠΆΠΊΠ°, ΠŸΡ€Π΅ΠΌΠΈΡ Π’ΠŸΡ€ΠΎΠ³Π΅Ρ€, 13.11
ΠŸΠ΅Ρ€Π΅Ρ‚ΡΠΆΠΊΠ°, ΠŸΡ€Π΅ΠΌΠΈΡ Π’ΠŸΡ€ΠΎΠ³Π΅Ρ€, 13.11

ΠžΡ†Π΅Π½ΠΊΠ° слоТности Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², ΠΈΠ»ΠΈ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ О(log n)

Если Π²Ρ‹ всё Π΅Ρ‰Ρ‘ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², ΠΈ ΠΆΠ΄Π΅Ρ‚Π΅ простоС ΠΈ понятноС объяснСниС, β€” эта ΡΡ‚Π°Ρ‚ΡŒΡ для вас.

ОблоТка: ΠžΡ†Π΅Π½ΠΊΠ° слоТности Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², ΠΈΠ»ΠΈ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ О(log n)

НавСрняка Π²Ρ‹ Π½Π΅ Ρ€Π°Π· ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡŒ с обозначСниями Π²Ρ€ΠΎΠ΄Π΅ O(log n) ΠΈΠ»ΠΈ ΡΠ»Ρ‹ΡˆΠ°Π»ΠΈ Ρ„Ρ€Π°Π·Ρ‹ Ρ‚ΠΈΠΏΠ° «логарифмичСская Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΒ» Π² адрСс ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ². И Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΡ‚Π°Ρ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ программистом, Π½ΠΎ Ρ‚Π°ΠΊ ΠΈ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ это Π·Π½Π°Ρ‡ΠΈΡ‚, β€” данная ΡΡ‚Π°Ρ‚ΡŒΡ для вас.

ΠžΡ†Π΅Π½ΠΊΠ° слоТности

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

Допустим, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ 4n3Β + 7n условных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ n элСмСнтов Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠΈ n Π½Π° ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ΅ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ большС Π²Π»ΠΈΡΡ‚ΡŒ Π²ΠΎΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ n Π² ΠΊΡƒΠ±, Ρ‡Π΅ΠΌ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΅Π³ΠΎ Π½Π° 4 ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΏΡ€ΠΈΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ 7n. Π’ΠΎΠ³Π΄Π° говорят, Ρ‡Ρ‚ΠΎ врСмСнная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ этого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Ρ€Π°Π²Π½Π° О(n3), Ρ‚. Π΅. зависит ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… кубичСски.

ИспользованиС Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ Π±ΡƒΠΊΠ²Ρ‹ О (ΠΈΠ»ΠΈ Ρ‚Π°ΠΊ называСмая О-нотация) ΠΏΡ€ΠΈΡˆΠ»ΠΎ ΠΈΠ· ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ, Π³Π΄Π΅ Π΅Ρ‘ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ для сравнСния асимптотичСского повСдСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π€ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ O(f(n)) ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° (ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΡ‘ΠΌ Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠΉ памяти) растёт Π² зависимости ΠΎΡ‚ ΠΎΠ±ΡŠΡ‘ΠΌΠ° Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ быстрСС, Ρ‡Π΅ΠΌ нСкоторая константа, умноТСнная Π½Π° f(n).

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

O(n) β€” линСйная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ

Π’Π°ΠΊΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ поиска наибольшСго элСмСнта Π² Π½Π΅ отсортированном массивС. Нам придётся ΠΏΡ€ΠΎΠΉΡ‚ΠΈΡΡŒ ΠΏΠΎ всСм n элСмСнтам массива, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· Π½ΠΈΡ… ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ.

O(log n) β€” логарифмичСская ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ

ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск. Если массив отсортирован, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π΅ΡΡ‚ΡŒ Π»ΠΈ Π² Π½Ρ‘ΠΌ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ дСлСния ΠΏΠΎΠΏΠΎΠ»Π°ΠΌ. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ срСдний элСмСнт, Ссли ΠΎΠ½ большС искомого, Ρ‚ΠΎ отбросим Π²Ρ‚ΠΎΡ€ΡƒΡŽ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρƒ массива β€” Ρ‚Π°ΠΌ Π΅Π³ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ Π½Π΅Ρ‚. Если ΠΆΠ΅ мСньшС, Ρ‚ΠΎ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ β€” отбросим Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρƒ. И Ρ‚Π°ΠΊ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠΎΠΏΠΎΠ»Π°ΠΌ, Π² ΠΈΡ‚ΠΎΠ³Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ log n элСмСнтов.

O(n2) β€” квадратичная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ

Π’Π°ΠΊΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сортировки вставками. Π’ каноничСской Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ½ прСдставляСт ΠΈΠ· сСбя Π΄Π²Π° Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»Π°: ΠΎΠ΄ΠΈΠ½, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎ всСму массиву, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ мСсто ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΌΡƒ элСмСнту Π² ΡƒΠΆΠ΅ отсортированной части. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, количСство ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива ΠΊΠ°ΠΊ n * n, Ρ‚. Π΅. n2.

Π‘Ρ‹Π²Π°ΡŽΡ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΡ†Π΅Π½ΠΊΠΈ ΠΏΠΎ слоТности, Π½ΠΎ всС ΠΎΠ½ΠΈ основаны Π½Π° Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅.

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

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

Наглядно

ВрСмя выполнСния Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Π² зависимости ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ скорости 106 ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² сСкунду:

Если хочСтся ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΈ слоТнСС, заглядывайтС Π² Π½Π°ΡˆΡƒ ΡΡ‚Π°Ρ‚ΡŒΡŽ ΠΈΠ· сСрии «Алгоритмы ΠΈ структуры Π΄Π°Π½Π½Ρ‹Ρ… для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…Β».

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ