SlideShare una empresa de Scribd logo
1 de 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: учитель

Más contenido relacionado

La actualidad más candente

Лекция 1: Введение в алгоритмы
Лекция 1: Введение в алгоритмыЛекция 1: Введение в алгоритмы
Лекция 1: Введение в алгоритмы
Mikhail Kurnosov
 
Лекция 2: АВЛ-деревья (AVL trees)
Лекция 2: АВЛ-деревья (AVL trees)Лекция 2: АВЛ-деревья (AVL trees)
Лекция 2: АВЛ-деревья (AVL trees)
Mikhail Kurnosov
 

La actualidad más candente (20)

Лекция 1: Введение в алгоритмы
Лекция 1: Введение в алгоритмыЛекция 1: Введение в алгоритмы
Лекция 1: Введение в алгоритмы
 
Hashing algorithms and its uses
Hashing algorithms and its usesHashing algorithms and its uses
Hashing algorithms and its uses
 
Selection Sort - Vipin Ramola
Selection Sort - Vipin RamolaSelection Sort - Vipin Ramola
Selection Sort - Vipin Ramola
 
skip list
skip listskip list
skip list
 
Hashing data
Hashing dataHashing data
Hashing data
 
Insertion sort
Insertion sortInsertion sort
Insertion sort
 
Linear and Binary search
Linear and Binary searchLinear and Binary search
Linear and Binary search
 
自傳製作
自傳製作自傳製作
自傳製作
 
Лекция 2: АВЛ-деревья (AVL trees)
Лекция 2: АВЛ-деревья (AVL trees)Лекция 2: АВЛ-деревья (AVL trees)
Лекция 2: АВЛ-деревья (AVL trees)
 
Heap_Sort1.pptx
Heap_Sort1.pptxHeap_Sort1.pptx
Heap_Sort1.pptx
 
Algorithm And analysis Lecture 03& 04-time complexity.
 Algorithm And analysis Lecture 03& 04-time complexity. Algorithm And analysis Lecture 03& 04-time complexity.
Algorithm And analysis Lecture 03& 04-time complexity.
 
Sorting algorithms
Sorting algorithmsSorting algorithms
Sorting algorithms
 
Quick Sort
Quick SortQuick Sort
Quick Sort
 
Searching Techniques and Analysis
Searching Techniques and AnalysisSearching Techniques and Analysis
Searching Techniques and Analysis
 
Heap sort
Heap sort Heap sort
Heap sort
 
Політичні погляди Августина Блаженного в праці “Про град Божий”
Політичні погляди Августина Блаженного в праці “Про град Божий”Політичні погляди Августина Блаженного в праці “Про град Божий”
Політичні погляди Августина Блаженного в праці “Про град Божий”
 
Data structure stack&queue basics
Data structure stack&queue   basicsData structure stack&queue   basics
Data structure stack&queue basics
 
Binary Search Tree (BST)
Binary Search Tree (BST)Binary Search Tree (BST)
Binary Search Tree (BST)
 
Queue Data Structure
Queue Data StructureQueue Data Structure
Queue Data Structure
 
Searching
SearchingSearching
Searching
 

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

Алгоритмы и структуры данных весна 2014 лекция 1
Алгоритмы и структуры данных весна 2014 лекция 1Алгоритмы и структуры данных весна 2014 лекция 1
Алгоритмы и структуры данных весна 2014 лекция 1
Technopark
 
Практикум по выполнению блока с информатика
Практикум по выполнению блока с информатикаПрактикум по выполнению блока с информатика
Практикум по выполнению блока с информатика
Екатерина Луговова
 
Лекция №7. Поиск. Деревья поиска. Предмет "Структуры и алгоритмы обработки да...
Лекция №7. Поиск. Деревья поиска. Предмет "Структуры и алгоритмы обработки да...Лекция №7. Поиск. Деревья поиска. Предмет "Структуры и алгоритмы обработки да...
Лекция №7. Поиск. Деревья поиска. Предмет "Структуры и алгоритмы обработки да...
Nikolay Grebenshikov
 
1332519 (1).pptx
1332519 (1).pptx1332519 (1).pptx
1332519 (1).pptx
rdes1
 
лабораторная работа №4
лабораторная работа №4лабораторная работа №4
лабораторная работа №4
Gulnaz Shakirova
 
Алгоритмы и структуры данных осень 2013 лекция 4
Алгоритмы и структуры данных осень 2013 лекция 4Алгоритмы и структуры данных осень 2013 лекция 4
Алгоритмы и структуры данных осень 2013 лекция 4
Technopark
 
Массивы в Java
Массивы в JavaМассивы в Java
Массивы в Java
metaform
 
291 цикл уроков на тему массивы
291 цикл уроков на тему  массивы291 цикл уроков на тему  массивы
291 цикл уроков на тему массивы
sany0507
 
Алгоритмы и структуры данных осень 2013 лекция 7
Алгоритмы и структуры данных осень 2013 лекция 7Алгоритмы и структуры данных осень 2013 лекция 7
Алгоритмы и структуры данных осень 2013 лекция 7
Technopark
 

Similar a Алгоритмы поиска (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
 

Más de Нижегородский институт управления

Más de Нижегородский институт управления (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: учитель

Notas del editor

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