Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Алгоритми злиття

Else

Else

While A[i] К do

і < і + 1

if і < п

return і

return –1

Якщо вхідний список впорядкований, то можна скористатися ще одним вдосконаленням: пошук в такому списку можна завершувати, як тільки зустрінеться елемент, не менший ключа пошуку.

Алгоритм в найгіршому та найсприятливішому випадках є лінійним.

Бінарний пошук порівнює ключ К з середнім елементом масиву А[ т ]. Якщо вони рівні, то алгоритм закінчує роботу. В противному випадку та же операція рекурсивно повторюється для першої половини масиву, якщо К<А[ т ], і для другої, якщо К>А[ т ]:

Приклад: Знайти ключ К=70, застосував алгоритм бінарного пошуку до масиву

Ітерації алгоритму показані у наступній таблиці:

Бінарний пошук засновано на рекурсії, але його легко реалізувати як не рекурсивний алгоритм. Розглянемо псевдокод:

Алгоритм BinarySearch (А [0.. п- 1], К)

// Вхідні данні: Масив А[0.. п -1], впорядкований у зростаючому порядку

//та ключ К

//Вихідні данні: Індекс елементу масиву, рівного К,

// або —1, якщо такого елементу немає

l 0; r п —1;

while l r do

m

if К=А[ т ]

return m

else if К<А[ т ]

r m -1

l m +l

return — 1

Інтерполяційний пошук на відміну від бінарного, що завжди порівнює ключ з середнім значенням впорядкованого масиву (тобто, завжди зменшує розмір задачі вдвоє), враховує значення ключа пошуку при визначенні елементу масиву, що буде порівнюватися з ключем (тобто алгоритм імітує пошук імені в телефонному довіднику, якщо ми шукаємо Горбенко, то довідник відкриваємо на початку, а не всередині чи вкінці, як поступили при пошуку – Підгірного).

 

Злиття двох впорядкованих масивів можна виконати наступним чином. Два указника (індекси масивів) після ініціалізації вказують на перші елементи масивів, що зливаються. Далі елементи на які вказують указники, порівнюються, і менший з них додається до нового масиву. Після цього індекс меншого елементу збільшується, та він вказує на елемент, що слідує за тільки що скопійованим. Ця операція повторюється до тих пір доки не вичерпається один з масивів, що зливаються, після чого елементи, що залишилися іншого масиву просто додаються в кінець нового масиву.

Алгоритм Merge (В[0..р-1]. С[0..q-1], А[0..р+q-1])

// Злиття двох впорядкованих масивів в один

// Вхідні данні: Впорядковані масиви В[0..р—1] та C[0..q-i]

// Вихідні данні: Впорядкований масив А[0..р+q—1],

// що складається з елементів В к С

i0; j0; к0

while i <р and j<q do

if В[ i ] C[ j ]

A[ k ] B[ i ]; ii +l

<== предыдущая лекция | следующая лекция ==>
Види алгоритмів пошуку: послідовний, бінарний | Французьке просвітництво ХVІІІ ст
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 922; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.