данных, которая позволяет получить доступ ко всем переменным одного и того же типа данных через использование одного идентификатора. • Элемент массива — каждая из переменных в массиве. • Длина (размер) массива — количество выделяемых элементов. • Индекс элемента массива — параметр, указывающий на конкретный элемент массива (нумерация с 0!!!). Тип массива Размер массива Идентификатор (имя) массива Объявление массива:
неупорядоченном множестве данных Алфавит – конечное множество символов (∑). Строка (слово) – это последовательность символов из некоторого алфавита (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, то есть слово не найдено.
префикс функция Сложность: 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). Пример реализации на псевдокоде
O(M+N) Алгоритм 1. Сравниваем W и T. 2. Если W(k) != T(i), то k = p[k-1], в противном случае переход к пункту 1. 3. Двигаемся пока не дойдем до конца или не будет найдено слово W в T.
поиск Сложность: O(log(N)) Алгоритм 1. Определяем firstIndex и lastIndex. 2. Делим входную коллекцию на равные половины. 3. Сравниваем целевой элемент (х) с элементом в середине (midIndex). 4. Останавливаемся, в противном случае переходим к пункту 1. Условия останова: • нахождении элемента; • firstIndex достигает lastIndex.
элементов, с уникальными значениями в диапазоне [1, 100]. Необходимо найти пропущенное значение из диапазона, в случае: 1) отсортированного массива; 2) не отсортированного массива.
"жизнь". Случайным образом генерируется поле – двумерный массив N*N (N – константа), где "." означает мертвую клетку, а "0" живую (можно использовать свои обозначения). Необходимо реализовать k итераций игры. Обновление поля происходит по следующим правилам: • Правило 1. Поле, двумерный массив, представляет собой бесконечную плоскость. При выходе за границы происходит перевод на противоположную сторону столбца/строки соответсвенно. • Правило 2. Каждая клетка может находиться в двух состояниях: быть живой или быть мёртвой. • Правило 3. У каждой клетки 8 соседей. • Правило 4. Если клетка жива и у нее 2−3 живых соседа, то она остается живой, иначе умирает. • Правило 5. Если клетка мертва и у нее 3 живых соседа, то она становится живой, иначе остается мертвой. • Правило 6. Игра прекращается, если на поле не останется ни одной живой клетки. • Правило 7. Игра прекращается, если при очередном шаге ни одна из клеток не меняет своего состояния. • Правило 8. Обновление поля не происходит до момента окончания итерации.
число N. После чего генерируется упорядоченный двумерный массив N*N с элементами от 1 до N2. Но, этот массив не простой, а волшебный. У него есть 2 свойства и они выполняются в зависимости от того, что вы ему скажете, пока не устанете (вводится, например "0" для первого, "1" – для второго и "-1" для выхода): Свойство 1: "поворот" – массив превращается в набор окружностей разного диаметра. Все элементы каждого четного слоя смещаются по часовой стрелке, а все элементы нечетного на один элемент против часовой. Свойство 2: "порядок" – весть массив сортируется (любым способом, но реализовать придется самостоятельно) вдоль одной из диагонали в зависимости от числа поворотов. При четном числе поворотов каждая диагональ сонаправленная главной диагонали упорядочивается по возрастанию; при нечетном – вдоль побочной диагонали и по убыванию.
из алгоритмов поиска подстроки (например, поиск по алгоритму Боуера–Мура). В качестве источника подстроки предлагается самостоятельно задать набор ключевых слов и хранить в виде строкового массива (библиотека <string>, минимум 5 слов в наборе, каждое слово должно содержать более 3 символов). Сравнить скорость (время – библиотека <time.h>, и оценить алгоритмическую сложность) выполнения реализованного Вами алгоритма поиска с библиотечным решением поиска подстроки. На вход: подается строка. На выход: список ключевых слов с количеством упоминаний в строке и время выполнения.