(в количестве N элементов) в которой необходимо найти заданный элемент (x). Входные данные: x, Arr[N]. Выходные данные: index(x, Arr[N]), P(x, Arr[N]) и др. Постановка задачи
множество символов (∑). Строка (слово) – это последовательность символов из некоторого алфавита (T(i) ∈ ∑, где 0 ≤ i ≤ N). Длина строки – количество символов в строке (N). Подстрока (образец, маска, паттерн) строки T – строка W, что найдутся такие строки A и B, что T = AWB. Префикс строки T – подстрока W строки T, что T = WB. Суффикс строки T – подстрока W строки T, что T = AW. Пример: abhrfhrvsenfbfg. Поиск в неупорядоченном множестве данных
подстроки Сложность: O(N*M) Алгоритм 1. i = 0. 2. Сравнить i-й символ T с первым символом W. 3. Cовпадение → сравнить итеративно символы. 4. Несовпадение → i = i+1 и переход на пункт 2. Условия останова : • Подряд N сравнений удачны. • i + 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.
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.
Сложность: O(log(N)) Алгоритм 1. Определяем firstIndex и lastIndex. 2. Делим входную коллекцию на равные половины. 3. Сравниваем целевой элемент (х) с элементом в середине (midIndex). 4. Останавливаемся, в противном случае переходим к пункту 1. Условия останова: • нахождении элемента; • firstIndex достигает lastIndex.
уникальными значениями в диапазоне [1, 100]. Необходимо найти пропущенное значение из диапазона, в случае: 1) отсортированного массива; 2) не отсортированного массива. Вопрос 2