- •Структуры данных. Классификация
- •Алгоритмы. Определение. Как алгоритмы соотносятся со структурами данных.
- •Оценка сложности алгоритма. Способы. Меры оценки сложности.
- •Оценка сложности алгоритма. Худший, лучший случай и в среднем.
- •Массивы и сортировка массивов. Сортировка Шелла.Алг. Сложность
- •Массивы и сортировка массивов. Быстрая сортировка. Алг. Сложность
- •Списки. Виды списков. Организация списков при помощи массивов.
- •Деревья. Определения. Высота, степень дерева, степень узла. Бинарные деревья.
- •Стек. Организация стека при помощи массива, динамической структуры.
- •Очередь. Организация очереди при помощи массива. Динамической структуры.Двух стеков.
- •Бинарные деревья. Организация бинарных деревьев при помощи массива.
- •Бинарные деревья поиска. Организация деревьев при помощи динамических структур.
- •Бинарные деревья поиска. Операции. Удаление элементов из дерева. Случай 1. Узел — лист (нет потомков)
- •🔹 Случай 2. У узла один потомок (только левое или только правое поддерево)
- •🔹 Случай 3. У узла два потомка
- •Бинарные деревья. Стратегии обхода деревьев. В ширину.
- •Бинарные деревья. Стратегии обхода деревьев. В глубину.
- •Графы. Способы задания графов. Матрица инцидентности. Матрица смежности.
- •🔸 1. Матрица смежности
- •🔸 2. Матрица инцидентности
- •Графы. Обходы графов. Поиск в ширину и глубину.
- •Кратчайшие пути на графах. Алгоритм дейстры
- •Хранение данных в формате json
Массивы и сортировка массивов. Сортировка Шелла.Алг. Сложность
Сортировка Шелла — это улучшенная версия сортировки вставками. Вместо сравнения только соседних элементов, сначала сравниваются и сортируются элементы, находящиеся на определённом расстоянии (шаге) друг от друга. Шаг постепенно уменьшается (обычно вдвое), и последний проход выполняется с шагом 1 — это уже обычная сортировка вставками.
Алгоритмическая сложность:
В лучшем случае: O(n log n)
В среднем случае: O(n³/²) (т.е. примерно O(n√n))
В худшем случае: O(n²)
Массивы и сортировка массивов. Быстрая сортировка. Алг. Сложность
Быстрая сортировка (QuickSort) — это рекурсивный алгоритм «разделяй и властвуй». Как работает:
Выбирается опорный элемент (pivot) — например, первый, последний, случайный или медиана.
Массив разбивается на две части:
элементы меньше опорного, элементы больше или равны опорному.
Рекурсивно сортируются обе части.
Процесс продолжается, пока подмассивы не станут длиной ≤ 1.
Алгоритмическая сложность (по файлу):
В лучшем и среднем случаях: O(n log n) — при удачном выборе опорного элемента.
В худшем случае: O(n²) — например, если массив уже отсортирован и опорным всегда выбирается первый/последний элемент.
Списки. Виды списков. Организация списков при помощи массивов.
1. Что такое список?
Список — это динамическая структура данных, представляющая собой совокупность элементов, число которых может изменяться в процессе выполнения программы.
2. Виды списков
Согласно лекции, выделяют три основных вида списков:
Односвязный (линейный) список каждый узел содержит:
данные (value);
указатель на следующий узел (ptr или next).
Движение по списку возможно только в одном направлении — от начала к концу.
Двусвязный список каждый узел содержит:
данные (val);
указатель на следующий (next);
указатель на предыдущий (prev) узел.
Позволяет обход в обоих направлениях.
Циклический список
Последний узел указывает на первый, образуя кольцо.
Может быть как односвязным, так и двусвязным.
Требуется отдельно хранить указатель на головной (начальный) элемент.
Организация списков при помощи массивов
Список можно реализовать двумя способами через массивы:
Просто линейный массив с ограниченной размерностью.
Будет создан алгоритм с начальным массивом с заданым размером и если в него не помещаются элементы ,то будет создаваться новый массив в который будут копироватся элементы старого и так до бесконечности чтобы список был динамическим.
Реализация через динамические структуры:
Если мы реализуем список через кучу то мы просто создаем узел - первое число в списке ,а от этого узла ко всем остальным узлам добавляем ссылки на них
чтобы вывести нужно будет сделать цикл в котором будет бегунок который пробежится по всем ссылкам и выведет каждый элемент.
так же если мы реализуем список через кучу то у нас данные списка хранятся не в 1 месте а разбросаны по разным участкам оперативной памяти
