Upgrade to Pro — share decks privately, control downloads, hide ads and more …

САКОД – 2 курс весна 2021 – 2.1 занятие

САКОД – 2 курс весна 2021 – 2.1 занятие

ТиМПИ

March 02, 2021
Tweet

More Decks by ТиМПИ

Other Decks in Programming

Transcript

  1. 3/15 3/15 Постановка задачи Имеется фиксированная неупорядоченная группа данных Arr

    (в количестве N элементов) в которой необходимо найти заданный элемент (x). Входные данные: x, Arr[N]. Выходные данные: index(x, Arr[N]), P(x, Arr[N]) и др. Постановка задачи
  2. 6/15 6/15 Поиск в неупорядоченном множестве данных Алфавит – конечное

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

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

    функция Сложность: 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).
  5. 9/15 9/15 Поиск в неупорядоченном множестве данных КМП-поиск Сложность: O(M+N)

    Исходная строка (T): abcabсaabcabd. Искомая подстрока (W): abcabd. Шаблон p(M) = [0, 0, 0, 1, 2, 0]. Алгоритм 1. Сравниваем W и T. 2. Если W(k) != T(i), то k = p[k-1], в противном случае переход к пункту 1. 3. Двигаемся пока не дойдем до конца или не будет найдено слово W в T.
  6. 10/15 10/15 Поиск в неупорядоченном множестве данных Алгоритм Бойера –

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

    O( 𝑁) -543 -1 3 5 100 200 100500 300000 900000 Шаг (прыжок) = 𝑁 Алгоритм 1. Cравнение искомого элемента (х) с Arr[i * 𝑁]. 2. i = i + 1. 3. Если Arr[i * 𝑁] > x, то линейный поиск на интервале (Arr[(i-1) * 𝑁]… Arr[i * 𝑁]).
  8. 12/15 12/15 Поиск в упорядоченном множестве данных Интерполяционный поиск Сложность:

    O(𝑁)) Алгоритм 1. Применение линейной интерполяции к нашему набору данных: 𝑖𝑛𝑑𝑒𝑥 = firstIndex + (lastIndex – firstIndex) (Arr(lastIndex) – Arr(firstIndex)) ∙ 𝑥 − firstIndex ; 2. Если Arr(index) == x, то остановка; 3. Если Arr(index) < x, то firstIndex = index + 1; и переход к пункту 1. 4. В противном случае lastIndex = index – 1; и переход к пункту 1.
  9. 13/15 13/15 Поиск в упорядоченном множестве данных Двоичный (бинарный) поиск

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

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