Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java

Алгоритм Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска Π² Java

Π£Π·Π½Π°ΠΉΡ‚Π΅, ΠΊΠ°ΠΊ ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска.

1. ΠžΠ±Π·ΠΎΡ€

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим прСимущСства Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с простым Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌ поиском ΠΈ рассмотрим Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π² Java.

2. ΠΠ΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ эффСктивного поиска

Допустим, ΠΌΡ‹ занимаСмся ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ΅ΠΉ Π²ΠΈΠ½Π°, ΠΈ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ‹ ΠΏΠΎΠΊΡƒΠΏΠ°Ρ‚Π΅Π»Π΅ΠΉ Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎ ΠΏΠΎΡΠ΅Ρ‰Π°ΡŽΡ‚ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Π§Π΅Ρ€Π΅Π· нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ²Π°Ρ€Ρ‹, Ρ†Π΅Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½ΠΈΠΆΠ΅ n Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ², Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π±ΡƒΡ‚Ρ‹Π»ΠΊΡƒ ΠΈΠ· Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² поиска ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Π΅ Π² свою ΠΊΠΎΡ€Π·ΠΈΠ½Ρƒ. Π£ нас Π΅ΡΡ‚ΡŒ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ сСкунду ΠΈΡ‰ΡƒΡ‚ Π²ΠΈΠ½Π° с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ†Π΅Π½Ρ‹. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ быстрыми.

На бэкэндС наш Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ выполняСт Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ поиск ΠΏΠΎ всСму списку Π²ΠΈΠ½, сравнивая ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ†Π΅Π½Ρƒ, Π²Π²Π΅Π΄Π΅Π½Π½ΡƒΡŽ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ, с Ρ†Π΅Π½ΠΎΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π±ΡƒΡ‚Ρ‹Π»ΠΊΠΈ Π²ΠΈΠ½Π° Π² спискС.

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ‡Π΅ΠΌ большС количСство Π²ΠΈΠ½Π½Ρ‹Ρ… Π±ΡƒΡ‚Ρ‹Π»ΠΎΠΊ Π² нашСй систСмС, Ρ‚Π΅ΠΌ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ это Π·Π°ΠΉΠΌΠ΅Ρ‚. ВрСмя поиска увСличиваСтся ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ количСству Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π½ΠΎΠ²Ρ‹Ρ… элСмСнтов.

ΠŸΡ€ΠΈ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΌ поискС врСмя, Π·Π°Ρ‚Ρ€Π°Ρ‡Π΅Π½Π½ΠΎΠ΅ Π½Π° поиск Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ², СстСствСнно увСличиваСтся с Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π½Π°Π±ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ.

3. Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск

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

ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅ – ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ аспСктом здСсь являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ массив ΡƒΠΆΠ΅ отсортирован.

Если поиск заканчиваСтся Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΡΡ‚Π°Π²ΡˆΠ°ΡΡΡ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° пуста, Ρ‚ΠΎ ΠΊΠ»ΡŽΡ‡Π° Π² массивС Π½Π΅Ρ‚.

3.1. Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½Π°Ρ РСализация

middle – это срСдний индСкс отсортированного массива . Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ запускаСт Ρ†ΠΈΠΊΠ» while , ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠ»ΡŽΡ‡ со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ массива срСднСго индСкса отсортированного массива .

3.2. РСкурсивная РСализация

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ рассмотрим ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΠ²Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ:

3.3. ИспользованиС Arrays.BinarySearch()

3.4. ИспользованиС Collections.BinarySearch()

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ список & an Integer | key , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΉΠ΄Π΅Π½ Π² спискС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Integer , ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ BinarySearch класса Java Collections .

3.5. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈ рСкурсивный ΠΈΠ»ΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ для написания Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°-это Π² основном вопрос Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠΉ. Но всС ΠΆΠ΅ Π΅ΡΡ‚ΡŒ нСсколько ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π½Π°Ρ‚ΡŒ:

1. РСкурсия ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ ΠΈΠ· – Π·Π° Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ стСка ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ большС памяти
2. РСкурсия Π½Π΅ являСтся стСком –
друТСствСнной. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ StackOverflowException
ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π½Π°Π±ΠΎΡ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…
3. РСкурсия добавляСт ясности ΠΊΠΎΠ΄Ρƒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΊΠΎΡ€ΠΎΡ‡Π΅ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ

Π’ ΠΈΠ΄Π΅Π°Π»Π΅ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ поиск Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ мСньшСС количСство сравнСний Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ поиска Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ n. Для ΠΌΠ΅Π½ΡŒΡˆΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ n Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ поиск ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Π΅ΠΌ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ.

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ этот Π°Π½Π°Π»ΠΈΠ· носит тСорСтичСский Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°Ρ€ΡŒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² зависимости ΠΎΡ‚ контСкста.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ сначала Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ наши трСбования, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΎΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ поиска Π»ΡƒΡ‡ΡˆΠ΅ всСго соотвСтствуСт вашим трСбованиям.

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

Π­Ρ‚ΠΎΡ‚ ΡƒΡ‡Π΅Π±Π½ΠΈΠΊ продСмонстрировал Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска ΠΈ сцСнарий, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ вмСсто Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ поиска.

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

Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск β€” Java: ΠœΠ°ΡΡΠΈΠ²Ρ‹

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

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

Рассмотрим Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ – возьмСм срСдний элСмСнт отсортированного массива ΠΈ сравним Π΅Π³ΠΎ c искомым. Если элСмСнт мСньшС – ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ поиск Π² Π»Π΅Π²ΠΎΠΉ части массива, Ссли большС Π² ΠΏΡ€Π°Π²ΠΎΠΉ, ΠΏΠΎΠΊΠ° Π½Π΅ останСтся Π½ΡƒΠΆΠ½Ρ‹ΠΉ элСмСнт. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π½Π°ΠΌ понадобится число ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Ρ€Π°Π²Π½ΠΎΠ΅ Ρ‚ΠΎΠΌΡƒ, сколько Ρ€Π°Π· Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒ массив Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ n ΠΏΠΎΠΏΠΎΠ»Π°ΠΌ. НапримСр для массива Π² 16 элСмСнтов ΠΌΡ‹ сначала ΠΏΠΎΠ΄Π΅Π»ΠΈΠΌ Π΅Π³ΠΎ Π½Π° Π΄Π²Π° ΠΏΠΎ 8, ΠΏΠΎΡ‚ΠΎΠΌ 8 Π½Π° Π΄Π²Π° ΠΏΠΎ 4, ΠΏΠΎΡ‚ΠΎΠΌ 4 Π½Π° Π΄Π²Π° ΠΏΠΎ 2 ΠΈ Π½Π° ΠΊΠΎΠ½Π΅Ρ† 2 ΠΏΠΎΠΏΠΎΠ»Π°ΠΌ, Ρ‚Π΅ всСго 4 ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ случаС. Π’Π°ΠΊΠΎΠ΅ число Ρ€Π°Π²Π½ΠΎ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΌΡƒ Π»ΠΎΠ³Π°Ρ€ΠΈΡ„ΠΌΡƒ: число ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π· Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° 2, сколько Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΌΠ½ΠΎΠΆΠ°Ρ‚ΡŒ 2 Π½Π° 2(Π²ΠΎΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π² ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ) Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ это число.

А Π»ΠΎΠ³Π°Ρ€ΠΈΡ„ΠΌ это функция обратная возвСдСнию Π² ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ сколько ΠΆΠ΅ Ρ€Π°Π· Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΌΠ½ΠΎΠΆΠ°Ρ‚ΡŒ 2(Π²ΠΎΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π² ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ 16.

Код Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

А ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

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

6 Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² поиска Π½Π° Java: ΠΎΡ‚ простого ΠΊ слоТному

Поиск – распространённоС дСйствиС, выполняСмоС Π² бизнСс-прилоТСниях. Под ΠΊΠ°Ρ‚ΠΎΠΌ Π»Π΅ΠΆΠ°Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ извСстных Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² поиска Π½Π° Java.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Java – всСгда интСрСсный экспириСнс. Но ΠΊΡƒΠ΄Π° интСрСснСС Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, примСняя ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ситуаций Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹.

Π Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Π½Π° Java ΠΈ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ пространствСнной слоТности.

Π›ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ поиск

Π›ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ ΠΈΠ»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ поиск – ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ поиска. Он Ρ€Π΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΈΠ·-Π·Π° своСй нСэффСктивности. По сути, это ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π°, ΠΈ ΠΎΠ½ уступаСт Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌ.

Π£ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ поиска Π½Π΅Ρ‚ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… условий ΠΊ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ структуры Π΄Π°Π½Π½Ρ‹Ρ….

ОбъяснСниС

Алгоритм ΠΈΡ‰Π΅Ρ‚ элСмСнт Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΉ структурС Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠΊΠ° Π½Π΅ достигнСт ΠΊΠΎΠ½Ρ†Π° структуры.

РСализация

Π’Π΅ΠΏΠ΅Ρ€ΡŒ посмотрим, ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ поиск Π² Java:

Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ цСлочислСнный массив:

ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ для Π²Ρ‹Π²ΠΎΠ΄Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°:

ВрСмСнная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ

Для получСния ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ искомого элСмСнта пСрСбираСтся Π½Π°Π±ΠΎΡ€ ΠΈΠ· N элСмСнтов. Π’ Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ сцСнарии для этого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° искомый элСмСнт оказываСтся послСдним Π² массивС.

Π’ этом случаС потрСбуСтся N ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ для нахоТдСния элСмСнта.

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, врСмСнная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ поиска Ρ€Π°Π²Π½Π° O(N).

ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²Π΅Π½Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ

Π­Ρ‚ΠΎΡ‚ поиск Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ всСго ΠΎΠ΄Π½Ρƒ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ памяти для хранСния искомого элСмСнта. Π­Ρ‚ΠΎ Π½Π΅ относится ΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ массива.

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, пространствСнная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ поиска Ρ€Π°Π²Π½Π° O(1).

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

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

НСсмотря Π½Π° простоту, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π½Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ примСнСния Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… ΠΈΠ·-Π·Π° Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ увСличСния Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ слоТности.

Π”Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ поиск

Π”Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ ΠΈΠ»ΠΈ логарифмичСский поиск часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΈΠ·-Π·Π° быстрого Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ поиска.

ОбъяснСниС

Π­Ρ‚ΠΎΡ‚ Π²ΠΈΠ΄ поиска ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ «РаздСляй ΠΈ властвуй», Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ сортировки Π½Π°Π±ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ….

Алгоритм Π΄Π΅Π»ΠΈΡ‚ Π²Ρ…ΠΎΠ΄Π½ΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Π½Π° Ρ€Π°Π²Π½Ρ‹Π΅ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹, ΠΈ с ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ сравниваСт Ρ†Π΅Π»Π΅Π²ΠΎΠΉ элСмСнт с элСмСнтом Π² сСрСдинС. Поиск заканчиваСтся ΠΏΡ€ΠΈ Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ элСмСнта. Π˜Π½Π°Ρ‡Π΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ ΠΈΡΠΊΠ°Ρ‚ΡŒ элСмСнт, раздСляя ΠΈ выбирая ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·Π΄Π΅Π» массива. Π¦Π΅Π»Π΅Π²ΠΎΠΉ элСмСнт сравниваСтся со срСдним.

Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π²Π°ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ ΠΏΡ€ΠΈ использовании Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ поиска.

Поиск заканчиваСтся, ΠΊΠΎΠ³Π΄Π° firstIndex (ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ) достигаСт lastIndex (послСднСго элСмСнта). Π—Π½Π°Ρ‡ΠΈΡ‚ ΠΌΡ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ»ΠΈ вСсь массив Java ΠΈ Π½Π΅ нашли элСмСнта.

Π•ΡΡ‚ΡŒ Π΄Π²Π° способа Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ этого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°: ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΈ рСкурсивный.

ВрСмСнная ΠΈ пространствСнная слоТности ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ для ΠΎΠ±ΠΎΠΈΡ… способов Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° Java.

РСализация

Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄

РСкурсивный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄

Π’Π΅ΠΏΠ΅Ρ€ΡŒ посмотрим Π½Π° Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΠ²Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ:

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

Π”Ρ€ΡƒΠ³ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ – рСкурсивныС Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² стСк ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ ΠΎΠ΄Π½Ρƒ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ пространства Π·Π° Π²Ρ‹Π·ΠΎΠ².

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ способом:

ВрСмСнная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ

ВрСмСнная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ поиска Ρ€Π°Π²Π½Π° O(log (N)) ΠΈΠ·-Π·Π° дСлСния массива ΠΏΠΎΠΏΠΎΠ»Π°ΠΌ. Она прСвосходит O(N) Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°.

ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²Π΅Π½Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ

Одна Π΅Π΄ΠΈΠ½ΠΈΡ†Π° пространства трСбуСтся для хранСния искомого элСмСнта. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, пространствСнная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π²Π½Π° O(1).

РСкурсивный Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ поиск Ρ…Ρ€Π°Π½ΠΈΡ‚ Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² стСкС. Π’ Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ случаС пространствСнная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ O(log (N)).

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

Π­Ρ‚ΠΎΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ с отсортированными структурами Π΄Π°Π½Π½Ρ‹Ρ….

Π”Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ поиск Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Arrays.binarySearch Java API.

Алгоритм ΠšΠ½ΡƒΡ‚Π° – ΠœΠΎΡ€Ρ€ΠΈΡΠ° – ΠŸΡ€Π°Ρ‚Ρ‚Π°

Алгоритм КМП осущСствляСт поиск тСкста ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ. Он Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ Π”ΠΎΠ½Π°Π»ΡŒΠ΄ΠΎΠΌ ΠšΠ½ΡƒΡ‚ΠΎΠΌ, Π’ΠΎΠ½ΠΎΠΌ ΠŸΡ€Π°Ρ‚Ρ‚ΠΎΠΌ ΠΈ ДТСймсом ΠœΠΎΡ€Ρ€ΠΈΡΠΎΠΌ: ΠΎΡ‚ΡΡŽΠ΄Π° ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅.

ОбъяснСниС

Π’ этом поискС сначала компилируСтся Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ шаблон. ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡ шаблон, ΠΌΡ‹ пытаСмся Π½Π°ΠΉΡ‚ΠΈ прСфикс ΠΈ суффикс строки шаблона. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π² случаС нСсоотвСтствия – Π½Π΅ придётся ΠΈΡΠΊΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ совпадСниС с Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ индСкса.

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

КМП Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстрСС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° благодаря пропускам.

РСализация

Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ массив Java ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ массив, хранящий шаблон символов. ЦСль – Π½Π°ΠΉΡ‚ΠΈ прСфикс ΠΈ суффикс Π² шаблонС. Зная эти элСмСнты, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ сравнСния с Π½Π°Ρ‡Π°Π»Π° тСкста послС нСсоотвСтствия ΠΈ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ ΠΊ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ символа.

Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ массив сохраняСт ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ мСстонахоТдСния Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ символа Π² массив шаблонов.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ сам Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ:

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ сравниваСм символы Π² шаблонС ΠΈ тСкстовом массивС. ΠœΡ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ Π²ΠΏΠ΅Ρ€Ρ‘Π΄, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ совпадСниС. ДостиТСниС ΠΊΠΎΠ½Ρ†Π° массива ΠΏΡ€ΠΈ сопоставлСнии ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ шаблона Π² тСкстС.

Но! Π•ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ‚.

Π’ тСкстовом шаблонС AAABAAA Π½Π°Π±Π»ΡŽΠ΄Π°Π΅Ρ‚ΡΡ ΠΈ кодируСтся Π² массив шаблонов ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаблон:

Π’ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½Π°ΡˆΠΈΡ… расчётов:

ΠžΠΏΠΈΡΠ°Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ шаблон ясно ΠΏΠΎΠΊΠ°Π·Π°Π½ Π² скомпилированном массивС.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этого массива КМП ΠΈΡ‰Π΅Ρ‚ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ шаблон Π² тСкстС, Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡΡΡŒ Π² Π½Π°Ρ‡Π°Π»ΠΎ тСкстового массива.

ВрСмСнная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ

Для поиска шаблона Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ всС элСмСнты Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ тСкстС. НСобходимоС для этого врСмя составляСт O(N). Для составлСния строки шаблона Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ символ Π² шаблонС – это Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° итСрация O(M).

O (M + N) – ΠΎΠ±Ρ‰Π΅Π΅ врСмя Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°.

ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²Π΅Π½Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ

O(M) пространства Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для хранСния скомпилированного шаблона для Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ шаблона Ρ€Π°Π·ΠΌΠ΅Ρ€Π° M.

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

Π­Ρ‚ΠΎΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² тСкстовых инструмСнтах для поиска шаблонов Π² тСкстовых Ρ„Π°ΠΉΠ»Π°Ρ….

Поиск ΠΏΡ€Ρ‹ΠΆΠΊΠ°ΠΌΠΈ

ΠžΡ‚ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ поиска этот Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΎΡ‚Π»ΠΈΡ‡Π°Π΅Ρ‚ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²ΠΏΠ΅Ρ€Ρ‘Π΄. Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ поиск Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ отсортированной ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ.

ΠŸΡ€Ρ‹ΠΆΠΊΠΈ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΉΠ΄Π΅Π½ элСмСнт большС искомого. Π—Π°Ρ‚Π΅ΠΌ запускаСм Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ поиск ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ шагами.

Π­Ρ‚ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ ΠΏΠΎΠ»Π΅ поиска ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ поиск ТизнСспособным Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ.

РСализация

ΠœΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ с jumpstep Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ с ΠΊΠΎΡ€Π΅Π½ΡŒ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹ΠΉ ΠΎΡ‚ Π΄Π»ΠΈΠ½Ρ‹ массива ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ ΠΏΡ€Ρ‹Π³Π°Ρ‚ΡŒ Π²ΠΏΠ΅Ρ€Ρ‘Π΄ с Ρ‚Π΅ΠΌ ΠΆΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ, ΠΏΠΎΠΊΠ° Π½Π΅ Π½Π°ΠΉΠ΄Ρ‘ΠΌ элСмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΈΠ»ΠΈ большС искомого элСмСнта.

Π’ΠΎΡ‚ Ρ‚Π°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ:

ВрСмСнная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ

ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²Π΅Π½Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ

Π˜ΡΠΊΠΎΠΌΡ‹ΠΉ элСмСнт Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄Π½Ρƒ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ пространства, поэтому пространствСнная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° составляСт O(1).

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

Π­Ρ‚ΠΎΡ‚ поиск ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎΠ²Π΅Ρ€Ρ… Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€Ρ‹ΠΆΠΊΠΈ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ сторону Π·Π°Ρ‚Ρ€Π°Ρ‚Π½Ρ‹.

Π‘ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅ΠΉΡΡ срСдой. Когда ΠΏΡ€ΠΈ Π»Π΅Π³ΠΊΠΎΠΌ поискС ΠΏΠΎ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ Π²ΠΏΠ΅Ρ€Ρ‘Π΄ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½Ρ‹Π΅ ΠΏΡ€Ρ‹ΠΆΠΊΠΈ Π² Ρ€Π°Π·Π½Ρ‹Ρ… направлСниях становятся Π·Π°Ρ‚Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ.

Π˜Π½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΡΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ поиск

Π˜Π½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΡΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ поиск ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для поиска элСмСнтов Π² отсортированном массивС. Он ΠΏΠΎΠ»Π΅Π·Π΅Π½ для Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎ распрСдСлСнных Π² структурС Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΡ€ΠΈ Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎ распрСдСлСнных Π΄Π°Π½Π½Ρ‹Ρ… мСстонахоТдСниС элСмСнта опрСдСляСтся Ρ‚ΠΎΡ‡Π½Π΅Π΅. Π’ΡƒΡ‚ ΠΈ вскрываСтся ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΎΡ‚ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска, Π³Π΄Π΅ ΠΌΡ‹ пытаСмся Π½Π°ΠΉΡ‚ΠΈ элСмСнт Π² сСрСдинС массива.

Для поиска элСмСнтов Π² массивС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ интСрполяции. Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½Π΅Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ эти Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивов. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ поиск.

РСализация

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ‚Π°ΠΊ:

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ интСрполяции, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ 6 :

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ эти значСния ΠΊ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°ΠΌ для ΠΎΡ†Π΅Π½ΠΊΠΈ индСкса элСмСнта поиска:

index=0+(7βˆ’0)/(8βˆ’1)βˆ—(6βˆ’1)=5

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ integers[5] Ρ€Π°Π²Π΅Π½ 6 β€” это элСмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ искали. ИндСкс для элСмСнта рассчитываСтся Π·Π° ΠΎΠ΄ΠΈΠ½ шаг ΠΈΠ·-Π·Π° Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠΉ распрСдСлСнности Π΄Π°Π½Π½Ρ‹Ρ….

ВрСмСнная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ

Π’ Π»ΡƒΡ‡ΡˆΠ΅ΠΌ случаС врСмСнная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° – O(log log N). ΠŸΡ€ΠΈ Π½Π΅Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠΌ распрСдСлСнии элСмСнтов ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ сопоставима с Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, которая = O(N).

ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²Π΅Π½Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ

Алгоритм Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΠ΄Π½Ρƒ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ пространства для хранСния элСмСнта для поиска. Π•Π³ΠΎ пространствСнная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ = O(1).

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

Алгоритм ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ для Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎ распрСдСлСнных Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ€ΠΎΠ΄Π΅ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ.

Π­ΠΊΡΠΏΠΎΠ½Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ поиск

Π­ΠΊΡΠΏΠΎΠ½Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ поиск ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для поиска элСмСнтов ΠΏΡƒΡ‚Ρ‘ΠΌ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π² ΡΠΊΡΠΏΠΎΠ½Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π²ΠΎ Π²Ρ‚ΠΎΡ€ΡƒΡŽ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ.

Π’ этом поискС ΠΌΡ‹ пытаСмся Π½Π°ΠΉΡ‚ΠΈ ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ мСньший Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΈ примСняСм Π½Π° Π½Π΅ΠΌ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ для поиска элСмСнта.

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° коллСкция Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ отсортирована.

РСализация

ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Java:

Π’ нашСм случаС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° достигаСтся Π² элСмСнтС 8, Π° элСмСнт Π² integers[8] Ρ€Π°Π²Π΅Π½ 95. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ выполняСтся Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск:

ΠŸΡ€ΠΈ этом Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск:

ВрСмСнная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ

Π’ Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ случаС врСмСнная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ этого поиска составит O(log (N)).

ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²Π΅Π½Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ

Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ поиска Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ O(1) мСста для хранСния искомого элСмСнта.

Для рСкурсивного Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ поиска пространствСнная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ становится Ρ€Π°Π²Π½ΠΎΠΉ O(log (N)).

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

Π­ΠΊΡΠΏΠΎΠ½Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ поиск ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ с большими массивами, ΠΊΠΎΠ³Π΄Π° Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск Π·Π°Ρ‚Ρ€Π°Ρ‚Π΅Π½. Π­ΠΊΡΠΏΠΎΠ½Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ поиск раздСляСт Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° Π±ΠΎΠ»Π΅Π΅ доступныС для поиска Ρ€Π°Π·Π΄Π΅Π»Ρ‹.

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

КаТдая систСма содСрТит Π½Π°Π±ΠΎΡ€ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ΠΈ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ. ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Π½Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ поиска, ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ эти ограничСниях, ΠΈΠ³Ρ€Π°Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ систСмы.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрСли Ρ€Π°Π±ΠΎΡ‚Ρƒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² поиска Java ΠΈ случаи ΠΈΡ… примСнСния.

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

Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск Π² JavaScript. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск?

Когда Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ поиск Π² массивС, ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΌ способом ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использованиС indexOf() ΠΈΠ»ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ†ΠΈΠΊΠ»Π° for(). Π›ΡŽΠ±ΠΎΠΉ ΠΈΠ· этих способов Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ массив начиная с Π½Π°Ρ‡Π°Π»Π° ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту массива Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ Π½ΡƒΠΆΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ сравним это с Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΌ поиском.

Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ поиск Π² отсортированном массивС ΠΏΡƒΡ‚Π΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ разбиСния массива ΠΏΠΎΠΏΠΎΠ»Π°ΠΌ.

Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск выполняСтся ΠΏΡƒΡ‚Π΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΎΠ³ΠΎ, являСтся Π»ΠΈ искомоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ большС, мСньшС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΠΎ срСднСму Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π² нашСм массивС:

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с большими объСмами Π΄Π°Π½Π½Ρ‹Ρ… Π³ΠΎΡ€Π°Π·Π΄ΠΎ эффСктивнСС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ удаляСтся ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ массива, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ нСподходящСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚

Одним ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹Ρ… аспСктов Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ являСтся подсказка, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰Π°Ρ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈ Π½Π°Π²Π΅Π΄Π΅Π½ΠΈΠΈ курсора Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡƒ. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ ΠΌΡ‹ΡˆΠΈ Π½Π° подсказкС ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· блиТайшСй Ρ‚ΠΎΡ‡ΠΊΠΈ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java

Π£ нас Π΅ΡΡ‚ΡŒ массив всСх ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΈΠΌ Π΄Π°Π½Π½Ρ‹Ρ…. ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ находятся Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠΌΠ΅Π΅Ρ‚ svgX ΠΊΠ»ΡŽΡ‡. Выглядит это ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ я использовал простой Ρ†ΠΈΠΊΠ» for, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρƒ X курсора ΠΌΡ‹ΡˆΠΈ со всСми значСниями svgX Π² ΠΌΠΎΠ΅ΠΌ массивС Π΄Π°Π½Π½Ρ‹Ρ….

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ выглядит ΠΊΠΎΠ΄ Ρ†ΠΈΠΊΠ»Π° for. ΠœΡ‹ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ всС значСния svgX, ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±Π»ΠΈΠΆΠ΅ ΠΊ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π΅ X курсора ΠΌΡ‹ΡˆΠΈ β€” это Ρ‚ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ.

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΡˆΠΈΡ€ΠΈΠ½Ρƒ нашСго svg элСмСнта ΠΈ создаСм пустой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ для хранСния нашСй блиТайшСй Ρ‚ΠΎΡ‡ΠΊΠΈ.

Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌ массив Π΄Π°Π½Π½Ρ‹Ρ…. КаТдоС svgX Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² нашСм массивС сравниваСтся с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΠΉ X курсора ΠΌΡ‹ΡˆΠΈ. Если тСкущая итСрация Ρ†ΠΈΠΊΠ»Π° ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±Π»ΠΈΠΆΠ΅ ΠΊ курсору, Ρ‡Π΅ΠΌ любая другая итСрация, Ρ‚ΠΎ эта Ρ‚ΠΎΡ‡ΠΊΠ° устанавливаСтся ΠΊΠ°ΠΊ наша блиТайшая Ρ‚ΠΎΡ‡ΠΊΠ°.

ΠŸΡ€ΠΈ нСбольшом количСствС Π΄Π°Π½Π½Ρ‹Ρ… этот ΠΌΠ΅Ρ‚ΠΎΠ΄ являСтся ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстрым. Однако, Ссли Ρƒ нас Π΅ΡΡ‚ΡŒ большой объСм Π΄Π°Π½Π½Ρ‹Ρ…, этот Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΡƒΠΆΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠΌ эффСктивным.

Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска для поиска блиТайшСго значСния:

Нам Π½ΡƒΠΆΠ½ΠΎ ΠΏΡΡ‚ΡŒ основных ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… для нашСго Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска:

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

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, сСрСдина 0 + (4-0)/2 округлСнная Π²Π½ΠΈΠ· = 2:
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java
ΠœΡ‹ ΠΏΠΎΠΌΠ½ΠΈΠΌ, Ρ‡Ρ‚ΠΎ для этого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° нашС Ρ†Π΅Π»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π²Π½ΠΎ 3,7. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΌΡ‹ нашли ΡΡ€Π΅Π΄Π½ΡŽΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ, ΠΌΡ‹ провСряСм, Ρ€Π°Π²Π½Π° Π»ΠΈ ΠΎΠ½Π° Π½Π°ΡˆΠ΅ΠΌΡƒ Ρ†Π΅Π»Π΅Π²ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ. Если это Ρ‚Π°ΠΊ, ΠΌΡ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΈ всС Π³ΠΎΡ‚ΠΎΠ²ΠΎ!

К соТалСнию, срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ массива = 3. А нашСй Ρ†Π΅Π»ΡŒΡŽ являСтся 3,7.

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, совпадаСт Π»ΠΈ наша конСчная позиция β€” 1, с нашСй Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠ΅ΠΉ:

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

На Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ условиС Π²Π΅Ρ€Π½Π΅Ρ‚ false.

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ провСряСм, большС Π»ΠΈ нашС Ρ†Π΅Π»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π·Π° срСднСС:

Π­Ρ‚ΠΎ наш случай! Π¦Π΅Π»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 3,7 большС Ρ‡Π΅ΠΌ срСднСС 3. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π΄Π²ΡƒΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² нашСм массивС:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java
Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ ΠΌΡ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ Π½ΠΎΠ²Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ binarySearch(). ΠŸΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ наш массив, Ρ†Π΅Π»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 3,7, срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² качСствС Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² качСствС ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ.

Наш Π½ΠΎΠ²Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² binarySearch(), Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΎΡ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ 2 Π΄ΠΎ data.length-1:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java
Ѐункция Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Π½ΠΎΠ²ΡƒΡŽ ΡΡ€Π΅Π΄Π½ΡŽΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ data[3]:
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java
ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ нашС Ρ†Π΅Π»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 3,7 мСньшС срСднСго значСния 4, ΠΌΡ‹ отбрасываСм ΠΏΡ€Π°Π²ΡƒΡŽ сторону массива ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ Π½ΠΎΠ²Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ binarySearch(). На этот Ρ€Π°Π· наша Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ позиция остаСтся data[2], Π° конСчная позиция мСняСтся Π½Π° ΡΡ€Π΅Π΄Π½ΡŽΡŽ data[3].
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java
ΠœΡ‹ дошли Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, ΠΊΠΎΠ³Π΄Π° нашС условиС выполнится:

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ нашС ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ минус Π΅Π΄ΠΈΠ½ΠΈΡ†Π° равняСтся Π½Π°ΡˆΠ΅ΠΌΡƒ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ†Π΅Π»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ находится Π³Π΄Π΅-Ρ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. ΠœΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ элСмСнт массива, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±Π»ΠΈΠΆΠ΅ ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ 3,7. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ 4 (ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅) Π±Π»ΠΈΠΆΠ΅, Ρ‚ΠΎ соотвСтствСнно ΠΌΡ‹ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт: data[3].

ВСст скорости

Если объСм Π΄Π°Π½Π½Ρ‹Ρ… нСбольшой, рСкурсия ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ Ρ†ΠΈΠΊΠ» for. ΠŸΡ€ΠΈ тСстировании Π½Π° jsperf с 10 элСмСнтами, рСкурсивная функция Π² срСднСм Π½Π° 3% ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ Ρ†ΠΈΠΊΠ» for. Однако ΠΏΡ€ΠΈ количСствС элСмСнтов Π² 10 000, Ρ†ΠΈΠΊΠ» for Π½Π° 72% ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ рСкурсивная функция. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ рСкурсия практичСски Π² Π΄Π²Π° Ρ€Π°Π·Π° быстрСС, Ρ‡Π΅ΠΌ Ρ†ΠΈΠΊΠ» for, ΠΈ это огромная экономия Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ!

НадСюсь, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Π°ΠΌ понятны основы Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска Π² JavaScript!

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

Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρƒ вас Π΅ΡΡ‚ΡŒ список отсортированных ΠΏΠΎ Π°Π»Ρ„Π°Π²ΠΈΡ‚Ρƒ диснССвских Π³Π΅Ρ€ΠΎΠ΅Π², ΠΈ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Микки ΠœΠ°ΡƒΡΠ°.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java

Π›ΠΈΠ½Π΅ΠΉΠ½ΠΎ это Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π΄ΠΎΠ»Π³ΠΎ. А Ссли Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Β«ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ разрывания справочника ΠΏΠΎΠΏΠΎΠ»Π°ΠΌΒ», ΠΌΡ‹ ΠΏΠΎΠΏΠ°Π΄Π°Π΅ΠΌ сразу Π½Π° Jasmine, ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ смСло ΠΎΡ‚Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρƒ списка, понимая, Ρ‡Ρ‚ΠΎ Mickey Ρ‚Π°ΠΌ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java

По этому ΠΆΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ отбрасываСм Π²Ρ‚ΠΎΡ€ΠΎΠΉ столбСц. ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ Ρ‚Π°ΠΊΡƒΡŽ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ, ΠΌΡ‹ Π½Π°ΠΉΠ΄Π΅ΠΌ Микки Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ Π·Π° ΠΏΠ°Ρ€Ρƒ шагов.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java

ПсСвдокод Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска:

Для нашСго ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π΄Π°Π½Π° такая ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ°:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ поиск java

Π’Ρ€Π΅Ρ‚ΡŒΡ Π²Π΅Ρ‚ΠΊΠ°: Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² midpoint Π½Π΅ большС ΠΈ Π½Π΅ мСньшС, Ρ‡Π΅ΠΌ key, Π΅ΠΌΡƒ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ остаСтся, ΠΊΠ°ΠΊ Π±Ρ‹Ρ‚ΡŒ искомым числом. Π•Π³ΠΎ ΠΌΡ‹ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ Π² Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΈ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

НаконСц, ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ искомоС число ΠΈ вовсС отсутствуСт Π² массивС. Для ΡƒΡ‡Ρ‘Ρ‚Π° этого случая Π΄Π΅Π»Π°Π΅ΠΌ Ρ‚Π°ΠΊΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ:

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

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

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