- •IV Алгоритмы, структуры данных и программирование
- •1. Понятие информационной системы. Основные задачи курса, простейшая задача поиска. Эффективность решения задач поиска для простейшего случая.
- •2. Двоичный поиск, оценка эффективности и её обоснование. Программа bin_search и её особенности.
- •3.Бинарное дерево поиска, особенности его построения. Примеры.
- •4. Структура данных дерево(не обязательно бинарное). Кодировка в виде списковой структуры. Бинарное дерево поиска, длина ветви, баланс вершины.
- •5. Операции над бинарными деревьями поиска: вставка, удаление вершины и др. Операции.
- •7. Быстрая сортировка и её особенности. Эффективность.
- •8. Операции над бинарными деревьями поиска. Симметричный, прямойи обратный
- •9. Хеширование. Эффективность хеширования.Схема закрытого хеширования.
- •Закрытое хэширование или Метод открытой адресации – это технология разрешения коллизий, которая предполагает хранение записей в самой хэш-таблице.
- •11. Графы. Реализация представления структуры графа. Списочное и матричное представление графов. (http://school29.Smoladmin.Ru/arbuzov/vvedenie.Html)
- •12. Динамические структуры данных. Связные списки. Односвязные списки. Кольцевой односвязный список
- •13. Деревья. Представление деревьев. Бинарные деревья. Сведение m-арного дерева к бинарному. (http://pro-prof.Com/archives/682)
- •Зачем нужны деревья?
- •Заключение:
- •15. Алгоритм создания дерева бинарного поиска. Прохождение бинарных деревьев.
- •Infix_traverse ( f ) — обойти всё дерево, следуя порядку (левое поддерево, вершина, правое поддерево). Элементы по возрастанию
- •16. Алгоритм Дейкстры.
- •17. Динамические структуры данных. Стек. Процедуры создания, удаления.
- •18. Динамические структуры данных. Очередь. Процедуры создания, удаления.
- •Применение очередей
- •Формирование очереди
- •Алгоритм удаления первого элемента из очереди
- •19. Динамические структуры данных. Дек. Процедуры создания, удаления.
- •Типовые операции
- •20. Дважды связные списки (понятия, операции, использование).
- •21. Алгоритмы обхода бинарных деревьев
- •22. Основное дерево минимальной стоимости. Алгоритм Прима, Крускала. Поиск в ширину, в глубину.
- •Вход: Связный неориентированный граф g(V,e) Выход: Множество t рёбер минимального остовного дерева
- •23. Трудоемкость алгоритмов: наилучший случай, наихудший случай, трудоемкость в
- •24. Принцип «Разделяй и властвуй». Примеры решения задач с использованием данных методов и их трудоемкость.
- •25. Основные структуры данных. Множества. Массивы. Записи.
- •26. Алгоритмы поиска. Линейный поиск.
- •27. Поиск делением пополам (двоичный поиск).
- •28. Прямой поиск строки.
- •Алгоритм прямого поиска
- •29. Алгоритм Кнута, Мориса и Пратта.
- •Постановка задачи
- •Префикс-функция. Определение
- •30. Алгоритм Боуера и Мура
- •10.1. Основные понятия сортировки
- •10.2. Оценка алгоритмов сортировки
- •10.3. Классификация алгоритмов сортировок
- •32. Внутренняя сортировка и ее виды.
- •Алгоритм и особенности этой сортировки таковы:
- •36. Сортировка вставками
- •Псевдокод
- •Псевдокод
- •Пример[править | править исходный текст]
- •38. Динамические структуры данных. Указатели. Динамическое выделение памяти.
- •Типы указателей, описание указателей
- •Пример использования типизированного указателя.
- •39. Понятие рекурсии. Рекурсивные
- •40. Динамический тип данных – список. Определение. Основные понятия.
- •Однонаправленные (односвязные) списки
- •41. Основные операторы для работы со списками. Способы реализации списков.
- •42. Методы ускорения доступа к данным. Хеширование и его варианты.
23. Трудоемкость алгоритмов: наилучший случай, наихудший случай, трудоемкость в
среднем, усредненная оценка трудоемкости группы операций.
Для получения функции трудоемкости алгоритма, представленного в формальной системе введенной абстрактной машины необходимо уточнить понятия «элементарных» операций, соотнесенных с языком высокого уровня.
В качестве таких «элементарных» операций предлагается использовать следующие:
1) Простое присваивание: а b;
2) Одномерная индексация a[i] : (адрес (a)+i*длинна элемента);
3) Арифметические операции: (*, /, -, +);
4) Операции сравнения: a < b;
5) Логические операции (l1) {or, and, not} (l2);
Опираясь на идеи структурного программирования, исключим команду перехода по адресу, считая ее связанной с операцией сравнения в конструкции ветвления. После введения элементарных операций анализ трудоемкости основных алгоритмических конструкций в общем виде сводится к следующим положениям:
А) Конструкция «Следование»
Трудоемкость конструкции есть сумма трудоемкостей блоков, следующих друг за другом.
F «следование» = f1 + … + fk,
где k - количество блоков.
B) Конструкция «Ветвление»
if ( l ) then
fthen с вероятностью p
else
felse с вероятностью (1-p)
Общая трудоемкость конструкции «Ветвление» требует анализа вероятности выполнения переходов на блоки «Then» и «Else», определяется:
F «ветвление» = fthen * p + felse * (1-p).
C) Конструкция «Цикл»
После сведения конструкции к элементарным операциям ее трудоемкость определяется как:
F «цикл» = 1+3*N+N*f«тела цикла»
А) Худший случай. Максимальное количество переприсваиваний максимума (на каждом проходе цикла) будет в том случае, если элементы массива отсортированы по возрастанию.
Б) Лучший случай. Минимальное количество переприсваивания максимума (ни одного на каждом проходе цикла) будет в том случае, если максимальный элемент расположен на первом месте в массиве.
В) Средний случай. Алгоритм поиска максимума последовательно перебирает элементы массива, сравнивая текущий элемент массива с текущим значением максимума. На очередном шаге, когда просматривается к-ый элемент массива, переприсваивание максимума произойдет, если в подмассиве из первых к элементов максимальным элементом является последний. Очевидно, что в случае равномерного распределения исходных данных, вероятность того, что максимальный из к элементов расположен в определенной (последней) позиции равна 1/к. Тогда в массиве из n элементов общее количество операций переприсваивания максимума определяется как:
Величина Hn называется n-ым гармоническим числом. Таким образом, точное значение (математическое ожидание) среднего количества операций присваивания в алгоритме поиска максимума в массиве из n элементов определяется величиной Hn (на бесконечности количества испытаний).
24. Принцип «Разделяй и властвуй». Примеры решения задач с использованием данных методов и их трудоемкость.
Разделяй и властвуй в информатике — важная парадигма разработки алгоритмов, заключающаяся в рекурсивном разбиении решаемой задачи на две или более подзадачи того же типа, но меньшего размера, и комбинировании их решений для получения ответа к исходной задаче. Разбиения выполняются до тех пор, пока все подзадачи не окажутся элементарными.
Корректность работы алгоритма, следующего парадигме "разделяй и властвуй" чаще всего доказывается с помощью метода математической индукции. А время работы можно определить решив соответствующее реккурентное уравнение.
Типичный пример
— алгоритм сортировки
слиянием.
Чтобы отсортировать массив чисел по
возрастанию, он разбивается на две
равные части, каждая сортируется, затем
отсортированные части сливаются в одну.
Эта процедура применяется к каждой из
частей до тех пор, пока сортируемая
часть массива содержит хотя бы два
элемента (чтобы можно было её разбить
на две части). Время
работы
этого алгоритма составляет
операций, тогда как более простые
алгоритмы требуют
времени, где
— размер исходного массива.
Другие примеры важных алгоритмов, в которых применяется парадигма «разделяй и властвуй»:
двоичный поиск;
метод бисекции;
быстрая сортировка;
быстрое преобразование Фурье;
алгоритм Карацубы и другие эффективные алгоритмы для умножения больших чисел.
