- •Предназначено студентам очной формы обучения.
- •Введение
- •1. Оценки сложности алгоритмов
- •1.1. Определение понятия алгоритм
- •1.2. Оценка сложности алгоритмов
- •2. Линейные структуры данных
- •2.1. Методы организации и хранения линейных списков
- •2.2. Операции со списками при последовательном хранении
- •2.3. Операции со списками при связном хранении
- •2.4. Организация двусвязных списков
- •Задания для самоконтроля
- •2.5. Стеки и очереди
- •2.6. Сжатое и индексное хранение линейных списков
- •3. Сортировка и слияние
- •3.1. Пузырьковая сортировка
- •3.2. Сортировка вставкой
- •3.3. Сортировка посредством выбора
- •3.4. Сортировка квадратичной выборкой
- •3.5. Слияние списков
- •3.6. Сортировка списков путем слияния
- •3.7. Быстрая и распределяющая сортировки
- •4. Поиск
- •4.1. Последовательный поиск
- •4.2. Бинарный поиск
- •4.4. Методы вычисления адреса
- •4.5. Выбор в линейных списках
- •5. Рекурсия
- •6. Алгоритмы на графах и сетях
- •6.1. Исходные понятия
- •6.2. Матричные представления графов
- •6.3. Другие представления графов
- •6.4. Поиск в глубину как система исследования графа
- •6.5. Перебор цепей поиском в глубину
- •6.6. Взвешенные графы. Ориентированные графы
- •6.7. Нахождение фундаментального множества циклов
- •6.8. Выявление мостов и точек сочленений
- •6.9. Поиск в ширину как система исследования графа
- •6.10. Кратчайшие пути, ведущие от заданного узла X ко всем прочим
- •6.11. Алгоритм Дейкстры нахождения кратчайших путей во взвешенном графе
- •6.12. Улучшения алгоритма Дейкстры
- •6.13. Построение кратчайшего каркаса
- •6.14. Нахождение всевозможных кратчайших путей в графе
- •6.15. Потоковые задачи
- •6.16. Пример практической задачи на графах
- •7. Генераторы случайных и псевдослучайных последовательностей
- •7.1. Общая постановка задачи
- •7.3. Генератор случайных чисел, поставляемый с системой
- •7.4. Генератор с малым кодом
- •7.5. Генератор Парка-Миллера
- •7.6. Улучшенная версия генератора Парка-Миллера
- •7.7. Быстрый генератор для 32-битового представления целых и действительных чисел
- •7.8. Алгоритм л'Экюера, комбинирующий две последовательности
- •Оглавление
- •7. Генераторы случайных и псевдослучайных последовательностей 144
- •394026 Воронеж, Московский просп., 14
ФГБОУВПО «Воронежский государственный
технический университет»
Г.А. Кащенко Д.О. Карпеев
МЕТОДЫ ПРОГРАММИРОВАНИЯ
Утверждено Редакционно-издательским советом университета в качестве учебного пособия
Воронеж 2011
УДК 681.3.07
Кащенко Г.А. Методы программирования: учеб. пособие / Г.А. Кащенко, Д.О. Карпеев. Воронеж: ФГБОУВПО «Воронежский государственный технический университет», Воронеж, 2011. 170 с.
В учебном пособии по дисциплинам «Методы программирования» и «Средства и методы программирования» рассматриваются распространенные в практике программирования структуры данных, а также наиболее распространенные алгоритмы сортировки и поиска, рациональные по затратам памяти и дискового пространства. Излагаемый материал содержит оттестированные программы, реализованные на языках С++ и в системе программирования Delphi, которые используются как части создаваемых студентами более сложных программ.
Издание соответствует требованиям государственного образовательного стандарта высшего профессионального образования по направлению 090100 «Информационная безопасность», специальности 090106 "Информационная безопасность автоматизированных систем", дисциплинам «Методы программирования», «Средства и методы программирования».
Предназначено студентам очной формы обучения.
Учебное пособие подготовлено в электронном виде в текстовом редакторе MS Word 2007 и содержится в файле КащенкоМП.doc.
Ил. 23. Библиогр.: 14 назв.
Рецензенты: ОАО «Концерн «Созвездие»
(канд. техн. наук, доц. Р.В. Семенов);
канд. техн. наук, доц. Г.А. Остапенко
Кащенко Г.А., 2011
Оформление. ФГБОУВПО «Воронежский государственный технический университет», 2011
Введение
Главной целью настоящего пособия является изложение основных приемов и методов конструирования эффективных программ. Эффективность, наглядность и сложность программ существенно зависит от используемых в ней структур данных. В пособии представлены наиболее важные структуры данных и показано, при каких условиях их использование является наиболее целесообразным. Приведены реальные программы и алгоритмы обработки следующих структур данных: линейных списков, матриц и многомерных массивов, графов.
Учебное пособие ориентировано на типовую программу по дисциплинам «Методы программирования» и «Средства и методы программирования». Для изучения материала пособия необходимо знание языков программирования Pascal и С++. Кроме того также предполагается, что у студентов имеются определенные навыки практической работы на ПЭВМ по составлению и отладке небольших программ на одном из указанных выше языков программирования.
1. Оценки сложности алгоритмов
1.1. Определение понятия алгоритм
Решение задачи с помощью ЭВМ – это процесс автоматического преобразования исходной информации (исходных данных) в искомый результат в соответствии с заданной последовательностью действий, называемой алгоритмом.
Алгоритм – одно из основных понятий математики, которое невозможно строго определить, а можно лишь пояснить с помощью других слов. Можно сказать, что алгоритм – это точное предписание, которое задает вычислительный процесс, начинающийся из некоторой совокупности возможных для этого алгоритма исходных данных и направленный на получение полностью определяемого этими исходными данными результата.
Алгоритмы должны обладать следующими свойствами:
- конечность – работа алгоритма должна заканчиваться за конечное число шагов, хотя некоторые из шагов могут повторятся многократно.
- определенность (детерминированность) – все предписания алгоритма должны иметь однозначную трактовку и должны быть понятны исполнителю алгоритма, т.е. каждый шаг алгоритма должен быть однозначным, недвусмысленным, при одних и тех же исходных данных должны быть получены одни и те же результаты. При рассмотрении сложности алгоритмов термину «детерминированность» придают несколько иную, расширенную трактовку.
- массовость – решение целой группы задач, отличающихся исходными данными. Иногда при решении уникальной задачи это свойство может игнорироваться. Различаются массовые и индивидуальные задачи. Индивидуальная задача получается из массовой, если зафиксированы некоторые исходные данные. Алгоритм решает некоторую массовую задаче, если он решает любую индивидуальную задачу этой массовой задачи.
- результативность – алгоритм должен приводить к достижению поставленной цели за конечное число шагов, он не может быть прерван из-за непредвиденных ситуаций.
- эффективность – все шаги алгоритма должны быть такими, чтобы они выполнялись за конечное время, а общее время работы должно лежать в допустимых для решения этой задачи пределах.