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

List , tuples, dictionaries and regular expressions in python
List , tuples, dictionaries and regular expressions in pythonList , tuples, dictionaries and regular expressions in python
List , tuples, dictionaries and regular expressions in pythonchanna basava
 
UNIT II LINEAR DATA STRUCTURES – STACKS, QUEUES
UNIT II 	LINEAR DATA STRUCTURES – STACKS, QUEUES	UNIT II 	LINEAR DATA STRUCTURES – STACKS, QUEUES
UNIT II LINEAR DATA STRUCTURES – STACKS, QUEUES Kathirvel Ayyaswamy
 
Polynomial reppresentation using Linkedlist-Application of LL.pptx
Polynomial reppresentation using Linkedlist-Application of LL.pptxPolynomial reppresentation using Linkedlist-Application of LL.pptx
Polynomial reppresentation using Linkedlist-Application of LL.pptxAlbin562191
 
Deep Learning - Overview of my work II
Deep Learning - Overview of my work IIDeep Learning - Overview of my work II
Deep Learning - Overview of my work IIMohamed Loey
 
Selection sort
Selection sortSelection sort
Selection sortJay Patel
 
Recursion - Algorithms and Data Structures
Recursion - Algorithms and Data StructuresRecursion - Algorithms and Data Structures
Recursion - Algorithms and Data StructuresPriyanka Rana
 
Sorting Seminar Presentation by Ashin Guha Majumder
Sorting Seminar Presentation by Ashin Guha MajumderSorting Seminar Presentation by Ashin Guha Majumder
Sorting Seminar Presentation by Ashin Guha MajumderAshin Guha Majumder
 
Introduction to Array ppt
Introduction to Array pptIntroduction to Array ppt
Introduction to Array pptsandhya yadav
 
Object-oriented Programming in Python
Object-oriented Programming in PythonObject-oriented Programming in Python
Object-oriented Programming in PythonJuan-Manuel Gimeno
 
Data Mining: Text and web mining
Data Mining: Text and web miningData Mining: Text and web mining
Data Mining: Text and web miningDataminingTools Inc
 
Linear Search Data Structure
Linear Search Data StructureLinear Search Data Structure
Linear Search Data StructureTalha Shaikh
 
Data structure lecture 1
Data structure lecture 1Data structure lecture 1
Data structure lecture 1Kumar
 
Linked stacks and queues
Linked stacks and queuesLinked stacks and queues
Linked stacks and queuesRamzi Alqrainy
 

What's hot (20)

List , tuples, dictionaries and regular expressions in python
List , tuples, dictionaries and regular expressions in pythonList , tuples, dictionaries and regular expressions in python
List , tuples, dictionaries and regular expressions in python
 
UNIT II LINEAR DATA STRUCTURES – STACKS, QUEUES
UNIT II 	LINEAR DATA STRUCTURES – STACKS, QUEUES	UNIT II 	LINEAR DATA STRUCTURES – STACKS, QUEUES
UNIT II LINEAR DATA STRUCTURES – STACKS, QUEUES
 
Polynomial reppresentation using Linkedlist-Application of LL.pptx
Polynomial reppresentation using Linkedlist-Application of LL.pptxPolynomial reppresentation using Linkedlist-Application of LL.pptx
Polynomial reppresentation using Linkedlist-Application of LL.pptx
 
Os2013 lap2-ridwan
Os2013 lap2-ridwanOs2013 lap2-ridwan
Os2013 lap2-ridwan
 
Deep Learning - Overview of my work II
Deep Learning - Overview of my work IIDeep Learning - Overview of my work II
Deep Learning - Overview of my work II
 
File handling in Python
File handling in PythonFile handling in Python
File handling in Python
 
Selection sort
Selection sortSelection sort
Selection sort
 
C string
C stringC string
C string
 
Array
ArrayArray
Array
 
Python list
Python listPython list
Python list
 
Recursion - Algorithms and Data Structures
Recursion - Algorithms and Data StructuresRecursion - Algorithms and Data Structures
Recursion - Algorithms and Data Structures
 
Sorting Seminar Presentation by Ashin Guha Majumder
Sorting Seminar Presentation by Ashin Guha MajumderSorting Seminar Presentation by Ashin Guha Majumder
Sorting Seminar Presentation by Ashin Guha Majumder
 
Introduction to Array ppt
Introduction to Array pptIntroduction to Array ppt
Introduction to Array ppt
 
Object-oriented Programming in Python
Object-oriented Programming in PythonObject-oriented Programming in Python
Object-oriented Programming in Python
 
Stack and queue
Stack and queueStack and queue
Stack and queue
 
Data Mining: Text and web mining
Data Mining: Text and web miningData Mining: Text and web mining
Data Mining: Text and web mining
 
Linear Search Data Structure
Linear Search Data StructureLinear Search Data Structure
Linear Search Data Structure
 
Database connectivity in python
Database connectivity in pythonDatabase connectivity in python
Database connectivity in python
 
Data structure lecture 1
Data structure lecture 1Data structure lecture 1
Data structure lecture 1
 
Linked stacks and queues
Linked stacks and queuesLinked stacks and queues
Linked stacks and queues
 

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

Алгоритмы и структуры данных весна 2014 лекция 1
Алгоритмы и структуры данных весна 2014 лекция 1Алгоритмы и структуры данных весна 2014 лекция 1
Алгоритмы и структуры данных весна 2014 лекция 1Technopark
 
Практикум по выполнению блока с информатика
Практикум по выполнению блока с информатикаПрактикум по выполнению блока с информатика
Практикум по выполнению блока с информатикаЕкатерина Луговова
 
Java. Строки. Класс String.
Java. Строки. Класс String.Java. Строки. Класс String.
Java. Строки. Класс String.Unguryan Vitaliy
 
презентация3
презентация3презентация3
презентация3Suchkov
 
Лекция 1. Анализ эффективности алгоритмов
Лекция 1. Анализ эффективности алгоритмовЛекция 1. Анализ эффективности алгоритмов
Лекция 1. Анализ эффективности алгоритмовMikhail Kurnosov
 
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
 
Лекция 1. Анализ эффективности алгоритмов
Лекция 1. Анализ эффективности алгоритмовЛекция 1. Анализ эффективности алгоритмов
Лекция 1. Анализ эффективности алгоритмов
 
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. Результат поиска положителен. Искомое число обнаружено на девятом месте.