SlideShare a Scribd company logo
1 of 29
РОССИЙСКАЯ АКАДЕМИЯ НАРОДНОГО ХОЗЯЙСТВА И 
ГОСУДАРСТВЕННОЙ СЛУЖБЫ ПРИ ПРЕЗИДЕНТЕ 
РОССИЙСКОЙ ФЕДЕРАЦИИ 
Нижегородский институт управления 
Кафедра информатики и информационных технологий 
Введение в алгоритмы и 
структуры данных 
Ивина Наталья Львовна 
доцент кафедры Информатики и ИТ
Тема 4. Алгоритмы поиска 
Поиск заданного элемента в неупорядоченном массиве. 
Поиск заданного элемента в упорядоченном массиве. 
Дихотомический поиск. 
Поиск заданной подпоследовательности в тексте (массиве).
Введение 
Будем считать, что множество из N элементов задано в виде 
массива целых чисел (int a[N]). Задача заключается в поиске 
элемента a[i], равного заданному «аргументу поиска» x. Алгоритмы 
поиска: 
•Линейный поиск 
•Линейный поиск с барьером 
•Двоичный поиск (поиск делением пополам, бинарный поиск) 
•Интерполяционный поиск
Поиск заданного элемента в 
неупорядоченном массиве. 
Линейный поиск 
Если нет никакой дополнительной информации о разыскиваемых 
данных, то очевидный подход - простой последовательный 
просмотр массива. Такой метод называется линейным поиском. 
Условия окончания поиска таковы: 
1) элемент найден, т.е. a[i] = x; 
2) весь массив просмотрен, и совпадения не обнаружено.
Поиск заданного элемента в 
неупорядоченном массиве. 
42 67 93 11 05 18 12 88 26 02 
18 
42 67 93 11 05 18 12 88 26 02 
18 
42 67 93 11 05 18 12 88 26 02 
18 
42 67 93 11 05 18 12 88 26 02 
18 
42 67 93 11 05 18 12 88 26 02 
18 
42 67 93 11 05 18 12 88 26 02 
18 
Линейный 
поиск. 
Пример
Поиск заданного элемента в 
неупорядоченном массиве. 
Линейный поиск. Блок-схема 1.
Поиск заданного элемента в 
неупорядоченном массиве. 
Линейный поиск. Блок-схема 2.
Поиск заданного элемента в 
неупорядоченном массиве. 
Линейный поиск. 
Оценка сложности. 
Длина массива - N элементов 
Число сравнений: 
лучший случай - 1 
худший случай - N 
средний случай - N/2 
Временная сложность: O(N). 
Если данные не отсортированы, то последовательный поиск 
является единственным возможным методом поиска!!!
Поиск заданного элемента в 
неупорядоченном массиве. 
Линейный поиск. 
Преимущества: 
• Не требует сортировки значений множества. 
• Не требует дополнительного анализа функции. 
• Не требует дополнительной памяти. 
Следовательно, может работать в потоковом режиме при 
непосредственном получении данных из любого источника. 
Недостатки: 
• Малоэффективен по сравнению с другими алгоритмами 
поиска. 
Следовательно, используется, если множество содержит 
небольшое количество элементов
Поиск заданного элемента в 
неупорядоченном массиве. 
Линейный поиск с барьером. 
В конец массива поместим дополнительный элемент со значением 
x. Назовем такой вспомогательный элемент «барьером» - он 
ограждает нас от выхода за границу массива. В этом случае 
размер массива увеличится на единицу, а сам массив будет 
описываться так: int a[N+1].
Поиск заданного элемента в 
неупорядоченном массиве. 
42 67 93 11 05 18 12 88 26 02 18 
18 
42 67 93 11 05 18 12 88 26 02 18 
18 
42 67 93 11 05 18 12 88 26 02 18 
18 
42 67 93 11 05 18 12 88 26 02 18 
18 
42 67 93 11 05 18 12 88 26 02 18 
18 
42 67 93 11 05 18 12 88 26 02 18 
18 
Линейный 
поиск с 
барьером. 
Пример.
Поиск заданного элемента в 
неупорядоченном массиве. 
Линейный поиск с барьером. 
Блок-схема.
Поиск заданного элемента в 
упорядоченном массиве. 
Дихотомический поиск. 
Дихотомический поиск - метод быстрого поиска, при котором 
упорядоченный набор данных разделяется на две части и 
операция сравнения всегда выполняется для среднего элемента 
списка: после сравнения одна половина списка отбрасывается и 
операция выполняется для оставшейся половины и т.д. 
Временная сложность: O(log2n).
Поиск заданного элемента в 
упорядоченном массиве. 
Двоичный поиск (поиск делением 
пополам, бинарный поиск) 
Основная идея – выбрать случайным образом некоторый 
элемент a[m], и сравнить его с аргументом поиска x. 
Если a[m] = x, то поиск заканчивается; 
если a[m] > x, то продолжаем искать x в левой от a[m] части 
массива; 
если a[m] < x, то продолжаем искать x в правой от a[m] части 
массива.
Поиск заданного элемента в 
упорядоченном массиве. Двоичный 
поиск (поиск делением пополам, 
бинарный поиск). Алгоритм. 
1. Определим L и R как левую и правую границу интервала поиска 
соответственно. 
2. Выберем произвольное m, лежащее между L и R, т.е. L ≤ m ≤ R. 
3. Сравним x с элементом массива a[m]; если они равны, то алгоритм 
завершен, иначе выполняем шаг 4. 
4. Если x > a[m], то изменяем левую границу интервала: L = m+1, 
иначе изменяем правую границу интервала: R = m–1. 
5. Если интервал не пуст, т.е. L ≤ R, идем на шаг 2.
Поиск заданного элемента в 
упорядоченном массиве. 
Двоичный поиск (поиск делением 
пополам, бинарный поиск). 
Оценка эффективности. 
Выбор m произволен в том смысле, что корректность алгоритма от 
него не зависит. 
Однако выбор m влияет на эффективность алгоритма. 
Оптимальное решение - выбор среднего элемента, так как при 
этом в любом случае будет исключаться половина интервала. 
Число сравнений: 
в лучшем случае = 1 
в худшем случае = log n.
Поиск заданного элемента в 
упорядоченном массиве. 
0 1 2 3 4 5 6 7 8 9 
L m R 
01 05 09 11 16 17 20 24 34 48 
34 
Двоичный 
поиск. Пример 1. 
L = 0, R = 9, 
m = (0 + 9) / 2 = 4 
0 1 2 3 4 5 6 7 8 9 
L m R 
01 05 09 11 16 17 20 24 34 48 
34 
L = 5, R = 9, 
m = (5 + 9) / 2 = 7 
0 1 2 3 4 5 6 7 8 9 
L=m R 
01 05 09 11 16 17 20 24 34 48 
34 
L = 8, R = 9, 
m = (8 + 9) / 2 = 8 
Результат поиска положителен. Искомое число обнаружено на 9 месте.
Поиск заданного элемента в 
упорядоченном мДваосисчинвыей. 
0 1 2 3 4 5 6 7 8 9 
L m R 
01 05 09 11 16 17 20 24 34 48 
02 
0 1 2 3 4 5 6 7 8 9 
L m R 
01 05 09 11 16 17 20 24 34 48 
02 
0 1 2 3 4 5 6 7 8 9 
L=m=R 
01 05 09 11 16 17 20 24 34 48 
02 
поиск. 
Пример 2. 
L = 0, R = 9, 
m = (0+9)/2= 4 
L = 0, R = 3, 
m = (0+3)/2= 1 
L = 0, R = 0, 
m = (0+0)/2= 0 
Здесь L стало равно единице, R осталось равным нулю, т.е. L > R, 
следовательно, искомого числа нет в данном массиве.
Поиск заданного элемента в 
упорядоченном массиве. Двоичный 
поиск. Блок-схема 1.
Поиск заданного элемента в 
упорядоченном массиве. Двоичный 
поиск. Блок-схема 2.
Поиск заданного элемента в 
упорядоченном массиве. Двоичный 
поиск. Пример к блок-схеме 2. 
0 1 2 3 4 5 6 7 8 9 
L m R 
01 05 09 11 16 17 20 24 34 48 
34 
0 1 2 3 4 5 6 7 8 9 
L m R 
01 05 09 11 16 17 20 24 34 48 
34 
0 1 2 3 4 5 6 7 8 9 
L=m R 
01 05 09 11 16 17 20 24 34 48 
34 
0 1 2 3 4 5 6 7 8 9 
L=m=R 
01 05 09 11 16 17 20 24 34 48 
34 
L = 0, R = 9, 
m = (0 + 9) / 2 = 4 
L = 5, R = 9, 
m = (5 + 9) / 2 = 7 
L = 8, R = 9, 
m = (8 + 9) / 2 = 8 
L = 8, R = 8, 
m = (8 + 8) / 2 = 8
Поиск заданного элемента в 
упорядоченном массиве. 
Интерполяционный поиск. 
От двоичного поиска отличается лишь выбором m. 
Если закон возрастания элементов массива линейный 
(a[m] ≈ km + b), то индекс m определяется из соотношения
Поиск заданного элемента в 
упорядоченном массиве. 
Интерполяционный поиск. 
В общем случае, если закон возрастания элементов имеет вид 
a[m] ≈ f[m], индекс m определяется из соотношения 
В остальном интерполяционный поиск работает так же, как и 
линейный, т.е. алгоритм и блок-схемы везде, кроме выбора m, 
остаются без изменений.
Поиск заданной 
подпоследовательности в 
тексте (массиве). Поиск 
подстроки в строке. 
Пусть задана строка S из N элементов и строка Р из M элементов. 
Описаны они так: 
string S[N], P[M]; 
Задача поиска подстроки P в строке S заключается в нахождении 
первого слева вхождения P в S, т.е. найти значение индекса i, 
начиная с которого 
S[i] = P[0], S[i + 1] = P[1],…, S[i + M – 1] = P[M – 1].
Поиск заданной 
подпоследовательности в тексте 
(массиве). Поиск подстроки в 
строке. Прямой поиск подстроки в 
строке. Алгоритм 
1. Установить i на начало строки S, т.е. i = 0. 
2. Проверить, не вышло ли i + M за границу N строки S. Если да, то 
алгоритм завершен (вхождения нет). 
3. Начиная с i-го символа s, провести посимвольное сравнение 
строк S и Р, т. е. S[i] и P[0], S[i+1] и P[1],…, 
S[i + M – 1] и P[M – 1]. 
4. Если хотя бы одна пара символов не совпала, то увеличить i и 
повторить шаг 2, иначе алгоритм завершен (вхождение 
найдено).
н а д в о р е т р а в а , н а т р а в е д р о в а 
т р а в е 
т р а в е 
т р а в е 
т р а в е 
т р а в е 
т р а в е 
т р а в е 
т р а в е 
т р а в е 
т р а в е 
т р а в е 
т р а в е 
т р а в е 
т р а в е 
т р а в е 
т р а в е 
т р а в е 
т р а в е 
т р а в е 
т р а в е 
т р а в е 
т р а в е 
т р а в е 
т р а в е 
т р а в е 
т р а в е 
т р а в е 
Пример
Поиск подстроки в строке. 
Блок-схема 1 
Комментарий: используется 
дополнительная переменная 
flag, которая явно изменяет 
свое значение с 0 на 1 при 
обнаружении вхождения 
образца P в текст S
Поиск подстроки в строке. 
Блок-схема 2 
Комментарий: используется 
тот факт, что при j = M мы 
дошли до конца образца P, 
тем самым обнаружив его 
вхождение в строку S
Поиск заданной 
подпоследовательности в тексте 
(массиве). Поиск подстроки в 
строке. 
Алгоритм работает достаточно эффективно, если при сравнении образца 
P с фрагментом текста S довольно быстро выявляется несовпадение 
(после нескольких сравнений во внутреннем цикле). 
Это случается довольно часто, но в худшем случае (когда в строке часто 
встречаются фрагменты, во многих символах совпадающие с образцом) 
производительность алгоритма значительно падает. 
Пример: 
S: учить, учиться, учитель 
P: учитель

More Related Content

What's hot

ამოხსენი ამოცანა 1 კლასი
ამოხსენი    ამოცანა      1 კლასიამოხსენი    ამოცანა      1 კლასი
ამოხსენი ამოცანა 1 კლასიTamriko Mgaloblishvili
 
паралелепіпед
паралелепіпедпаралелепіпед
паралелепіпедyahnoluida
 
7 geomsz m_2015_ua
7 geomsz m_2015_ua7 geomsz m_2015_ua
7 geomsz m_2015_uaSvinka Pepa
 
Правильні многогранники. Геометрія
 Правильні многогранники. Геометрія Правильні многогранники. Геометрія
Правильні многогранники. ГеометріяЛюдмила Яхно
 
Презентація:Рівняння х2=а. Основна тотожність квадратного кореня.
Презентація:Рівняння х2=а. Основна тотожність квадратного кореня.Презентація:Рівняння х2=а. Основна тотожність квадратного кореня.
Презентація:Рівняння х2=а. Основна тотожність квадратного кореня.sveta7940
 
Тиждень математики, інформатики і фізики
Тиждень математики, інформатики і фізикиТиждень математики, інформатики і фізики
Тиждень математики, інформатики і фізикиAlusya
 
ქვემდებარის რაობა
ქვემდებარის რაობაქვემდებარის რაობა
ქვემდებარის რაობაmarine kvaratskhelia
 
7950 наочні диктанти геометрія 7клас
7950 наочні диктанти геометрія 7клас 7950 наочні диктанти геометрія 7клас
7950 наочні диктанти геометрія 7клас jasperwtf
 
презентація "Осьова симетрія"
презентація "Осьова симетрія"презентація "Осьова симетрія"
презентація "Осьова симетрія"Olexandr Lazarets
 
практ.зан. 1. степеневі ряди
практ.зан. 1.  степеневі рядипракт.зан. 1.  степеневі ряди
практ.зан. 1. степеневі рядиcit-cit
 
Площа паралелограма
 Площа паралелограма  Площа паралелограма
Площа паралелограма sveta7940
 
урок 1 аксіоми планіметрії. кути. паралельні прямі
урок 1 аксіоми планіметрії. кути. паралельні пряміурок 1 аксіоми планіметрії. кути. паралельні прямі
урок 1 аксіоми планіметрії. кути. паралельні пряміАндрій Киричук
 
Презентація:Властивості множення раціональних чисел
Презентація:Властивості множення раціональних чиселПрезентація:Властивості множення раціональних чисел
Презентація:Властивості множення раціональних чиселsveta7940
 
Pandas Cheat Sheet
Pandas Cheat SheetPandas Cheat Sheet
Pandas Cheat SheetACASH1011
 
Лекция 9 Жадные алгоритмы
Лекция 9 Жадные алгоритмыЛекция 9 Жадные алгоритмы
Лекция 9 Жадные алгоритмыsimple_people
 
Кути, утворені при перетині двох прямих січною
Кути, утворені при перетині двох прямих січноюКути, утворені при перетині двох прямих січною
Кути, утворені при перетині двох прямих січноюFormula.co.ua
 

What's hot (20)

ამოხსენი ამოცანა 1 კლასი
ამოხსენი    ამოცანა      1 კლასიამოხსენი    ამოცანა      1 კლასი
ამოხსენი ამოცანა 1 კლასი
 
танграм
танграмтанграм
танграм
 
паралелепіпед
паралелепіпедпаралелепіпед
паралелепіпед
 
7 geomsz m_2015_ua
7 geomsz m_2015_ua7 geomsz m_2015_ua
7 geomsz m_2015_ua
 
Правильні многогранники. Геометрія
 Правильні многогранники. Геометрія Правильні многогранники. Геометрія
Правильні многогранники. Геометрія
 
Презентація:Рівняння х2=а. Основна тотожність квадратного кореня.
Презентація:Рівняння х2=а. Основна тотожність квадратного кореня.Презентація:Рівняння х2=а. Основна тотожність квадратного кореня.
Презентація:Рівняння х2=а. Основна тотожність квадратного кореня.
 
Функція
ФункціяФункція
Функція
 
Тиждень математики, інформатики і фізики
Тиждень математики, інформатики і фізикиТиждень математики, інформатики і фізики
Тиждень математики, інформатики і фізики
 
ქვემდებარის რაობა
ქვემდებარის რაობაქვემდებარის რაობა
ქვემდებარის რაობა
 
7950 наочні диктанти геометрія 7клас
7950 наочні диктанти геометрія 7клас 7950 наочні диктанти геометрія 7клас
7950 наочні диктанти геометрія 7клас
 
презентація "Осьова симетрія"
презентація "Осьова симетрія"презентація "Осьова симетрія"
презентація "Осьова симетрія"
 
практ.зан. 1. степеневі ряди
практ.зан. 1.  степеневі рядипракт.зан. 1.  степеневі ряди
практ.зан. 1. степеневі ряди
 
Площа паралелограма
 Площа паралелограма  Площа паралелограма
Площа паралелограма
 
урок 1 аксіоми планіметрії. кути. паралельні прямі
урок 1 аксіоми планіметрії. кути. паралельні пряміурок 1 аксіоми планіметрії. кути. паралельні прямі
урок 1 аксіоми планіметрії. кути. паралельні прямі
 
Презентація:Властивості множення раціональних чисел
Презентація:Властивості множення раціональних чиселПрезентація:Властивості множення раціональних чисел
Презентація:Властивості множення раціональних чисел
 
Довідник
ДовідникДовідник
Довідник
 
ფიგურის ფართობი
ფიგურის ფართობიფიგურის ფართობი
ფიგურის ფართობი
 
Pandas Cheat Sheet
Pandas Cheat SheetPandas Cheat Sheet
Pandas Cheat Sheet
 
Лекция 9 Жадные алгоритмы
Лекция 9 Жадные алгоритмыЛекция 9 Жадные алгоритмы
Лекция 9 Жадные алгоритмы
 
Кути, утворені при перетині двох прямих січною
Кути, утворені при перетині двох прямих січноюКути, утворені при перетині двох прямих січною
Кути, утворені при перетині двох прямих січною
 

Similar to Алгоритмы поиска

Алгоритмы и структуры данных весна 2014 лекция 1
Алгоритмы и структуры данных весна 2014 лекция 1Алгоритмы и структуры данных весна 2014 лекция 1
Алгоритмы и структуры данных весна 2014 лекция 1Technopark
 
Практикум по выполнению блока с информатика
Практикум по выполнению блока с информатикаПрактикум по выполнению блока с информатика
Практикум по выполнению блока с информатикаЕкатерина Луговова
 
Java. Строки. Класс String.
Java. Строки. Класс String.Java. Строки. Класс String.
Java. Строки. Класс String.Unguryan Vitaliy
 
презентация3
презентация3презентация3
презентация3Suchkov
 
Ruby: работа с массивами
Ruby: работа с массивамиRuby: работа с массивами
Ruby: работа с массивамиEvgeny Smirnov
 
Лекция №7. Поиск. Деревья поиска. Предмет "Структуры и алгоритмы обработки да...
Лекция №7. Поиск. Деревья поиска. Предмет "Структуры и алгоритмы обработки да...Лекция №7. Поиск. Деревья поиска. Предмет "Структуры и алгоритмы обработки да...
Лекция №7. Поиск. Деревья поиска. Предмет "Структуры и алгоритмы обработки да...Nikolay Grebenshikov
 
Одномерные массивы целых чисел
Одномерные массивы целых чиселОдномерные массивы целых чисел
Одномерные массивы целых чиселAndrey Dolinin
 
Ruby — Паттерны программирования
Ruby — Паттерны программированияRuby — Паттерны программирования
Ruby — Паттерны программированияEvgeny Smirnov
 
1332519 (1).pptx
1332519 (1).pptx1332519 (1).pptx
1332519 (1).pptxrdes1
 
лабораторная работа №4
лабораторная работа №4лабораторная работа №4
лабораторная работа №4Gulnaz Shakirova
 
02 сортировка и поиск
02 сортировка и поиск02 сортировка и поиск
02 сортировка и поискFedor Tsarev
 
Алгоритмы и структуры данных осень 2013 лекция 4
Алгоритмы и структуры данных осень 2013 лекция 4Алгоритмы и структуры данных осень 2013 лекция 4
Алгоритмы и структуры данных осень 2013 лекция 4Technopark
 
Массивы в Java
Массивы в JavaМассивы в Java
Массивы в Javametaform
 
291 цикл уроков на тему массивы
291 цикл уроков на тему  массивы291 цикл уроков на тему  массивы
291 цикл уроков на тему массивыsany0507
 

Similar to Алгоритмы поиска (20)

Алгоритмы и структуры данных весна 2014 лекция 1
Алгоритмы и структуры данных весна 2014 лекция 1Алгоритмы и структуры данных весна 2014 лекция 1
Алгоритмы и структуры данных весна 2014 лекция 1
 
Практикум по выполнению блока с информатика
Практикум по выполнению блока с информатикаПрактикум по выполнению блока с информатика
Практикум по выполнению блока с информатика
 
Java. Строки. Класс String.
Java. Строки. Класс String.Java. Строки. Класс String.
Java. Строки. Класс String.
 
презентация3
презентация3презентация3
презентация3
 
Ruby: работа с массивами
Ruby: работа с массивамиRuby: работа с массивами
Ruby: работа с массивами
 
Sort
SortSort
Sort
 
Лекция №7. Поиск. Деревья поиска. Предмет "Структуры и алгоритмы обработки да...
Лекция №7. Поиск. Деревья поиска. Предмет "Структуры и алгоритмы обработки да...Лекция №7. Поиск. Деревья поиска. Предмет "Структуры и алгоритмы обработки да...
Лекция №7. Поиск. Деревья поиска. Предмет "Структуры и алгоритмы обработки да...
 
Одномерные массивы целых чисел
Одномерные массивы целых чиселОдномерные массивы целых чисел
Одномерные массивы целых чисел
 
Ruby — Паттерны программирования
Ruby — Паттерны программированияRuby — Паттерны программирования
Ruby — Паттерны программирования
 
1332519 (1).pptx
1332519 (1).pptx1332519 (1).pptx
1332519 (1).pptx
 
лабораторная работа №4
лабораторная работа №4лабораторная работа №4
лабораторная работа №4
 
лабораторная работа №4
лабораторная работа №4лабораторная работа №4
лабораторная работа №4
 
лабораторная работа №4
лабораторная работа №4лабораторная работа №4
лабораторная работа №4
 
02 сортировка и поиск
02 сортировка и поиск02 сортировка и поиск
02 сортировка и поиск
 
Алгоритмы и структуры данных осень 2013 лекция 4
Алгоритмы и структуры данных осень 2013 лекция 4Алгоритмы и структуры данных осень 2013 лекция 4
Алгоритмы и структуры данных осень 2013 лекция 4
 
Массивы в Java
Массивы в JavaМассивы в Java
Массивы в Java
 
6
66
6
 
04 array
04 array04 array
04 array
 
Алгоритмы сортировки
Алгоритмы сортировкиАлгоритмы сортировки
Алгоритмы сортировки
 
291 цикл уроков на тему массивы
291 цикл уроков на тему  массивы291 цикл уроков на тему  массивы
291 цикл уроков на тему массивы
 

More from Нижегородский институт управления

Первое Всероссийское тестирование по истории Великой Отечественной войны
Первое Всероссийское тестирование по истории Великой Отечественной войныПервое Всероссийское тестирование по истории Великой Отечественной войны
Первое Всероссийское тестирование по истории Великой Отечественной войныНижегородский институт управления
 
Система национальных счетов и макроэкономических показателей. Платежный баланс
Система национальных счетов и макроэкономических показателей. Платежный балансСистема национальных счетов и макроэкономических показателей. Платежный баланс
Система национальных счетов и макроэкономических показателей. Платежный балансНижегородский институт управления
 

More from Нижегородский институт управления (20)

ФСПОиДП 14 лет
ФСПОиДП 14 летФСПОиДП 14 лет
ФСПОиДП 14 лет
 
Основные направления деятельности_ВШГУ2016
Основные направления деятельности_ВШГУ2016Основные направления деятельности_ВШГУ2016
Основные направления деятельности_ВШГУ2016
 
правила игры
правила игрыправила игры
правила игры
 
Первое Всероссийское тестирование по истории Великой Отечественной войны
Первое Всероссийское тестирование по истории Великой Отечественной войныПервое Всероссийское тестирование по истории Великой Отечественной войны
Первое Всероссийское тестирование по истории Великой Отечественной войны
 
70 лет со дня рождения Надеева Александра Тимофеевича
70 лет со дня рождения Надеева  Александра Тимофеевича70 лет со дня рождения Надеева  Александра Тимофеевича
70 лет со дня рождения Надеева Александра Тимофеевича
 
Статистика страхового и финансового рынков
Статистика страхового и финансового рынковСтатистика страхового и финансового рынков
Статистика страхового и финансового рынков
 
Статистика банковской и биржевой деятельности
Статистика банковской и биржевой деятельностиСтатистика банковской и биржевой деятельности
Статистика банковской и биржевой деятельности
 
Статистика государственных финансов и налогов
Статистика государственных финансов и налоговСтатистика государственных финансов и налогов
Статистика государственных финансов и налогов
 
Статистика денежного обращения, цен и инфляции
Статистика денежного обращения, цен и инфляцииСтатистика денежного обращения, цен и инфляции
Статистика денежного обращения, цен и инфляции
 
Статистика уровня жизни населения
Статистика уровня жизни населенияСтатистика уровня жизни населения
Статистика уровня жизни населения
 
Статистика труда и занятости населения
Статистика труда и занятости населенияСтатистика труда и занятости населения
Статистика труда и занятости населения
 
Статистика населения
Статистика  населенияСтатистика  населения
Статистика населения
 
Система национальных счетов и макроэкономических показателей. Платежный баланс
Система национальных счетов и макроэкономических показателей. Платежный балансСистема национальных счетов и макроэкономических показателей. Платежный баланс
Система национальных счетов и макроэкономических показателей. Платежный баланс
 
Статистические показатели отраслей и секторов экономики
Статистические показатели отраслей и секторов экономикиСтатистические показатели отраслей и секторов экономики
Статистические показатели отраслей и секторов экономики
 
Статистика национального богатства: основные и оборотные фонды
Статистика национального богатства: основные и оборотные фондыСтатистика национального богатства: основные и оборотные фонды
Статистика национального богатства: основные и оборотные фонды
 
7. Бюджетный федерализм
7. Бюджетный федерализм7. Бюджетный федерализм
7. Бюджетный федерализм
 
6. Общественные расходы
6. Общественные расходы6. Общественные расходы
6. Общественные расходы
 
5. Налоговая система
5. Налоговая система5. Налоговая система
5. Налоговая система
 
4.Распределение доходов, эффективность и благосостояние
4.Распределение доходов, эффективность и благосостояние4.Распределение доходов, эффективность и благосостояние
4.Распределение доходов, эффективность и благосостояние
 
Экономические аспекты общественного выбора
Экономические аспекты общественного выбораЭкономические аспекты общественного выбора
Экономические аспекты общественного выбора
 

Алгоритмы поиска

  • 1. РОССИЙСКАЯ АКАДЕМИЯ НАРОДНОГО ХОЗЯЙСТВА И ГОСУДАРСТВЕННОЙ СЛУЖБЫ ПРИ ПРЕЗИДЕНТЕ РОССИЙСКОЙ ФЕДЕРАЦИИ Нижегородский институт управления Кафедра информатики и информационных технологий Введение в алгоритмы и структуры данных Ивина Наталья Львовна доцент кафедры Информатики и ИТ
  • 2. Тема 4. Алгоритмы поиска Поиск заданного элемента в неупорядоченном массиве. Поиск заданного элемента в упорядоченном массиве. Дихотомический поиск. Поиск заданной подпоследовательности в тексте (массиве).
  • 3. Введение Будем считать, что множество из N элементов задано в виде массива целых чисел (int a[N]). Задача заключается в поиске элемента a[i], равного заданному «аргументу поиска» x. Алгоритмы поиска: •Линейный поиск •Линейный поиск с барьером •Двоичный поиск (поиск делением пополам, бинарный поиск) •Интерполяционный поиск
  • 4. Поиск заданного элемента в неупорядоченном массиве. Линейный поиск Если нет никакой дополнительной информации о разыскиваемых данных, то очевидный подход - простой последовательный просмотр массива. Такой метод называется линейным поиском. Условия окончания поиска таковы: 1) элемент найден, т.е. a[i] = x; 2) весь массив просмотрен, и совпадения не обнаружено.
  • 5. Поиск заданного элемента в неупорядоченном массиве. 42 67 93 11 05 18 12 88 26 02 18 42 67 93 11 05 18 12 88 26 02 18 42 67 93 11 05 18 12 88 26 02 18 42 67 93 11 05 18 12 88 26 02 18 42 67 93 11 05 18 12 88 26 02 18 42 67 93 11 05 18 12 88 26 02 18 Линейный поиск. Пример
  • 6. Поиск заданного элемента в неупорядоченном массиве. Линейный поиск. Блок-схема 1.
  • 7. Поиск заданного элемента в неупорядоченном массиве. Линейный поиск. Блок-схема 2.
  • 8. Поиск заданного элемента в неупорядоченном массиве. Линейный поиск. Оценка сложности. Длина массива - N элементов Число сравнений: лучший случай - 1 худший случай - N средний случай - N/2 Временная сложность: O(N). Если данные не отсортированы, то последовательный поиск является единственным возможным методом поиска!!!
  • 9. Поиск заданного элемента в неупорядоченном массиве. Линейный поиск. Преимущества: • Не требует сортировки значений множества. • Не требует дополнительного анализа функции. • Не требует дополнительной памяти. Следовательно, может работать в потоковом режиме при непосредственном получении данных из любого источника. Недостатки: • Малоэффективен по сравнению с другими алгоритмами поиска. Следовательно, используется, если множество содержит небольшое количество элементов
  • 10. Поиск заданного элемента в неупорядоченном массиве. Линейный поиск с барьером. В конец массива поместим дополнительный элемент со значением x. Назовем такой вспомогательный элемент «барьером» - он ограждает нас от выхода за границу массива. В этом случае размер массива увеличится на единицу, а сам массив будет описываться так: int a[N+1].
  • 11. Поиск заданного элемента в неупорядоченном массиве. 42 67 93 11 05 18 12 88 26 02 18 18 42 67 93 11 05 18 12 88 26 02 18 18 42 67 93 11 05 18 12 88 26 02 18 18 42 67 93 11 05 18 12 88 26 02 18 18 42 67 93 11 05 18 12 88 26 02 18 18 42 67 93 11 05 18 12 88 26 02 18 18 Линейный поиск с барьером. Пример.
  • 12. Поиск заданного элемента в неупорядоченном массиве. Линейный поиск с барьером. Блок-схема.
  • 13. Поиск заданного элемента в упорядоченном массиве. Дихотомический поиск. Дихотомический поиск - метод быстрого поиска, при котором упорядоченный набор данных разделяется на две части и операция сравнения всегда выполняется для среднего элемента списка: после сравнения одна половина списка отбрасывается и операция выполняется для оставшейся половины и т.д. Временная сложность: O(log2n).
  • 14. Поиск заданного элемента в упорядоченном массиве. Двоичный поиск (поиск делением пополам, бинарный поиск) Основная идея – выбрать случайным образом некоторый элемент a[m], и сравнить его с аргументом поиска x. Если a[m] = x, то поиск заканчивается; если a[m] > x, то продолжаем искать x в левой от a[m] части массива; если a[m] < x, то продолжаем искать x в правой от a[m] части массива.
  • 15. Поиск заданного элемента в упорядоченном массиве. Двоичный поиск (поиск делением пополам, бинарный поиск). Алгоритм. 1. Определим L и R как левую и правую границу интервала поиска соответственно. 2. Выберем произвольное m, лежащее между L и R, т.е. L ≤ m ≤ R. 3. Сравним x с элементом массива a[m]; если они равны, то алгоритм завершен, иначе выполняем шаг 4. 4. Если x > a[m], то изменяем левую границу интервала: L = m+1, иначе изменяем правую границу интервала: R = m–1. 5. Если интервал не пуст, т.е. L ≤ R, идем на шаг 2.
  • 16. Поиск заданного элемента в упорядоченном массиве. Двоичный поиск (поиск делением пополам, бинарный поиск). Оценка эффективности. Выбор m произволен в том смысле, что корректность алгоритма от него не зависит. Однако выбор m влияет на эффективность алгоритма. Оптимальное решение - выбор среднего элемента, так как при этом в любом случае будет исключаться половина интервала. Число сравнений: в лучшем случае = 1 в худшем случае = log n.
  • 17. Поиск заданного элемента в упорядоченном массиве. 0 1 2 3 4 5 6 7 8 9 L m R 01 05 09 11 16 17 20 24 34 48 34 Двоичный поиск. Пример 1. L = 0, R = 9, m = (0 + 9) / 2 = 4 0 1 2 3 4 5 6 7 8 9 L m R 01 05 09 11 16 17 20 24 34 48 34 L = 5, R = 9, m = (5 + 9) / 2 = 7 0 1 2 3 4 5 6 7 8 9 L=m R 01 05 09 11 16 17 20 24 34 48 34 L = 8, R = 9, m = (8 + 9) / 2 = 8 Результат поиска положителен. Искомое число обнаружено на 9 месте.
  • 18. Поиск заданного элемента в упорядоченном мДваосисчинвыей. 0 1 2 3 4 5 6 7 8 9 L m R 01 05 09 11 16 17 20 24 34 48 02 0 1 2 3 4 5 6 7 8 9 L m R 01 05 09 11 16 17 20 24 34 48 02 0 1 2 3 4 5 6 7 8 9 L=m=R 01 05 09 11 16 17 20 24 34 48 02 поиск. Пример 2. L = 0, R = 9, m = (0+9)/2= 4 L = 0, R = 3, m = (0+3)/2= 1 L = 0, R = 0, m = (0+0)/2= 0 Здесь L стало равно единице, R осталось равным нулю, т.е. L > R, следовательно, искомого числа нет в данном массиве.
  • 19. Поиск заданного элемента в упорядоченном массиве. Двоичный поиск. Блок-схема 1.
  • 20. Поиск заданного элемента в упорядоченном массиве. Двоичный поиск. Блок-схема 2.
  • 21. Поиск заданного элемента в упорядоченном массиве. Двоичный поиск. Пример к блок-схеме 2. 0 1 2 3 4 5 6 7 8 9 L m R 01 05 09 11 16 17 20 24 34 48 34 0 1 2 3 4 5 6 7 8 9 L m R 01 05 09 11 16 17 20 24 34 48 34 0 1 2 3 4 5 6 7 8 9 L=m R 01 05 09 11 16 17 20 24 34 48 34 0 1 2 3 4 5 6 7 8 9 L=m=R 01 05 09 11 16 17 20 24 34 48 34 L = 0, R = 9, m = (0 + 9) / 2 = 4 L = 5, R = 9, m = (5 + 9) / 2 = 7 L = 8, R = 9, m = (8 + 9) / 2 = 8 L = 8, R = 8, m = (8 + 8) / 2 = 8
  • 22. Поиск заданного элемента в упорядоченном массиве. Интерполяционный поиск. От двоичного поиска отличается лишь выбором m. Если закон возрастания элементов массива линейный (a[m] ≈ km + b), то индекс m определяется из соотношения
  • 23. Поиск заданного элемента в упорядоченном массиве. Интерполяционный поиск. В общем случае, если закон возрастания элементов имеет вид a[m] ≈ f[m], индекс m определяется из соотношения В остальном интерполяционный поиск работает так же, как и линейный, т.е. алгоритм и блок-схемы везде, кроме выбора m, остаются без изменений.
  • 24. Поиск заданной подпоследовательности в тексте (массиве). Поиск подстроки в строке. Пусть задана строка S из N элементов и строка Р из M элементов. Описаны они так: string S[N], P[M]; Задача поиска подстроки P в строке S заключается в нахождении первого слева вхождения P в S, т.е. найти значение индекса i, начиная с которого S[i] = P[0], S[i + 1] = P[1],…, S[i + M – 1] = P[M – 1].
  • 25. Поиск заданной подпоследовательности в тексте (массиве). Поиск подстроки в строке. Прямой поиск подстроки в строке. Алгоритм 1. Установить i на начало строки S, т.е. i = 0. 2. Проверить, не вышло ли i + M за границу N строки S. Если да, то алгоритм завершен (вхождения нет). 3. Начиная с i-го символа s, провести посимвольное сравнение строк S и Р, т. е. S[i] и P[0], S[i+1] и P[1],…, S[i + M – 1] и P[M – 1]. 4. Если хотя бы одна пара символов не совпала, то увеличить i и повторить шаг 2, иначе алгоритм завершен (вхождение найдено).
  • 26. н а д в о р е т р а в а , н а т р а в е д р о в а т р а в е т р а в е т р а в е т р а в е т р а в е т р а в е т р а в е т р а в е т р а в е т р а в е т р а в е т р а в е т р а в е т р а в е т р а в е т р а в е т р а в е т р а в е т р а в е т р а в е т р а в е т р а в е т р а в е т р а в е т р а в е т р а в е т р а в е Пример
  • 27. Поиск подстроки в строке. Блок-схема 1 Комментарий: используется дополнительная переменная flag, которая явно изменяет свое значение с 0 на 1 при обнаружении вхождения образца P в текст S
  • 28. Поиск подстроки в строке. Блок-схема 2 Комментарий: используется тот факт, что при j = M мы дошли до конца образца P, тем самым обнаружив его вхождение в строку S
  • 29. Поиск заданной подпоследовательности в тексте (массиве). Поиск подстроки в строке. Алгоритм работает достаточно эффективно, если при сравнении образца P с фрагментом текста S довольно быстро выявляется несовпадение (после нескольких сравнений во внутреннем цикле). Это случается довольно часто, но в худшем случае (когда в строке часто встречаются фрагменты, во многих символах совпадающие с образцом) производительность алгоритма значительно падает. Пример: S: учить, учиться, учитель P: учитель

Editor's Notes

  1. Результат поиска положителен. Искомое число обнаружено на девятом месте.