Slide 1

Slide 1 text

8 октября 2021 [email protected] Федор Витальевич Бушмелев Массивы. Алгоритмы поиска.

Slide 2

Slide 2 text

2/24 2/24 Массивы: введение • Массив — совокупность (совокупный тип) данных, которая позволяет получить доступ ко всем переменным одного и того же типа данных через использование одного идентификатора. • Элемент массива — каждая из переменных в массиве. • Длина (размер) массива — количество выделяемых элементов. • Индекс элемента массива — параметр, указывающий на конкретный элемент массива (нумерация с 0!!!). Тип массива Размер массива Идентификатор (имя) массива Объявление массива:

Slide 3

Slide 3 text

3/24 3/24 Объявление и наполнение 1/2

Slide 4

Slide 4 text

4/24 4/24 Объявление и наполнение 2/2

Slide 5

Slide 5 text

5/24 5/24 Инициализация и использование 1/2 Инициализация массивов: тип_элемента имя_массива[число_элементов] = { элементы_через_запятую };

Slide 6

Slide 6 text

6/24 6/24 Инициализация и использование 2/2

Slide 7

Slide 7 text

7/24 7/24 Постановка задачи 1/2

Slide 8

Slide 8 text

8/24 8/24 Постановка задачи 2/2

Slide 9

Slide 9 text

9/24 9/24 Вопрос 1 Какие алгоритмы поиска общего назначения знаете вы?

Slide 10

Slide 10 text

10/24 10/24 Поиск в неупорядоченном множестве данных 1/6 Линейный поиск Сложность: O(N)

Slide 11

Slide 11 text

11/24 11/24 Поиск в неупорядоченном множестве данных 2/6 Поиск в неупорядоченном множестве данных Алфавит – конечное множество символов (∑). Строка (слово) – это последовательность символов из некоторого алфавита (T(i) ∈ ∑, где 0 ≤ i ≤ N). Длина строки – количество символов в строке (N). Подстрока (образец, маска, паттерн) строки T – строка W, что найдутся такие строки A и B, что T = AWB. Префикс строки T – подстрока W строки T, что T = WB. Суффикс строки T – подстрока W строки T, что T = AW. Пример: abhrfhrvsenfbfg.

Slide 12

Slide 12 text

12/24 12/24 Поиск в неупорядоченном множестве данных 3/6 Прямой (последовательный) поиск подстроки Сложность: O(N*M) Алгоритм 1. i = 0. 2. Сравнить i-й символ T с первым символом W. 3. Cовпадение → сравнить итеративно символы. 4. Несовпадение → i = i+1 и переход на пункт 2. Условия останова : • Подряд N сравнений удачны. • i + M > N, то есть слово не найдено.

Slide 13

Slide 13 text

13/24 13/24 Поиск в неупорядоченном множестве данных 4/6 КМП-поиск: подготовка префикс функция Сложность: O(M) Шаг (i) Строка Значение p(M) 0 a 0 1 ab 0 2 abc 0 3 abca 1 4 abcab 2 5 abcabd 0 Искомая подстрока: abcabd. Необходимо составить шаблон p(M). Пример реализации на псевдокоде

Slide 14

Slide 14 text

14/24 14/24 Поиск в неупорядоченном множестве данных 5/6 КМП-поиск Сложность: O(M+N) Алгоритм 1. Сравниваем W и T. 2. Если W(k) != T(i), то k = p[k-1], в противном случае переход к пункту 1. 3. Двигаемся пока не дойдем до конца или не будет найдено слово W в T.

Slide 15

Slide 15 text

15/24 15/24 Поиск в неупорядоченном множестве данных 6/6 Алгоритм Бойера – Мура Сложность: O(N+M) Символ a b c a b d прочие Сдвиг 2 1 3 2 1 6 6 Подготовка Поиск

Slide 16

Slide 16 text

16/24 16/24 Поиск в упорядоченном множестве данных 1/3 Поиск прыжками -543 -1 3 5 100 200 100500 300000 900000

Slide 17

Slide 17 text

17/24 17/24 Поиск в упорядоченном множестве данных 2/3 Интерполяционный поиск

Slide 18

Slide 18 text

18/24 18/24 Поиск в упорядоченном множестве данных 3/3 Двоичный (бинарный) поиск Сложность: O(log(N)) Алгоритм 1. Определяем firstIndex и lastIndex. 2. Делим входную коллекцию на равные половины. 3. Сравниваем целевой элемент (х) с элементом в середине (midIndex). 4. Останавливаемся, в противном случае переходим к пункту 1. Условия останова: • нахождении элемента; • firstIndex достигает lastIndex.

Slide 19

Slide 19 text

19/24 19/24 Вопрос 2 Рефлексия Имеется массив Аrr из 99 элементов, с уникальными значениями в диапазоне [1, 100]. Необходимо найти пропущенное значение из диапазона, в случае: 1) отсортированного массива; 2) не отсортированного массива.

Slide 20

Slide 20 text

20/24 20/24 Практическая работа (до 15.10.2021)

Slide 21

Slide 21 text

21/24 21/24 Домашняя работа 1 (до 21.10.2021) Легко Реализовать игру "жизнь". Случайным образом генерируется поле – двумерный массив N*N (N – константа), где "." означает мертвую клетку, а "0" живую (можно использовать свои обозначения). Необходимо реализовать k итераций игры. Обновление поля происходит по следующим правилам: • Правило 1. Поле, двумерный массив, представляет собой бесконечную плоскость. При выходе за границы происходит перевод на противоположную сторону столбца/строки соответсвенно. • Правило 2. Каждая клетка может находиться в двух состояниях: быть живой или быть мёртвой. • Правило 3. У каждой клетки 8 соседей. • Правило 4. Если клетка жива и у нее 2−3 живых соседа, то она остается живой, иначе умирает. • Правило 5. Если клетка мертва и у нее 3 живых соседа, то она становится живой, иначе остается мертвой. • Правило 6. Игра прекращается, если на поле не останется ни одной живой клетки. • Правило 7. Игра прекращается, если при очередном шаге ни одна из клеток не меняет своего состояния. • Правило 8. Обновление поля не происходит до момента окончания итерации.

Slide 22

Slide 22 text

22/24 22/24 Домашняя работа 2 (до 21.10.2021) Средняя Константой задается число N. После чего генерируется упорядоченный двумерный массив N*N с элементами от 1 до N2. Но, этот массив не простой, а волшебный. У него есть 2 свойства и они выполняются в зависимости от того, что вы ему скажете, пока не устанете (вводится, например "0" для первого, "1" – для второго и "-1" для выхода): Свойство 1: "поворот" – массив превращается в набор окружностей разного диаметра. Все элементы каждого четного слоя смещаются по часовой стрелке, а все элементы нечетного на один элемент против часовой. Свойство 2: "порядок" – весть массив сортируется (любым способом, но реализовать придется самостоятельно) вдоль одной из диагонали в зависимости от числа поворотов. При четном числе поворотов каждая диагональ сонаправленная главной диагонали упорядочивается по возрастанию; при нечетном – вдоль побочной диагонали и по убыванию.

Slide 23

Slide 23 text

23/24 23/24 Домашняя работа 3 (до 21.10.2021) Сложно Реализовать один из алгоритмов поиска подстроки (например, поиск по алгоритму Боуера–Мура). В качестве источника подстроки предлагается самостоятельно задать набор ключевых слов и хранить в виде строкового массива (библиотека , минимум 5 слов в наборе, каждое слово должно содержать более 3 символов). Сравнить скорость (время – библиотека , и оценить алгоритмическую сложность) выполнения реализованного Вами алгоритма поиска с библиотечным решением поиска подстроки. На вход: подается строка. На выход: список ключевых слов с количеством упоминаний в строке и время выполнения.

Slide 24

Slide 24 text

8 октября 2021 [email protected] Федор Витальевич Бушмелев Массивы. Алгоритмы поиска.