- •ОЗВУЧЕННАЯ ПРЕЗЕНТАЦИЯСтруктуры и
- •Алгоритмы поискаТЕМА 6 в массивах
- •Задача поиска в структурах данных
- •КЛАССИФИКАЦИЯ АЛГОРИТМОВ ПОИСКА
- •КЛАССИФИКАЦИЯ АЛГОРИТМОВ ПОИСКА
- •Алгоритм последовательного поиска
- •Алгоритм последовательного поиска (псевдокод)
- •Алгоритм последовательного поиска (худший случай)
- •Алгоритм последовательного поиска (худший случай) (2)
- •Алгоритм последовательного поиска (средний случай)
- •Анализ среднего случая (вариант 2.1)
- •Анализ среднего случая (вариант 2.2)
- •Анализ среднего случая (вариант 2.2)
- •Анализ среднего случая (сопоставление вариантов 2.1 и 2.2)
- •Анализ среднего случая
- •Алгоритм поиска с барьером
- •Алгоритм поиска с барьером (худший случай)
- •Алгоритм поиска с барьером (худший случай) (2)
- •Задача поиска в упорядоченной последовательности
- •Поиск c барьером
- •Алгоритм поиска с барьером в упорядоченной последовательности (худший случай)
- •Алгоритм поиска с барьером в упорядоченной последовательности (средний случай)
- •Алгоритм поиска с барьером в упорядоченной последовательности (средний случай) (2)
- •Алгоритм поиска с барьером в упорядоченной последовательности (средний случай) (3)
- •Алгоритм поиска с барьером в упорядоченной последовательности (средний случай) (3)
- •Алгоритм поиска с барьером в упорядоченной последовательности (средний случай) (3)
- •Сравнение алгоритмов поиска
- •Бинарный поиск
- •Бинарного поиск (2)
- •Бинарного поиск (3)
- •Алгоритм бинарного поиска
- •Дерево сравнений бинарного алгоритма
- •Количество шагов бинарного алгоритма
- •Бинарные деревья
- •Полное бинарное дерево
- •Свойства полных бинарных деревьев
- •Особенности деревьев поиска
- •Анализ алгоритма бинарного поиска (худший случай)
- •Анализ алгоритма бинарного поиска (средний случай)
- •Анализ алгоритма бинарного поиска (средний случай, вариант 1)
- •Анализ алгоритма бинарного поиска (средний случай, вариант 1) (2)
- •Анализ алгоритма бинарного поиска (средний случай, вариант 2)
- •Анализ алгоритма бинарного поиска (средний случай, вариант 2) (2)
- •Сравнение алгоритмов:
- •ФИБОНАЧЧИЕВ ПОИСК
- •МЕТОД ХЭШИРОВАНИЕМ
- •Устранение коллизий методом цепочек
- •Пример 1.
- •Пример
- •Интерполяционный поиск
ОЗВУЧЕННАЯ ПРЕЗЕНТАЦИЯСтруктуры и
ДЛЯ ВОСПРОИЗВЕДЕНИЯ ЗВУКА НАЖМИТЕалгоритмы
ЗНАЧОК обработки данных
Грушицын Александр Степанович
Старший преподаватель МИРЭА
nicifor@bk.ru
Алгоритмы поискаТЕМА 6 в массивах
ЗАДАЧА ПОИСКА. КЛАССИФИКАЦИЯ АЛГОРИТМОВ ПОИСКА (АЛГОРИТМЫ, ИСПОЛЬЗУЮЩИЕ КЛЮЧИ И АЛГОРИТМЫ, ОСНОВАННЫЕ НА ЦИФРОВЫХ СВОЙСТВАХ КЛЮЧЕЙ).
ПОСЛЕДОВАТЕЛЬНЫЙ ПОИСК. БИНАРНЫЙ ПОИСК. ФИБОНАЧЧИЕВ ПОИСК. ИНТЕРПОЛЯЦИОННЫЙ ПОИСК. ИСПОЛЬЗОВАНИЕ БИНАРНОГО ДЕРЕВА ПОИСКА. ВЫЧИСЛИТЕЛЬНАЯ СЛОЖНОСТЬ АЛГОРИТМОВ ПОИСКА.
Задача поиска в структурах данных
Поиск необходимой информации в списке – одна из задач теоретического программирования.
Дано: фиксированная последовательность a = a1, a2, a3, …, an и "ключ" x искомого элемента.
Необходимо: определить, входит ли элемент с ключем x в последовательность a и, если входит, индекс элемента key(ai) = x.
Пример:
Входные данные: a = 5, 3, 8, 9, 4 , x = 9. Выходные данные: элемент x найден, индекс i = 4.
3
КЛАССИФИКАЦИЯ АЛГОРИТМОВ ПОИСКА
Все методы делятся на статические и динамические.
При статическом поиске массив значений не меняется во время работы алгоритма. Если Вы ищете слово в словаре, то алгоритм будет статическим, так как сам словарь ( массив слов ) не будет изменяться во время поиска.
Во время динамического поиска массив может перестраиваться или изменять размерность. Примером динамического поиска может служить попытка найти определенную карту в колоде. Откладывая в сторону ненужные карты, Вы облегчаете себе задачу поиска, уменьшая количества оставшихся карт в колоде, которые еще нужно перебрать, тем самым перестраивая массив значений во время поиска!
|
КЛАССИФИКАЦИЯ АЛГОРИТМОВ ПОИСКА |
|
||
• Методы |
поиска |
можно |
разделить |
на |
использующие истинные ключи и на работающие
по преобразованным ключам.
• «Ключем» называют значение, которое нужно
найти.
•Поиск в колоде карт - поиск по истинным ключам,
то есть имеете дело с тем, что есть. Поиск в
словаре - поиск по преобразованным ключам, так как все слова отсортированы в алфавитном порядке, то есть массив значений изменен перед началом поиска.
КЛАССИФИКАЦИЯ АЛГОРИТМОВ ПОИСКА
В методе хэширования надо найти определенную карту в колоде. Для этого придумали функцию,
которая вычисляет номер нужной карты в колоде.
Например f ("крестовая дама") = 5 , а f("туз
пик")=12. То есть, подставив в функцию искомое
значение, мы получаем местоположение этого
значения в нашем массиве. Функция f(К) должна определять ОДНОЗНАЧНОЕ соответствие для каждого
значения в массиве, а находить подобные функции
довольно сложно.
Алгоритм последовательного поиска
x = 11
i = 1
i = 2
i = 3
i = 4
i = 5
i = 6
16 |
7 |
10 |
1 |
5 |
11 |
3 |
8 |
14 |
4 |
2 |
12 |
6 |
13 |
9 |
15 |
16 |
7 |
10 |
1 |
5 |
11 |
3 |
8 |
14 |
4 |
2 |
12 |
6 |
13 |
9 |
15 |
x |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
7 |
10 |
1 |
5 |
11 |
3 |
|
14 |
4 |
2 |
12 |
6 |
13 |
9 |
15 |
xx
16 |
7 |
10 |
1 |
5 |
11 |
3 |
8 |
14 |
4 |
2 |
12 |
6 |
13 |
9 |
15 |
x |
x |
x |
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
7 |
10 |
1 |
5 |
11 |
3 |
8 |
14 |
4 |
2 |
12 |
6 |
13 |
9 |
15 |
x |
x |
x |
x |
|
|
|
|
|
|
|
|
|
|
|
|
16 |
7 |
10 |
1 |
5 |
11 |
3 |
8 |
14 |
4 |
2 |
12 |
6 |
13 |
9 |
15 |
x |
x |
x |
x |
x |
|
|
|
|
|
|
|
|
|
|
|
7
Алгоритм последовательного поиска (псевдокод)
x = 11
LINEAR_SEARCH(a, x) 1 i ← 1
2 while i ≤ n и ai x do
3i ← i + 1
4 if i > n then i ← 0
5 return i
Алгоритм не предъявляет никаких требований к последовательности, в которой производится поиск.
i = 1 |
16 |
7 |
10 |
1 |
5 |
11 |
3 |
8 |
14 |
4 |
2 |
i = 2 |
16 |
7 |
10 |
1 |
5 |
11 |
3 |
8 |
14 |
4 |
2 |
|
x |
|
|
|
|
|
|
|
|
|
|
i = |
|
7 |
10 |
1 |
5 |
11 |
3 |
8 |
14 |
4 |
2 |
|
|
x |
|
|
|
|
|
|
|
|
|
i = 4 |
16 |
7 |
10 |
1 |
5 |
11 |
3 |
8 |
14 |
4 |
2 |
|
x |
x |
x |
|
|
|
|
|
|
|
|
i = 5 |
16 |
7 |
10 |
1 |
5 |
11 |
3 |
8 |
14 |
4 |
2 |
|
x |
x |
x |
x |
|
|
|
|
|
|
|
i = 6 |
16 |
7 |
10 |
1 |
5 |
11 |
3 |
8 |
14 |
4 |
2 |
|
x |
x |
x |
x |
x |
|
|
|
|
|
|
8
Алгоритм последовательного поиска (худший случай)
|
Поиск последнего элемента |
|
|
Поиск несуществующего |
|
||||||||||||||||
|
|
|
|
|
|
элемента |
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
16 |
7 |
10 |
1 |
5 |
11 |
3 |
8 |
14 |
4 |
2 |
16 |
7 |
10 |
1 |
5 |
11 |
3 |
8 |
14 |
4 |
2 |
x x |
x x |
x |
x x |
x |
x x |
|
x x |
x x |
x |
x x |
x x x x |
Для того, чтобы гарантировать нахождение значения в последовательности необходимо просмотреть все ее элементы, не пропуская ни одного.
Это значит, что в худшем случае потребуется выполнить n сравнений, где n – количество элементов в последовательности.
Таким образом вычислительная сложность алгоритма последовательного поиска в наихудшем случае – O(n).
9
Алгоритм последовательного поиска (худший случай) (2)
LINEAR_SEARCH(a, x) |
Время |
Кол-во |
|
1 |
i ← 1 |
c1 |
1 |
2 |
while i ≤ n и |
c2 |
n + 1 |
3 |
ai x do |
c3 |
n |
4 |
i ← i + 1 |
c4 |
n |
5 |
if i > n then i ← 0 |
c5 |
1 |
6 |
return i |
c6 |
1 |
Tп(худш)(n) = c1 + c2∙(n + 1) + c3∙n + c4∙n + c5 + c6 = O(n)
10