
- •Алгоритмическая сложность. Понятие алгоритма. Формы записи. Асимптотический анализ.
- •Линейные структуры данных. Списки. Динамический массив.
- •Линейные структуры данных. Списки. Связный и двусвязный списки.
- •Линейные структуры данных. Очереди. Кольцевые очереди. Стеки. Деки. Алгоритм сортировочной станции.
- •Алгоритм[править | править код]
- •Деревья. Дерево поиска и бинарное дерево поиска. Основные понятия.
- •Сбалансированные деревья. Авл-деревья. Алгоритм добавления нового узла.
- •Сбалансированные деревья. Авл-деревья. Алгоритм удаления существующего узла.
- •21. Сортировка вставками (insertion)
- •25. Сортировка с использованием деревьев. Пирамидальная сортировка (heap-sort).
- •26. Поразрядные, блочные сортировки и сортировка подсчётом.
- •29. Графы. Построение минимального остовного дерева. Алгоритм Прима.
- •28. Графы. Построение минимального остовного дерева. Алгоритм Краскала.
Алгоритм[править | править код]
Пока не все токены обработаны:
Прочитать токен.
Если токен — число, то добавить его в очередь вывода.
Если токен — функция, то поместить его в стек.
Если токен — разделитель аргументов функции (например, запятая):
Пока токен на вершине стека не открывающая скобка:
Переложить оператор из стека в выходную очередь.
Если стек закончился до того, как был встречен токен открывающая скобка, то в выражении пропущен разделитель аргументов функции (запятая), либо пропущена открывающая скобка.
Если токен — оператор op1, то:
Пока присутствует на вершине стека токен оператор op2, чей приоритет выше или равен приоритету op1, и при равенстве приоритетов op1 является левоассоциативным:
Переложить op2 из стека в выходную очередь;
Положить op1 в стек.
Если токен — открывающая скобка, то положить его в стек.
Если токен — закрывающая скобка:
Пока токен на вершине стека не открывающая скобка
Переложить оператор из стека в выходную очередь.
Если стек закончился до того, как был встречен токен открывающая скобка, то в выражении пропущена скобка.
Выкинуть открывающую скобку из стека, но не добавлять в очередь вывода.
Если токен на вершине стека — функция, переложить её в выходную очередь.
Если больше не осталось токенов на входе:
Пока есть токены операторы в стеке:
Если токен оператор на вершине стека — открывающая скобка, то в выражении пропущена скобка.
Переложить оператор из стека в выходную очередь.
Конец.
Ассоциативный массив – абстрактный тип данных, который нужен для хранения пар ключ – значение.
хранить пары (ключ, значение) и выполнять три операции: операцию добавления новой пары, операцию поиска и операцию удаления пары по ключу.
Ассоциативный массив — абстрактный тип данных (интерфейс к хранилищу данных), позволяющий хранить пары вида «(ключ, значение)» и поддерживающий операции добавления пары, а также поиска и удаления пары по ключу:
INSERT(ключ, значение)
FIND(ключ)
REMOVE(ключ)
Предполагается, что ассоциативный массив не может хранить две пары с одинаковыми ключами.
В паре (�,�)k,v значение �v называется значением, ассоциированным с ключом �k. Где �k — это key, a �v — value. Семантика и названия вышеупомянутых операций в разных реализациях ассоциативного массива могут отличаться.
Операция FIND(ключ) возвращает значение, ассоциированное с заданным ключом, или некоторый специальный объект UNDEF, означающий, что значения, ассоциированного с заданным ключом, нет. Две другие операции ничего не возвращают (за исключением, возможно, информации о том, успешно ли была выполнена данная операция).
Ассоциативный массив с точки зрения интерфейса удобно рассматривать как обычный массив, в котором в качестве индексов можно использовать не только целые числа, но и значения других типов — например, строки.
Самая простая реализация может быть основана на обычном массиве, элементами которого являются пары (ключ, значение). Для ускорения операции поиска можно упорядочить элементы этого массива по ключу и осуществлять нахождение методом бинарного поиска.
Хеш-табли́ца — это структура данных, реализующая интерфейс ассоциативного массива, а именно, она позволяет хранить пары (ключ, значение) и выполнять три операции: операцию добавления новой пары, операцию удаления и операцию поиска пары по ключу.
Выполнение операции в хеш-таблице начинается с вычисления хеш-функции от ключа. Получающееся хеш-значение играет роль индекса в массиве
Затем выполняемая операция (добавление, удаление или поиск) перенаправляется объекту, который хранится в соответствующей ячейке массива
Ситуация, когда для различных ключей получается одно и то же хеш-значение, называется коллизией
Существует несколько способов разрешения коллизий.
Метод списков
Каждая ячейка массива H является указателем на связный список пар ключ-значение, соответствующих одному и тому же хеш-значению ключа. Коллизии просто приводят к тому, что появляются списки длиной более одного элемента.
Операции поиска или удаления элемента требуют просмотра всех элементов соответствующего ему списка, чтобы найти в нём элемент с заданным ключом. Для добавления элемента нужно добавить элемент в конец или начало соответствующего списка
Метод двойного хеширования
Метод открытой адресации