Программа экзамена по программированию для потока фит, осваивающего образовательную программу бакалавра по направлению Информатика и вычислительная техника в сокращенные сроки
Вид материала | Программа |
СодержаниеОценка сложности вычислительных алгоритмов Список литературы Структура экзаменационного билета. Список вопросов |
- Образовательный стандарт по направлению 552800 «Информатика и вычислительная техника», 166.41kb.
- Программа государственного экзамена по направлению 230100 «Информатика и вычислительная, 60.5kb.
- Рабочая учебная программа по дисциплине «Информатика» Направление №230100 «Информатика, 91.73kb.
- Образовательный стандарт по направлению 552800 «Информатика и вычислительная техника», 168.8kb.
- Образовательный стандарт по направлению бакалавриата 552800 (230100) «Информатика, 288.84kb.
- Образовательный стандарт по направлению бакалавриата 552800 (230100) «Информатика, 198.39kb.
- Образовательный стандарт По направлению 552800 «Информатика и вычислительная техника», 114.27kb.
- Образовательный стандарт по направлению 552800 «Информатика и вычислительная техника», 199.12kb.
- Образовательный стандарт по направлению 230100. 62 Информатика и вычислительная техника, 328.94kb.
- Рабочая программа дисциплины «Компьютерная графика» по направлению подготовки дипломированного, 108.6kb.
НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
Программа экзамена по ПРОГРАММИРОВАНИЮ для потока ФИТ, осваивающего образовательную программу бакалавра по направлению Информатика и вычислительная техника в сокращенные сроки
В программе представлены основные темы, содержание тем, список рекомендуемой литературы, структура экзаменационного билета, список вопросов для экзаменационных билетов
Тематический план
РАЗДЕЛ 1. Основы программирования. Базовые алгоритмы и структуры данных.
- Представление информации в ЭВМ
- Элементы комбинаторики
- Задачи поиска и сортировки
- Оценка сложности вычислительных алгоритмов
- Динамические структуры данных
РАЗДЕЛ 2. Практика программирования – методы и инструменты
- Методы решения задач на абстрактных структурах данных
- Язык программирования высокого уровня (Си)
- Динамическое программирование
РАЗДЕЛ 3. Основы технологии разработки программ.
- Организация процесса разработки программ. Базовые элементы технологии программирования.
Содержание разделов и тем
РАЗДЕЛ 1. Основы программирования. Базовые алгоритмы и структуры данных.
- Представление информации в ЭВМ
- Общие методы решения вычислительных задач.
- Общие методы решения вычислительных задач.
- Итерационный метод: множество перебираемых значений с произвольно задаваемым порядком; операция генерации "следующего по порядку"; перебор от "минимального" к "максимальному" по всем.
- Метод "разделяй и властвуй": разбиение задачи на несколько подзадач меньшего размера; для задач тривиального размера строится тривиальное решение.
- Рекурсия как общий метод сведения задачи к самой себе. Примеры рекурсивных формул, данных, алгоритмов. Правила задания рекурсии: рекурсивный переход, условия выхода. Преобразование хвостовой рекурсии в итерацию (простой цикл). Ветвящаяся рекурсия (на примере алгоритмов, строящих древовидные процессы решений).
- Рекурсивное определение чисел Фибоначчи. Факториал. Рекурсивное и итеративное вычисление факториала. Характер роста факториала, как функции n.
- Элементы теории чисел
- Алгоритмы вычисления последовательности простых чисел: прямой перебор с проверкой делимости, решето Эратосфена; приемы их ускорения.
- Принцип однозначности разложения числа на простые множители.
- Системы счисления (с.с.).
- Запись чисел цифрами и числовые значения. С.с. как система правил записи чисел.
- Правила записи значений целых и действительных чисел в позиционных с.с. по основанию b (b-с.с.).
- Функции перевода "число-запись" и "запись-число" и алгоритмы их вычисления для произвольной b-с.с. Вычисления по схеме Горнера с минимальным числом операций.
- Алгоритмы перевода целых чисел из одной b-с.с. в другую:
- из произвольной b-c.с. в 10-с.с.;
- из 10-с.с. в произвольную b-с.с.;
- из произвольной b1-с.с в произвольную b2-с.с.;
- между кратными с.с.
- Модификации этих алгоритмов для перевода действительных чисел.
- Кратные с.с. Приемы использования кратных с.с. для ускорения перевода чисел между произвольными b-с.с.
- Универсальные алгоритмы вычисления арифметических операций для произвольных b-с.с.
- Достаточное условие конечности представления рациональной дроби в произвольной b-с.с.
- Понятие символьных вычислений. Формальное определение вычислений как преобразование цепочек символов по заданным правилам (на примере определения арифметических операций таблицами значений). Базовые операции символьных вычислений (выборка, идентификация, сравнение и подстановка).
- Модели машинной арифметики с конечной разрядностью.
- Модель машинной памяти как однородного линейно-адресуемого массива ячеек фиксированной разрядности. Влияние разрядности шин адреса и данных на размеры машинного слова и адресуемой памяти.
- Понятие разрядной сетки; ее модель (линейно индексируемый массив цифр) и характеризующие параметры (разрядность и формат).
- Особенности представления чисел и арифметики в конечной разрядной сетке:
- ограничения ширины представимого интервала чисел;
- ограничения точности представления (для действительных чисел).
- Модель целых чисел конечной разрядности: вычеты (классы чисел, сравнимых по модулю). Арифметика вычетов. Понятие переполнения.
- Модель действительных чисел конечной точности: интервалы (классы чисел, сравнимых с заданной точностью). Арифметика интервалов. Понятие погрешности (потери точности). Накопление погрешности при вычислениях.
- Модель беззнаковых целых чисел конечной разрядности. Формулы для min и max.
- Модель целых чисел со знаком. Знаковый разряд. Формулы для min и max. Несимметричность представляемого диапазона.
- Проблемы выбора представления для отрицательного диапазона (сужение интервала, два нуля, усложнение операций). Правила представления чисел и арифметика в дополнительном коде.
- Единообразие правил знаковой и беззнаковой арифметики. Примеры, иллюстрирующие зависимость результатов вычислений только от способа интерпретации представлений.
- Модель вещественной арифметики с фиксированной точкой (равномерная точность представления). Формулы для max и точности. Арифметика с фиксированной точкой: сведение к целочисленной арифметике со сдвигом. Округление, как способ повышения точности.
- Модель вещественной арифметики с плавающей точкой (неравномерная точность представления).
- Экспоненциальное (нормализованное, с плавающей точкой) представление вещественного числа. Мантисса и порядок, их вид. Нормализация. Особенности арифметики с плавающей точкой:
- денормализация аргументов при сложении;
- нормализация результата;
- расширение разрядной сетки при денормализации и округлении.
- Представление вещественного числа в нормализованной форме как пары целых. Разрядность мантиссы и порядка. Формулы для max, E1 (минимальное ненулевое число, абсолютная точность), E2 (относительная точность).
- Источники погрешности при арифметике с плавающей точкой:
- бесконечность представления числа в данной с.с.;
- потеря точности при денормализации меньшего аргумента;
- потеря точности при округлении;
- потеря точности при записи результата в память;
- потеря точности при переводе в с.с., используемую для вывода.
- Параметры, характеризующие модели представления чисел в используемых вычислительных средствах. Характеристики числовых типов в Паскале и Си для процессоров Intel (integer, word, real, double и др.)
- Умножение длинных целых чисел по методу "разделяй и властвуй".
- Элементы комбинаторики
- Перестановки набора. Подсчет числа перестановок.
- Наборы, упорядоченные заданной операцией порядкового сравнения. Перестановки. Инверсии. Число инверсий, как мера сложности упорядочения набора.
- Таблицы инверсий. Алгоритм восстановления перестановки по таблице инверсий. Таблица инверсий как число в особой с.с. Итерационный алгоритм генерации всех таблиц инверсий.
- Алгоритмы перебора перестановок:
- рекурсивный,
- итерационный через перебор таблиц инверсий,
- итерационный (Дейкстры) с лексикографическим упорядочением.
- Применение итерационного метода к задаче перебора всех подмножеств из заданного набора.
- Задачи поиска и сортировки
- Постановка задач П/С записей в произвольном наборе данных. Формализация: ключи как абстракции записей; требования к ключам (сравнимость по заданной порядковой функции); внешняя и внутренняя постановка задачи П/С (при не/доступности всего набора). *Простые и мульти-ключи. Сведение лексикографических (словарных) П/С по мультиключу к П/С по простому ключу с помощью функции сравнения.
- Методы простого поиска в массиве:
- Постановка задач П/С записей в произвольном наборе данных. Формализация: ключи как абстракции записей; требования к ключам (сравнимость по заданной порядковой функции); внешняя и внутренняя постановка задачи П/С (при не/доступности всего набора). *Простые и мульти-ключи. Сведение лексикографических (словарных) П/С по мультиключу к П/С по простому ключу с помощью функции сравнения.
- линейный поиск,
- бинарный поиск.
Оценки сложности (min, max, ave).
- Методы поиска подстроки в строке:
- алгоритм прямого перебора,
- алгоритм Бойера-Мура.
Оценки сложности в среднем.
- Метод совместного поиска min и max в массиве по методу "разделяй и властвуй".
- Методы сортировки массива:
- метод простого подсчета для различных чисел;
- метод простых вставок;
- метод бинарных вставок;
- метод двухпутевых вставок;
- метод Шелла;
- метод простого выбора;
- метод "пузырька";
- шейкер-сортировка;
- быстрая сортировка Хоара;
- пирамидальная сортировка;
- сортировка слиянием;
- сортировка распределением.
Оценки сложности (min, max, ave) с примерами входных данных.
Нижняя оценка сложности сортировки с помощью попарных сравнений.
- Сортировка файлов методом двухпутевого слияния
Файлы в Си:
- Классификация, способы представления информации, описание.
- Дисциплина и средства работы, буферизация.
- Файлы прямого и последовательного доступа.
- Сравнительный анализ эффективности алгоритмов сортировки и причин, влияющих на нее. Достоинства организации исходного набора в виде древовидной структуры для совместного решения задач П/С.
- Оценка сложности вычислительных алгоритмов
- Понятие вычислительного процесса, как дискретной последовательности состояний памяти вычислителя. Функции перехода. Представление о программе как о преобразователе, задающем семейство исполнений (процессов преобразования входных данных в выходные), управляемом входными данными.
- Размер задачи как характеристика объема входных данных. Параметры, влияющие на размер задачи.
- Временная и емкостная сложность программы как функции размера задачи. Верхняя, нижняя и средняя оценки. Асимптотическая оценка, как поведение "в общем случае".
- Классы вычислительной сложности алгоритмов: примеры задач, допускающих решение за логарифмическое, линейное, квадратичное, полиномиальное, экспоненциальное время. Нижние и верхние оценки для изученных классов задач (генерация перестановок, поиск, сортировка).
- Практические приемы оценки вычислительной сложности алгоритмов:
- изучение структуры и глубины циклов и рекурсии в программе;
- формальный анализ входных данных и количества операций.
- Динамические структуры данных
- Динамическая память
- Динамическая память
- Способы распределения памяти (не включая динамику): статический, автоматический. Какие виды констант, переменных и параметров в Паскале и СИ распределяются данными способами.
- Статическое и динамическое распределение памяти: отличия по способу описания переменных, времени создания, способу и дисциплине доступа.
- Куча. Реализация кучи в Паскале. Администратор кучи. Основные процедуры и функции.
- Способы доступа к данным: прямой, последовательный, индексная и косвенная разновидности.
- Буферизация как прием совмещения различных способов доступа к данным, примеры ее использования.
- Указатели, как средство организации данных с динамической структурой; средства работы с ними в Си.
- Использование приведений указательных типов для описания неоднородных структур.
- Классические модели динамической памяти
- Список.
- Стек. Преобразование инфиксной формы записи выражения в постфиксную и вычисление значения полученного выражения.
- Очередь. Реализация ширинного обхода дерева.
- Дек.
- Основные операции.
- Способы реализации на различных базовых представлениях.
РАЗДЕЛ 2. Практика программирования – методы и инструменты
- Методы решения задач на абстрактных структурах данных
- Абстрактные структуры данных.
- Абстрактные структуры данных.
- Абстрагирование.
- Абстрагирование как прием построения модели данных задачи.
- Некоторые приемы абстрагирования: разбиение данных на компоненты, анализ свойств однородности, статичности, способов доступа, числовое кодирование.
- Абстрагирование как прием построения модели данных задачи.
- Списки.
- Список, как универсальная модель линейно упорядоченных структур данных последовательного доступа.
- Разновидности списков: статические, динамические, одно/двусвязные, циклические, упорядоченные, иерархические.
- Операции над списками.
- Алгоритмы поиска и включения для списков, анализ их эффективности.
- Способы реализации списков (статика, динамика).
- Реализация алгоритма топологической сортировки на иерархических списках
- Список, как универсальная модель линейно упорядоченных структур данных последовательного доступа.
- Графы.
- Граф как наиболее общая модель данных последовательного доступа.
- Пути и маршруты по графу.
- Определения различных типов графов: (не)ориентированного,
- (а)циклического, много/односязного.
- Представление графа, как отношения на множестве вершин.
- Модели представления в ЭВМ.
- Mатрицы смежности, инцидентности.
- Динамическая структура со списками дуг. Табличное представление.
- Помеченные графы.
- Граф как наиболее общая модель данных последовательного доступа.
- Деревья.
- Дерево, как частный вид графа.
- Эквивалентные определения дерева характеристическими свойствами.
- Терминология для деревьев: отец, сын, корень, лист, глубина и др.
- Классические типы деревьев: корневые, бинарные, упорядоченные, уравновешенные.
- Деревья двоичного поиска. Создания орфографического словаря по заданному набору слов.
- Инфиксное, префиксное и постфиксное кодирование деревьев.
- Левое\правое скобочное представление деревьев.
- Специальные представления однородных деревьев в ЭВМ.
- Пример повышения эффективности поиска и сортировки выбором структуры организации данных:
- Деревья поиска, алгоритмы поиска.
- Алгоритмы включения и удаления.
- Сравнение их эффективности с известными алгоритмами на массивах.
- Дерево, как частный вид графа.
- Алгоритмы перебора на абстрактных динамических структурах.
- Способы перебора. Итерационный, полный, с отсечением. Примеры.
- Классические задачи на графах: транзитивное замыкание, задача коммивояжера (размеченные дуги), раскраска графа (размеченные вершины). Задачи, сводимые к данным алгоритмам.
- Классические задачи с отсечением: задача о рюкзаке, об устойчивых браках.
- Алгоритмы с возвратом — обход шахматной доски конем.
- Классические задачи на деревьях: обработка арифметических выражений, * перебор вариантов в алгоритмах игровых стратегий.
- Методы решения задач на графах и деревьях. Метод разметки. Метод волны. Метод замазывания тупиков в лабиринтах.
- Понятие полного перебора путей, его особенности для деревьев и графов общего вида.
- Обходы деревьев (в ширину, в глубину, в пре/пост/инфиксном порядке, слева направо).
- Обход всех вершин графа — метод поиска в глубину.
- Алгоритмы поиска компонент связности в графе и точек сочленения.
- Эйлеров граф. Способ определения Эйлерова цикла. Задачи, сводимые к Эйлеровым циклам.
- Рекурсивная реализация, связь стратегии обхода со способом организации рекурсии, стековая реализация, нерекурсивная реализация с пометкой пройденных путей.
- Решение классических задач перебора с помощью перебора перестановок вершин в путях.
- Алгоритмы генерации перестановок: рекурсивный, итерационный.
- Анализ эффективности алгоритмов перебора: экспоненциальная оценка временной сложности.
- Язык программирования высокого уровня (Си)
- Препроцессор Си: include, define.
- Основные структуры данных. Основные управляющие конструкции языка.
- Программа как набор функций, функция main(). Основные типы данных, объявление глобальных и локальных переменных. Функции в Си, способы передачи параметров.
- Выражения, оператор присваивания. Включение заголовочных файлов, вывод текста на экран функцией printf(). Основные инструкции: if, for, while, do while. Возврат значения из функции (return).
- Работа с одномерными массивами. Массивы и строки в Си
- Динамическое программирование
- Динамическое программирование как решение задач с помощью табличной техники.
- Задачи об умножении матриц, о преобразовании строки, о расстановке скобок в выражении.
РАЗДЕЛ 3. Основы технологии разработки программ
- Процесс разработки программ. Базовые элементы технологии программирования
- Программа как объект труда. Типизация Фокса. Абстрактный характер. Проблема корректности. Эффект большого масштаба (три признака сложности).
- Признаки сложности создания программных изделий по Кауфману. Технологический разрыв. Семантический разрыв. Незнание реального мира.
- Жизненный цикл программного обеспечения (ЖЦПО). Модели ЖЦПО. Достоинства и недостатки моделей водопада/каскадной, итерационной, спиральной. Условия применения моделей ЖЦПО.
- Эксплуатация программного обеспечения. Кривая Лемана и экспоненциальный рост сложности программы. Валидация и верификация программной системы.
- Определение требований пользователя к программному изделию. Типы требований (функциональные, надежность, программно-аппаратная платформа, совместимость с другими программами, переносимость, интерфейс пользователя и пр.). Примеры требований.
- Спецификация требований пользователя. Примеры. Правила предотвращения ошибок при проектировании интерфейса пользователя.
СПИСОК ЛИТЕРАТУРЫ
Основная литература
- В.А.Цикоза, Т.Г.Чурина. Методическое пособие к курсу “Методы программирования” (часть первая). Новосибирск: ВКИ НГУ, 1999.
- Т.В.Нестеренко Методическое пособие к курсу «Методы программирование» часть 1 . Лабораторные работы. Новосибирск: ВКИ НГУ, 2008
- Вирт Н. Алгоритмы и структуры данных. М.:Мир, 1989.-360с.
- Дейкстра Э. Дисциплина программирования. М, 1978.
- Дал У.,Дейкстра Э., Хорр К. Структурное программирование. М.:Мир, 1975.
- А.Ахо, Д.Хопкрофт, Д. Ульман. Структуры данных и алгоритмы. М.: Издательский дом “Вильямс”, 2000.
- В.В. Подбельский, С.С. Фомин. Программирование на языке Си. Москва: Финансы и статистика, 2007.-600 с.
- Т.А. Павловская. С/С++ Программирование на языке высокого уровня – Спб.:Питер, 2005.-461 с.
- Фокс Дж. Программное обеспечение и его разработка. М.: Мир, 1985. – 359 с.
- Боэм Б. Инженерное проектирование программного обеспечения. М.: Радио и связь, 1985. – 512 с.
Дополнительная литература
- А.Ахо, Д.Хопкрофт, Д. Ульман. Построение и анализ вычислительных алгоритмов. М.:Мир, 1979.
- Вирт Н. Алгоритмы + Структуры Данных = Программы. М, 1985.
- Кнут Д. Искусство Программирования для ЭВМ. Т.3. Сортировка и Поиск. М, 1978.
- Кнут Д. Искусство Программирования для ЭВМ. Т.1. Основные алгоритмы. М, 1978.
- Кормен Т., Лейзерсон Ч. ,Ривест Р. Алгоритмы: Построение и анализ (пер. с англ. под ред. Шеня А. ) - 960 с. {Классические учебники: Computer science} ISBN 5-900916-37-5 ~90. 04. 01/166, М: МЦНМО 01-99
- Хэзфилд Р. , Кирби Л. Искусство программирования на C: Фундаментальные алгоритмы, структуры данных и примеры приложений (пер. с англ. ) - 736 с. {Энциклопедия программиста} ISBN 966-7393-82-8/0-672-31896-2 ~91. 07. 24/014. К: ДиаСофт 2001.-736 с.
- Буч Г. Объектно-ориентированный анализ и проектирование с примерами приложений на С++. М.: Изд-во Бином, СПб.: Невский диалект, 1999. – 560 с.
- Бадд Т. Объектно-ориентированное программирование в действии. СПб.: Питер, 1997. – 464 с.
СТРУКТУРА ЭКЗАМЕНАЦИОННОГО БИЛЕТА.
Экзаменационный билет состоит из трех теоретических вопросов. Первый вопрос из Раздела 1 (см. выше содержание программы). Второй вопрос из Раздела 2. Третий вопрос из раздела 3.
СПИСОК ВОПРОСОВ ДЛЯ ЭКЗАМЕНА
РАЗДЕЛ 1. Основы программирования. Базовые алгоритмы и структуры данных
- Число и запись числа. Система счисления как система правил записи чисел. Правила записи значений целых и действительных чисел в позиционных системах счисления по основанию b (b-с.с.).
- Функции перевода "число-запись" и "запись-число" и алгоритмы их вычисления для произвольной системы счисления для целых чисел. Вычисления по схеме Горнера с минимальным числом операций
- Алгоритм перевода "запись-запись" для вещественных чисел Конечность записи вещественного числа
- Кратные системы счисления.
- Универсальные алгоритмы для арифметических операций в произвольной системе счисления
- Особенности умножения и деления на основание системы счисления. Особенности двоичной арифметики.
- Машинная память как однородный линейно-адресуемый массив ячеек фиксированной разрядности. Понятие разрядности и формата числа.
- Проблема представления произвольного действительного числа в ЭВМ. Модель действительных чисел конечной точности: интервалы (классы чисел, сравнимых с заданной точностью). Арифметика интервалов. Понятие погрешности (потери точности).
- Представление целых чисел без знака в ЭВМ. Арифметика по модулю.
- Модель целых чисел со знаком. Знаковый разряд. Формулы для минимальных и максимальных чисел.
- Проблемы выбора представления для отрицательного диапазона. Правила представления чисел и арифметика в дополнительном коде. Единообразие правил знаковой и беззнаковой арифметики.
- Выполнение арифметических операций в разрядной сетке. Перенос и переполнение.
- Представление вещественных чисел в ЭВМ. Типы погрешностей, связанные с конечным представлением. Правила сравнения вещественных чисел. Минимальное и максимальное числа.
- Модель вещественной арифметики с фиксированной точкой (равномерная точность представления). Формулы для максимального числа и точности.
- Нормализованное ("с плавающей точкой") представление вещественного числа. Мантисса и порядок, их вид.
- Модели представления чисел в ЭВМ и типы данных в языках программирования. Соотношение между ними.
- Перестановки. Инверсии. Инверсионный алгоритм перебора перестановок
- Перестановки. Инверсии. Алгоритм Дейкстры генерации перестановок (по алфавиту).
- Перестановки. Инверсии. Алгоритмы Кнута генерации перестановок.
- Перестановки. Инверсии. Рекурсивный алгоритм перебора перестановок
- Прямой и бинарный поиск в массиве. Анализ и сравнение эффективности.
- Алгоритмы поиска подстроки в строке: прямой и Бойера-Мура. Сравнительный анализ.
- Общая постановка задачи сортировки. Параметры оценки эффективности алгоритмов сортировки. Наилучшие и наихудшие оценки их эффективности
- Методы сортировки вставками: простыми, бинарными, метод Шелла. Оценки эффективности.
- Методы сортировки обменом. “Пузырек” и "Шейкер" сортировка. Быстрая сортировка.
- Сортировка выбором: простая и пирамидальная.
- Сравнительный анализ эффективности методов сортировки
- Методы сортировки слиянием.
- Методы сортировки файлов.
- Рекурсия как общий метод сведения задачи к самой себе. Примеры рекурсивных формул, данных, алгоритмов. Правила задания рекурсии: рекурсивный переход, условия выхода.
- Факториал. Рекурсивное и итеративное вычисление факториала.
- Алгоритмы генерации простых чисел. Их сравнительный анализ.
- Типы данных в языках программирования, назначение, классификация, стандартные операции.
- Структурные типы данных в языке программирования Си.
- Области существования данных, связанные с программой и процедурами. Правила видимости имен из разных областей.
- Процедуры и функции: назначение, различия, правила описания, вызова, локализации переменных, способы передачи параметров и результатов.
- Файл: классификация по структуре и способу доступа, способы описания, операции. Дисциплина работы с файлами.
- Представление массивов и структур в памяти ЭВМ. Вычисление адресов элементов.
- Сложность вычислительных алгоритмов. Методы оценки сложности.
- Классификация алгоритмов по сложности.
- Метод динамического программирования на примере решения одной из задач.
- Модели представления чисел в ЭВМ и типы данных в языках программирования. Соотношение между ними.
- Статическое и динамическое распределение памяти. Способы доступа к данным (прямой, последовательный, индексный, косвенный). Работа с динамической памятью в Си.
- Динамические типы данных в языках программирования: организация, описание, доступ. Указатели.
РАЗДЕЛ 2. Практика программирования – методы и инструменты
- Разновидности списков: статические, динамические, одно/двусвязные, циклические, упорядоченные, иерархические. Операции над списками.
- Алгоритмы поиска и включения для списков, анализ их эффективности.
- Классические модели динамических структур данных: стек, очередь, дек. Основные операции, способы реализации. Примеры применения.
- Алгоритм перевода выражения из инфиксной формы в постфиксную. Вычисления на стеке.
- Граф как форма представления отношения. Типы графов. Смежность и инцидентность. Пути и маршруты
- Представление графов в ЭВМ. Матрицы смежности, инцидентности. Динамическая структура со списками дуг. Табличное представление. Сравнение различных способов представления
- Поиск пути по графу. Алгоритм транзитивного замыкания, его эффективность.
- Топологическая сортировка. Реализация с помощью иерархических списков.
- Топологическая сортировка. Реализация с помощью матрицы смежности.
- Топологическая сортировка. Реализация методом поиска в глубину.
- Алгоритм Дейкстры поиска минимального пути от одного источника.
- Поиск всех минимальных путей в графе. Алгоритм Флойда.
- Дерево как частный вид ациклического графа. Основные определения.
- Классификация обходов деревьев. Инфиксный, префиксный и постфиксный порядки обхода деревьев. Рекурсивная реализация.
- Обход дерева в ширину. Реализация с помощью очереди.
- Классические задачи на деревьях: обработка арифметических выражений, связь с обходом деревьев.
- Левое/правое скобочное представление деревьев
- Деревья двоичного поиска: назначение, представление, алгоритмы вставки и поиска элементов, оценки их эффективности.
- Бинарный поиск по массиву и дереву. Условие осуществимости. Сортировка включением в дерево бинарного поиска.
- Сбалансированные деревья поиска. Алгоритм включения в сбалансированное дерево двоичного поиска.
- Обходы графа. Обход всех вершин графа методом поиска в глубину.
- Каркас графа (остовное дерево). Построение каркаса методом поиска в глубину.
- Помеченные графы и их каркас. Задача и алгоритмы построения минимального каркаса.
- Двусвязность. Алгоритм поиска в графе двусвязных компонент и точек сочленения.
- Классические переборные задачи. Коммивояжер, рюкзак, устойчивые бракосочетания. Способы их решения (обзорно).
- Классические переборные задачи. Задача коммивояжера.
- Алгоритмы с возвратом — обход шахматной доски конем.
- Алгоритмы с возвратом — задача о ферзях.
- Нахождение оптимальной выборки. Задача о рюкзаке.
- Задача об устойчивых браках.
- Задача о раскраске графа (раскраска вершин). Примеры эвристического и переборного алгоритмов решения. Примеры задач, сводимых к раскраске.
- Задачи о лабиринтах. Сведение их к модельным задачам на графах.
- Эйлеров граф. Способ определения Эйлерова цикла. Задачи, сводимые к Эйлеровым циклам.
- Гамильтоновы циклы. Поиск всех гамильтоновых циклов в графе. Задачи, сводимые к гамильтоновым циклам.
- Виды операторов цикла в языке программирования Си.
- Работа со строками в Си.
РАЗДЕЛ 3. Основы технологии разработки программ
- Специфика программного изделия как объекта туда. Признаки сложности программ и процесса их разработки по Фоксу.
- Кривая Лемана – причины экспоненциального роста сложности программы при эксплуатации, меры борьбы с ростом сложности.
- Проблемы организации процесса разработки программ. Подходы к их решению. Три источника этих проблем по Кауфману.
- Модели жизненного цикла программного обеспечения (ЖЦПО). Краткая характеристика моделей водопада, каскадной, спиральной, итерационной.
- Условия применимости модели водопада.
- Условия применимости спиральной модели.
- Условия применимости итерационной модели.
- Типы требований к программной системе.
- Примеры спецификации требований к программной системе.
- Примеры защитного программирования. Правила предотвращения ошибок при внешней спецификации программы.
- Валидация и верификация программ.