Содержание
- 2. Содержание Структура данных «Динамический массив» Амортизированное время работы Метод предоплаты Метод потенциалов Однонаправленные, двунаправленные списки Поиск,
- 3. Основные понятия Структура данных (англ. data structure) — программная единица, позволяющая хранить и обрабатывать множество однотипных
- 4. Основные понятия Абстрактный тип данных (АТД) — это множество объектов, определяемое списком операций, применимых к этим
- 5. Основные понятия При этом доступ к отдельным элементам массива осуществляется с помощью индексации, то есть через
- 6. Динамический массив Массив — набор однотипных переменных с доступом по индексу. Динамический массив — массив (буффер),
- 7. Динамический массив 1 3 2 4 1 3 2 5 4 6 7 1 3 2
- 8. Динамический массив — Добавления элемента в конец — Доступ к элементу по индексу — Изменение элемента
- 9. Динамический массив … Пример реализации
- 10. Динамический массив O(1) — в лучшем случае O(n) — в худшем случае А сколько в среднем
- 11. Амортизационный анализ Метод подсчета времени, которое необходимо для последовательности операций над структурой данных. Проводится анализ средней
- 12. Амортизационный анализ Например, чтобы показать, что хотя существуют «дорогие» операции, то после усреднения по всем возможным
- 13. Амортизационный анализ S = ∑ti / n t1, t2, …, tn — время выполнения операций 1,
- 14. Амортизационный анализ Использование X времени равносильно использованию X монет (плата за операцию) У каждой операции своя
- 15. Амортизационный анализ Ф — потенциал текущего состояния структура данных Ф0, Ф1, … Фi i-a операция стоит
- 16. Амортизационный анализ — Метод предоплаты — Метод потенциалов Время работы динамического массива
- 17. Связный список Динамическая структура данных, имеющая помимо своих собственных элементов, ссылки на следующий и/или предыдущий элемент
- 18. Связный список Односвязный список 1 2 3 4
- 19. Связный список Двусвязный список 1 2 3 4
- 20. Связный список — Поиск элемента — Вставка элемента — Удаление элемента — Объединение списков — Получение
- 21. Связный список … Пример реализации
- 22. Связный список — Быстрая вставка элемента в любое место, при наличии указателя — Быстрое удаление элемента,
- 23. Стек Абстрактный тип данных (или структура данных), работающий по принципу LIFO — Last In, First Out
- 24. Стек — Вставка (Push) — Извлечение (Pop) Операции
- 25. Динамический массив 1 3 2 4 1 3 2 5 4 6 Push(5), Push(6) Pop() 1
- 26. Стек На (динамическом) массиве 1 3 2 4 1 3 2 5 4 6 Push(5), Push(6)
- 27. Стек На списке Push(3) Pop() 2 1 3 2 1 2 1
- 28. Стек … Пример реализации
- 29. Стек Push — O(1) Pop O(1) — в лучшем случае O(n) — в худшем случае А
- 30. Очередь Абстрактный тип данных (или структура данных), работающий по принципу FIFO — First In, First Out
- 31. Очередь — Вставка (EnQueue) — Извлечение (DeQueue) Операции
- 32. Очередь Очередь EnQueue(3) DeQueue() 1 2 1 2 3 2 3
- 33. Очередь На (динамическом) массиве 1 3 2 4 1 3 2 5 4 6 3 2
- 34. Дэк Абстрактный тип данных (или структура данных), работающий по принципу FIFO и LIFO Можно добавлять и
- 35. Дэк — Вставка в начало (PushFront) — Вставка в конец (PushBack) — Извлечение из начала (PopFront)
- 36. Дэк Дэк 1 2 3 4 1 2 3
- 37. Дэк … Пример реализации
- 38. Двоичная куча Двоичный подвешенный [связный ациклический граф — дерево], для которого выполнены условия: 1 — Значение
- 39. Двоичная куча Двоичная куча 5 8 6 11 10 9 14 14 13 Глубина O(log(n))
- 40. Двоичная куча Удобно хранить в массиве a[0] — корень а дети a[i] - a[2i + 2]
- 41. Двоичная куча После изменение элемента в куче, она может перестать удовлетворять условиям кучи. Для поддержания свойств,
- 42. Двоичная куча Изменили элемент Если его значение стало больше, то используем siftDown Если элемент меньше детей
- 43. Двоичная куча Изменили элемент Если его значение стало меньше, то используем siftUp Если элемент больше родителя
- 44. Двоичная куча Элемент в корне :) ≻ Получаем значение корня Восстанавливаем кучу Берём последний элемент Ставим
- 45. Двоичная куча Вставляем элемент в конец Восстанавливаем кучу siftUp(elementIndex) Время работы O(log n) Добавление элемента
- 46. Двоичная куча Вход — неупорядоченный массив данных Первый элемент кладём в корень Второй и последующие —
- 47. Двоичная куча Вход — неупорядоченный массив данных Представим что наш массив — это дерево Запустим siftDown
- 48. Двоичная куча Доказательство времени работы … Построение кучи [2]
- 49. Очередь с приоритетом Абстрактный тип данных (или структура данных), с операциями: 1 — Добавить элемент с
- 50. Очередь с приоритетом 1 — Добавить элемент с приоритетом O(log n) 2 — Достать элемент с
- 52. Скачать презентацию