SlideShare a Scribd company logo
РОССИЙСКАЯ АКАДЕМИЯ НАРОДНОГО ХОЗЯЙСТВА И 
ГОСУДАРСТВЕННОЙ СЛУЖБЫ ПРИ ПРЕЗИДЕНТЕ 
РОССИЙСКОЙ ФЕДЕРАЦИИ 
Нижегородский институт управления 
Кафедра информатики и информационных технологий 
Введение в алгоритмы и 
структуры данных 
Ивина Наталья Львовна 
доцент кафедры Информатики и ИТ
Тема 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

Hashing
HashingHashing
Hashing
Abbas Ali
 
Arrays in Data Structure and Algorithm
Arrays in Data Structure and Algorithm Arrays in Data Structure and Algorithm
Arrays in Data Structure and Algorithm
KristinaBorooah
 
Array data structure
Array data structureArray data structure
Array data structure
maamir farooq
 
Binary Heap Tree, Data Structure
Binary Heap Tree, Data Structure Binary Heap Tree, Data Structure
Binary Heap Tree, Data Structure
Anand Ingle
 
Queue Data Structure
Queue Data StructureQueue Data Structure
Queue Data Structure
Zidny Nafan
 
Data structures
Data structuresData structures
Data structures
Sneha Chopra
 
Disjoint sets union, find
Disjoint sets  union, findDisjoint sets  union, find
Disjoint sets union, find
subhashchandra197
 
Radix sorting
Radix sortingRadix sorting
Radix sorting
Madhawa Gunasekara
 
Algorithm analysis (All in one)
Algorithm analysis (All in one)Algorithm analysis (All in one)
Algorithm analysis (All in one)
jehan1987
 
Bucket sort
Bucket sortBucket sort
Data Structures Chapter-4
Data Structures Chapter-4Data Structures Chapter-4
Data Structures Chapter-4
priyavanimurugarajan
 
Лекция 6: Словари. Хеш-таблицы
Лекция 6: Словари. Хеш-таблицыЛекция 6: Словари. Хеш-таблицы
Лекция 6: Словари. Хеш-таблицыMikhail Kurnosov
 
Data structure
Data structureData structure
Data structure
viswanathV8
 
Hash table in data structure and algorithm
Hash table in data structure and algorithmHash table in data structure and algorithm
Hash table in data structure and algorithm
Aamir Sohail
 
Rahat &amp; juhith
Rahat &amp; juhithRahat &amp; juhith
Rahat &amp; juhith
Rj Juhith
 
Lec3
Lec3Lec3
Searching linear &amp; binary search
Searching linear &amp; binary searchSearching linear &amp; binary search
Searching linear &amp; binary search
nikunjandy
 
8 python data structure-1
8 python data structure-18 python data structure-1
8 python data structure-1
Prof. Dr. K. Adisesha
 
Quick Sort , Merge Sort , Heap Sort
Quick Sort , Merge Sort ,  Heap SortQuick Sort , Merge Sort ,  Heap Sort
Quick Sort , Merge Sort , Heap Sort
Mohammed Hussein
 
Selection sort algorithm presentation, selection sort example using power point
Selection sort algorithm presentation, selection sort example using power point Selection sort algorithm presentation, selection sort example using power point
Selection sort algorithm presentation, selection sort example using power point
University of Science and Technology Chitttagong
 

What's hot (20)

Hashing
HashingHashing
Hashing
 
Arrays in Data Structure and Algorithm
Arrays in Data Structure and Algorithm Arrays in Data Structure and Algorithm
Arrays in Data Structure and Algorithm
 
Array data structure
Array data structureArray data structure
Array data structure
 
Binary Heap Tree, Data Structure
Binary Heap Tree, Data Structure Binary Heap Tree, Data Structure
Binary Heap Tree, Data Structure
 
Queue Data Structure
Queue Data StructureQueue Data Structure
Queue Data Structure
 
Data structures
Data structuresData structures
Data structures
 
Disjoint sets union, find
Disjoint sets  union, findDisjoint sets  union, find
Disjoint sets union, find
 
Radix sorting
Radix sortingRadix sorting
Radix sorting
 
Algorithm analysis (All in one)
Algorithm analysis (All in one)Algorithm analysis (All in one)
Algorithm analysis (All in one)
 
Bucket sort
Bucket sortBucket sort
Bucket sort
 
Data Structures Chapter-4
Data Structures Chapter-4Data Structures Chapter-4
Data Structures Chapter-4
 
Лекция 6: Словари. Хеш-таблицы
Лекция 6: Словари. Хеш-таблицыЛекция 6: Словари. Хеш-таблицы
Лекция 6: Словари. Хеш-таблицы
 
Data structure
Data structureData structure
Data structure
 
Hash table in data structure and algorithm
Hash table in data structure and algorithmHash table in data structure and algorithm
Hash table in data structure and algorithm
 
Rahat &amp; juhith
Rahat &amp; juhithRahat &amp; juhith
Rahat &amp; juhith
 
Lec3
Lec3Lec3
Lec3
 
Searching linear &amp; binary search
Searching linear &amp; binary searchSearching linear &amp; binary search
Searching linear &amp; binary search
 
8 python data structure-1
8 python data structure-18 python data structure-1
8 python data structure-1
 
Quick Sort , Merge Sort , Heap Sort
Quick Sort , Merge Sort ,  Heap SortQuick Sort , Merge Sort ,  Heap Sort
Quick Sort , Merge Sort , Heap Sort
 
Selection sort algorithm presentation, selection sort example using power point
Selection sort algorithm presentation, selection sort example using power point Selection sort algorithm presentation, selection sort example using power point
Selection sort algorithm presentation, selection sort example using power point
 

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

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

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 цикл уроков на тему массивы
 
Алгоритмы и структуры данных осень 2013 лекция 7
Алгоритмы и структуры данных осень 2013 лекция 7Алгоритмы и структуры данных осень 2013 лекция 7
Алгоритмы и структуры данных осень 2013 лекция 7
 

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

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

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. Результат поиска положителен. Искомое число обнаружено на девятом месте.