Программа экзамена
"Практикум на ЭВМ" (алгоритмы и структуры данных)
В. В. Борисенко
2011-12 учебный год
-
Основные понятия объектно-ориентированного программирования:
класс, описание класса и объекты. Члены и методы класса.
Виды памяти в C++ (статическая, стековая, динамическая),
способы создания и удаление объектов в памяти. Особенности
языка С++ как промежуточного между традиционными и
объектно-ориентированными в узком смысле языками
(Java, C#, Visual Basic), отличия в организации
памяти, создании и удалении объектов (контролируемая
динамическая память и процесс сборки мусора
в объектно-ориентированных языках).
Достоинства и недостатки объектно-ориентированных
языков.
-
Язык C++.
Типы, операции. Классы, члены классов, методы.
Конструктор по умолчанию и copy-конструктор. Переопределение
операторов для классов на примере классов "вектор на плоскости",
"точка", "прямоугольник". Правильное
использование модификатора const и задание типов возвращаемых
значений для разных типов операторов и методов.
-
Механизм исключений (Exceptions) языка C++ и его использование
для обработки ошибочных ситуаций.
Стек, реализация стека на базе массива на C++.
Обратная польская запись формул и примеры ее использования.
-
Статические члены и методы классов.
Наследование классов, виртуальные методы.
Программирование в оконных средах:
общие принципы. Преимущества объектно-ориентированного
подхода в случае программирования в оконной среде.
-
Абстрактные типы данных и контейнеры как обобщение
структур данных. Описание абстрактного типа данных
и его реализация. Основные виды контейнеров, используемые
в программировании:
последовательного доступа — стек, очередь,
дек, двусвязный и односвязный списки; прямого доступа — массив,
динамический массив (вектор), матрица, множество, нагруженное
множество (отображение, словарь), дерево, граф.
-
Реализация дека и очереди на базе массива или динамического массива.
-
Способы реализация циклов "для каждого элемента" контейнера.
Итераторы, их использование и реализация.
-
Схема построения цикла с помощью инварианта.
Применения этой схемы: алгоритм Евклида,
алгоритм быстрого возведения в степень,
расширенный алгоритм Евклида,
вычисление логарифма без разложения в ряд.
-
Непрерывные реализации множества и нагруженного множества (отображения):
битовая реализация ограниченного множества,
наивная реализация, реализация с помощью бинарного поиска.
Применение сxемы построения цикла с помощью инварианта
в алгоритме бинарного поиска.
-
Задача сортировки массива.
Оценка минимального числа сравнений в произвольном
алгоритме сортировки.
-
Пирамидальная сортировка (сортировка кучей, Heap Sort):
идея, применение схемы построения цикла с помощью
инварианта для написания программы и доказательства
ее правильности.
-
Сортировка слиянием, идея, рекурсивная и итеративная
реализации, оценка времени работы.
-
Алгоритм быстрой сортировки (Quick Sort).
Применение схемы построения
цикла с помощью инварианта для написания функции "partition",
разделяющей массив на три отрезка: элементы меньше медианы,
медиана, элементы больше медианы. Рекурсивная реализация алгоритма
быстрой сортировки с применением рекурсии к обеим половинам
массива и итеративная с применением рекурсии
только к меньшей половине.
-
Непрерывные и ссылочные реализации контейнеров.
Идея ссылочной реализации, достоинства и недостатки
непрерывных и ссылочных реализаций.
Реализация Л2-списка на С++: классы L2ListHeader и
L2List. Особенность реализации с использованием
динамической памяти: наследование и виртуальные
деструкторы.
-
Бинарные деревья и деревья поиска.
Идея реализации множества и нагруженного множества (отображения)
с помощью бинарного дерева поиска.
Особенности реализации на языке C++ (классы TreeNode и Tree).
Алгоритмы поиска и добавления элемента для
деревьев поиска.
Алгоритм нахождение следующей вершины дерева и
обхода вершин дерева в порядке их возрастания.
-
Полностью сбалансированные и почти сбалансированные деревья.
Логарифмическая оценка высоты почти сбалансированного дерева
с баланс-фактором C в зависимости от числа его вершин.
Классы почти сбалансированных деревьев с баланс-фактором C:
AVL-деревья, красно-черные деревья (определения).
-
Красно-черные деревья: определение и свойства.
Логарифмическая оценка высоты красно-черного дерева
в зависимости от числа его вершин.
-
Восстановление структуры красно-черного дерева при
добавлении элемента (процедура ребалансировки):
операции вращения вершины дерева поиска вправо и влево,
рассмотрение различных случаев при добавлении элемента с
нарушением свойств красно-черного дерева.