Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекція 5. оп.doc
Скачиваний:
5
Добавлен:
14.08.2019
Размер:
121.86 Кб
Скачать

Метод екстраполяцій

Переходячи до наступного методу, давайте уявимо, що Вам терміново знадобилося дізнатися, як перекладається українською мовою російське слово «зошит». Тобто перед нами завдання - знайти це слово в словнику.

По суті всі наші подальші дії будуть нічим іншим, як реалізацією деякого алгоритму пошуку. Масив значень - це словник, всі значення в нім відсортовані за абеткою. Шукане слово нам відоме. Означає зараз ми шукатимемо у відсортованому масиві.

Ви не почнете ділити всі сторінки книги навпіл, дивитися що там в середині і отлістивать в одну або іншу сторону рівно сторінок словника і так далі... Тобто метод дихотомії Ви проігноруєте.

Ви просто візьмете і ... і знайдете потрібне слово, чи не так?

А зараз зупинимося і ще раз повторюваний пошук, при цьому дуже уважно проаналізуємо наші дії. Отже, шукане слово починається на букву T, відкриваємо словник трохи далі, ніж на середині. Нам попалася буква Р, ясно, що шукати треба в другій частині словника, а на скільки відступити? На половину? "Ну навіщо ж на половину, це більше, ніж треба", скажете Ви і матимете рацію. Адже нам не просто відомо, в якій частині масиву шукане значення, ми володіємо ще і інформацією про те, наскільки далеко треба зробити крок!

Ось ми і підійшли до суті даного методу. У відмінності від перших два, він не просто визначає зону нового пошуку, але і оцінює величину нового кроку.

Алгоритм носить назву екстраполяційного методу і має швидкість збіжності більшу, ніж перші два методи.

Примітка:

Якщо при пошуку по бінарному дереву за кожен крок масив пошуку зменшувався з N значень до N/2, то при цьому методі за кожен крок зона пошуку зменшується з N значень до кореня квадратного з N. Якщо До лежить між Kn і Km, то наступний крок робимо від n на величину

(n - m)*(K - Kn)/(Km - Kn)

Швидкість екстраполяционнго методу починає істотно перевищувати швидкість методу половинного ділення при великих значеннях N.

Отже, ми розглянули конкретні алгоритми пошуку у відсортованому масиві. Таким чином можна підвести підсумки:

· Якщо необхідно шукати в невеликому масиві і шукати потрібно нечасто, простіше скористатися методом перебору всіх значень масиву;

· Якщо масив значень великий і шукати потрібно часто, відсортуйте масив і скористайтеся методом половинного ділення або інтерполяційним методом. Яким з них саме, вибирайте виходячи з того, наскільки великий масив і який метод Вам самим легко реалізувати в коді.

Алгоритм бінарного пошуку

Припустимо, що у нас є відсортований масив.

Відповіддю на питання: «Яким чином можна поліпшити швидкодію?» може служити бінарний пошук. Він заснований на стратегії "розділяй і володарюй": починаємо з великої проблеми, розбиваємо її на маленькі проблеми, які легко вирішити, а, потім, отже, вирішуємо всю велику проблему.

Метод (алгоритм) бінарного пошуку реалізується таким чином:

1

-5

2

-1

Verch

3

0

4

2

Sred

5

13

6

44

Niz

7

70

8

75

9

91

Спочатку зразок порівнюється з середнім (по номеру) елементом масиву
(мал. 1, а).

  • Якщо зразок рівний середньому елементу, то завдання вирішене.

  • Якщо зразок більше середнього елементу, то це означає, що шуканий елемент розташований нижче середнього елементу (між елементами з номерами sred+1 і niz), і за нове значення verb береться sred+i, а значення niz не міняється (мал. 2).

1

-5

2

-1

3

0

4

2

5

13

Verch

6

44

7

70

Sred

8

75

Niz

9

91


  • Якщо зразок менше середнього елементу, то це означає, що шуканий елемент розташований вище середнього елементу (між елементами з номерами verh і sred-1), і за нове значення niz береться sred-1, а значення verh не міняється (мал. 3).

1

-5

Verch

2

-1

Sred

3

0

Niz

4

2

5

13

6

44

7

70

8

75

9

91

2. Після того, як визначена частина масиву, в якій може знаходитися шуканий елемент, за формулою (niz-verh) /2+verh обчислюється нове значення sred і пошук продовжується.

Алгоритм бінарного пошуку закінчує свою роботу, якщо шуканий елемент знайдений або якщо перед виконанням чергового циклу пошуку виявляється, що значення verh більше, ніж niz.

Мал. 4. Блок-схема алгоритму бінарного пошуку у впорядкованому за збільшенням масиві

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]