Вопросы к экзамену по курсу «методы программирования» (годовой курс)

1 часть: вопросы первого курса

  1. Число и запись числа. Система счисления как система правил записи чисел. Правила записи значений целых и действительных чисел в позиционных системах счисления по основанию b (b-с.с.).
  2. Представление целых и действительных чисел в системах счисления с произвольным основанием.
  3. Функции перевода «число-запись» и «запись-число» и алгоритмы их вычисления для произвольной системы счисления. Вычисления по схеме Горнера с минимальным числом операций.
  4. Алгоритм перевода «запись-запись» для вещественных чисел. Конечность записи вещественного числа.
  5. Кратные системы счисления.
  6. Особенности умножения и деления на основание системы счисления. Особенности двоичной арифметики.
  7. Машинная память как однородный линейно-адресуемый массив ячеек фиксированной разрядности. Понятие разрядности и формата числа. Представление отрицательных целых чисел в ЭВМ. Единообразие правил знаковой и беззнаковой арифметики.
  8. Проблема представления произвольного действительного числа в ЭВМ. Модель действительных чисел конечной точности: интервалы (классы чисел, сравнимых с заданной точностью). Арифметика интервалов. Понятие погрешности (потери точности). Накопление погрешности при вычислениях.
  9. Особенности различных представлений чисел и арифметики в конечной разрядной сетке:
  10. Модель беззнаковых целых чисел конечной разрядности. Модель целых чисел со знаком. Знаковый разряд. Формулы для минимальных и максимальных чисел.
  11. Представление целых чисел без знака в ЭВМ. Арифметика по модулю.
  12. Проблемы выбора представления для отрицательного диапазона. Правила представления чисел и арифметика в дополнительном коде. Единообразие правил знаковой и беззнаковой арифметики.
  13. Выполнение арифметических операций в разрядной сетке. Перенос и переполнение.
  14. Представление вещественных чисел в ЭВМ. Типы погрешностей, связанные с конечным представлением. Правила сравнения вещественных чисел. Минимальное и максимальное числа.
  15. Модель вещественной арифметики с фиксированной точкой (равномерная точность представления). Формулы для максимального числа и точности. Арифметика с фиксированной точкой: сведение к целочисленной арифметике со сдвигом.
  16. Нормализованное («с плавающей точкой») представление вещественного числа. Мантисса и порядок, их вид. Нормализация.
  17. Модели представления чисел в ЭВМ и типы данных в языках программирования. Соотношение между ними.
  18. Перестановки. Инверсии. Инверсионный алгоритм перебора перестановок.
  19. Алгоритм Дейкстры генерации перестановок (по алфавиту).
  20. Рекурсивный алгоритм перебора перестановок.
  21. Прямой и бинарный поиск в массиве. Анализ и сравнение эффективности.
  22. Алгоритмы поиска подстроки: прямой и Бойера-Мура. Сравнительный анализ.
  23. Общая постановка задачи сортировки. Параметры оценки эффективности алгоритмов сортировки. Наилучшие и наихудшие оценки их эффективности.
  24. Методы сортировки вставками: простой, бинарный, метод Шелла. Оценки эффективности.
  25. Методы сортировки обменом. «Шейкер»-сортировка. Быстрая сортировка.
  26. Сортировки выбором: простая и пирамидальная.
  27. Методы сортировки файлов.

2 часть: вопросы второго курса

  1. Статическое и динамическое распределение памяти. Способы доступа к данным (прямой, последовательный, индексный, косвенный). Работа с динамической памятью в Си.
  2. Динамические типы данных в языках программирования: организация, описание, доступ. Указатели.
  3. Разновидности списков: статические, динамические, одно/двусвязные, циклические, упорядоченные, иерархические. Операции над списками.
  4. Алгоритмы поиска и включения для списков, анализ их эффективности.
  5. Классические модели динамических структур данных: «куча», стек, очередь, дек. Основные операции, способы реализации. Примеры применения.
  6. Топологическая сортировка. Реализация с помощью иерархических списков.
  7. Граф как форма представления отношения. Типы графов. Смежность и инцидентность. Пути и маршруты.
  8. Представление графов в ЭВМ. Матрицы смежности, инцидентности. Динамическая структура со списками дуг. Табличное представление. Сравнение различных способов представления.
  9. Поиск пути по графу. Алгоритм транзитивного замыкания, его эффективность.
  10. Топологическая сортировка. Реализация с помощью матрицы смежности.
  11. Алгоритм Дейкстры поиска минимального пути от одного источника.
  12. Поиск всех минимальных путей в графе. Алгоритм Флойда.
  13. Дерево как частный вид ациклического графа. Основные определения.
  14. Классификация обходов деревьев. Инфиксный, префиксный и постфиксный порядки обхода деревьев. Рекурсивная реализация.
  15. Обход дерева в ширину. Реализация с помощью очереди.
  16. Классические задачи на деревьях: обработка арифметических выражений, связь с обходом деревьев.
  17. Левое/правое скобочное представление деревьев.
  18. Деревья двоичного поиска: назначение, представление, алгоритмы вставки и поиска элементов, оценки их эффективности.
  19. Бинарный поиск по массиву и дереву. Условие осуществимости. Сортировка включением в дерево бинарного поиска.
  20. Сбалансированные деревья поиска. Алгоритм включения в сбалансированное дерево двоичного поиска.
  21. Обходы графа. Обход всех вершин графа методом поиска в глубину.
  22. Каркас графа (остовное дерево). Построение каркаса методом поиска в глубину.
  23. Помеченные графы и их каркас. Задача и алгоритмы построения минимального каркаса.
  24. Двусвязность. Алгоритм поиска в графе двусвязных компонент и точек сочленения.
  25. Рекурсия как общий метод сведения задачи к самой себе. Примеры рекурсивных формул, данных, алгоритмов. Правила задания рекурсии: рекурсивный переход, условия выхода. Преобразование хвостовой рекурсии в итерацию (простой цикл). Ветвящаяся рекурсия (на примере алгоритмов, строящих древовидные процессы решений).
  26. Классические переборные задачи. Коммивояжер, рюкзак, устойчивые бракосочетания. Способы их решения (обзорно).
  27. Классические переборные задачи. Задача коммивояжера.
  28. Алгоритмы с возвратом. Обход шахматной доски конем.
  29. Алгоритмы с возвратом. Задача о ферзях.
  30. Нахождение оптимальной выборки. Задача о рюкзаке.
  31. Задача об устойчивых браках.
  32. Задача о раскраске графа (раскраска вершин). Примеры эвристического и переборного алгоритмов решения. Примеры задач, сводимых к раскраске.
  33. Задачи о лабиринтах. Сведение их к модельным задачам на графах.
  34. Эйлеров граф. Способ определения Эйлерова цикла. Задачи, сводимые к Эйлеровым циклам.
  35. Гамильтоновы циклы. Поиск всех гамильтоновых циклов в графе. Задачи, сводимые к Гамильтоновым циклам.
  36. Динамическое программирование. Решение одной из задач методом динамического программирования (о преобразовании строки, о гангстерах, о делимости и т.д.).