Save 37% off PRO during our Black Friday Sale! »

Программирование – 1 курс осень 2021 – 5.2 занятие

F21d69109b1c03921abf7d12f0fb6654?s=47 ТиМПИ
October 08, 2021

Программирование – 1 курс осень 2021 – 5.2 занятие

F21d69109b1c03921abf7d12f0fb6654?s=128

ТиМПИ

October 08, 2021
Tweet

Transcript

  1. 8 октября 2021 fvb@dscs.pro Федор Витальевич Бушмелев Массивы. Алгоритмы поиска.

  2. 2/24 2/24 Массивы: введение • Массив — совокупность (совокупный тип)

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

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

  5. 5/24 5/24 Инициализация и использование 1/2 Инициализация массивов: тип_элемента имя_массива[число_элементов]

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

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

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

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

    вы?
  10. 10/24 10/24 Поиск в неупорядоченном множестве данных 1/6 Линейный поиск

    Сложность: O(N)
  11. 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.
  12. 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, то есть слово не найдено.
  13. 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). Пример реализации на псевдокоде
  14. 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.
  15. 15/24 15/24 Поиск в неупорядоченном множестве данных 6/6 Алгоритм Бойера

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

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

  18. 18/24 18/24 Поиск в упорядоченном множестве данных 3/3 Двоичный (бинарный)

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

    элементов, с уникальными значениями в диапазоне [1, 100]. Необходимо найти пропущенное значение из диапазона, в случае: 1) отсортированного массива; 2) не отсортированного массива.
  20. 20/24 20/24 Практическая работа (до 15.10.2021)

  21. 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. Обновление поля не происходит до момента окончания итерации.
  22. 22/24 22/24 Домашняя работа 2 (до 21.10.2021) Средняя Константой задается

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

    из алгоритмов поиска подстроки (например, поиск по алгоритму Боуера–Мура). В качестве источника подстроки предлагается самостоятельно задать набор ключевых слов и хранить в виде строкового массива (библиотека <string>, минимум 5 слов в наборе, каждое слово должно содержать более 3 символов). Сравнить скорость (время – библиотека <time.h>, и оценить алгоритмическую сложность) выполнения реализованного Вами алгоритма поиска с библиотечным решением поиска подстроки. На вход: подается строка. На выход: список ключевых слов с количеством упоминаний в строке и время выполнения.
  24. 8 октября 2021 fvb@dscs.pro Федор Витальевич Бушмелев Массивы. Алгоритмы поиска.