Министерство образования Российской Федерации Санкт-Петербургский Государственный Электротехнический Университет «ЛЭТИ» имени В. И. Ульянова - Ленина ________________________________________________________________________________ КАФЕДРА ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ Отчет по курсовой работе по дисциплине структуры и алгоритмы обработки данных на тему “Структуры и алгоритмы обработки данных” Выполнил: Проверил: Голубков А.М. Факультет КТИ Группа 9307 Колинько П. Г. Санкт-Петербург 2010 1 Содержание: 2 Часть 1. Множества 1.1 Цель работы…………………………………………………………………………………………………………….3 1.2 Задание……………………………………………………………………………………………………………………3 1.3 Содержание работы……………………………………………………………………………………………….3 1.4 Контрольные примеры…………………………………………………………………………………………..3 1.5 Результаты исследования алгоритмов…………………………………………………………………..4 Часть 2. Деревья 2.1 Цель работы…………………………………………………………………………………………………………….4 2.2 Задание……………………………………………………………………………………………………………………4 2.3 Содержание работы……………………………………………………………………………………………….4 2.4 Использованные структуры……………………………………………………………………………………4 2.5 Оценка сложности алгоритма………………………………………………………………………………..5 2.6 Контрольные примеры…………………………………………………………………………………………..5 Часть 3. Графы общего вида и нагруженные графы 3.1 Цель работы…………………………………………………………………………………………………………….5 3.2 Задание……………………………………………………………………………………………………………………5 3.3 Содержание работы……………………………………………………………………………………………….5 3.4 Выбранный метод хранения данных…………………………………………………………………….5 3.5 Контрольные примеры…………………………………………………………………………………………..6 Часть 1. Множества 3 1.1 Цель работы: Приобретение практических навыков работы со множествами при различных способах их представления в программах, а также получение сравнительных оценок эффективности различных способов представления множеств. 1.2 Задание: Реализовать и исследовать четыре способа представления множеств в памяти ЭВМ в программе, которая по заданным множествам A, B, C, D десятичных цифр вычисляет множество, содержащее цифры, общие для множеств A и B, а также все цифры из множества C и из множества D. Измерить время решения задачи для каждого из способов представления множеств. 1.3 Содержание работы: 1. Определить, какие операции над множествами требуется реализовать по индивидуальному заданию. Предложить контрольные примеры. 2. Реализовать в виде программы ввод данных заданного класса и формирование из них множеств, выполнение заданных операций над множествами и вывод результата с использованием самого простого (для Вас) способа представления множеств. Добиться прохождения контрольных примеров. Предъявить работающую программу преподавателю. 3. Создать, протестировать и отладить варианты программы с другими способами представления множеств. Должны быть рассмотрены следующие способы: массив элементов; список элементов; массив битов; двоичные слова; 4. Заменить в каждом из вариантов программы ввод исходных данных генерацией множеств. Произвести измерение времени выполнения заданных операций над множествами для каждого из реализованных способов их представления. Определить, в каких случаях время зависит от мощности обрабатываемых множеств. Указание: для измерения времени можно использовать функцию clock() или организовать подсчёт шагов алгоритма обработки множеств. Можно применить оба способа и сравнить результаты. 5. Дать оценку (асимптотическую) размеров памяти, занимаемой множествами в каждом из вариантов программы (ёмкостная сложность). 1.4 Контрольные примеры: Пример 1: A = {9, 7, 5} B = {9} C = {2, 5} D = {0, 1} Результирующее множество: E = {9, 2, 5, 0, 1} Пример 2: 4 A={} B = {1} C = {5, 4} D = {3, 9} Результирующее множество: E = {5, 4, 3, 9} 1.5 Результаты исследования алгоритмов: Способ представления множеств Временная сложность Ёмкостная сложность Таблица 1. Результаты исследования плгоритмов Временная Результаты Зависимость сложность (по измерения (в времени от тексту таймингах) мощности множества программы) Массив элементов O( ) O(1) O( ) 139 Есть Список элементов O( ) O(n) O( ) 200 Есть Массив битов O(1) O(1) O(1) 186 Нет Двоичные слова O(1) O(1) O(1) 16 Нет Часть 2. Деревья 2.1 Цель работы: Приобретение опыта составления и отладки программ с рекурсивными функциями. 2.2 Задание: Составить программу для создания троичного дерева с внутренней (симметричной) нумерацией вершин и подсчёта в нём количества вершин, имеющих не более двух потомков, обходом "в ширину". Программа должна выводить изображение дерева с пронумерованными вершинами на экран и показывать порядок обхода вершин. Оценить теоретическую временную сложность программной реализации алгоритмов обхода дерева. 2.3 Содержание работы: Составить программу по предложенному заданию. Предусмотреть в ней вывод на экран изображения дерева с вершинами, пронумерованными предусмотренным в задании способом и выдачу последовательности номеров вершин в процессе обхода дерева. Дать теоретическую оценку временной сложности алгоритма обхода дерева. 2.4 Использованные структуры: В данной программе для хранения узла дерева была использована следующая структура: struct Nd { int d; Nd *left; Nd *right; Nd *center; }; 5 Структура состоит из четырёх полей: номер узла и три указателя на левого, правого и центрального сыновей. 2.5 Оценка сложности алгоритма: Теоретическая сложность алгоритма обхода дерева в ширину составляет O(n). Сложность алгоритма обхода дерева по тексту программы составляет O(n), т.к. для каждого узла дерева функция будет вызвана один раз. 2.6 Контрольные примеры: Пример 1: Обход дерева в ширину: 1 2 3 4 5 6 Количество узлов, имеющих не более двух потомков: 5 1 2 3 4 5 6 Часть 3. Графы общего вида и нагруженные графы 3.1 Цель работы: Приобретение опыта работы со сложными структурами данных. 3.2 Задание: Реализовать в виде программы и исследовать алгоритм проверки ацикличности графа. 3.3 Содержание работы: Разработать и реализовать в виде программы алгоритм по предложенному заданию. Дать теоретическую оценку временной сложности алгоритма и сравнить её с оценкой по тексту программы. Учесть оценки сложности подалгоритмов ввода исходных данных и вывода результата. 3.4 Выбранный метод хранения данных: При выполнении задания для хранения информации об ориентированном графе был выбран метод задания матрицы смежности. 3.5 Контрольные примеры: 6 Пример 1. Таблица 3.1 Матрица смежности к Примеру 1. 0 1 1 0 0 1 0 0 0 a b c Таблица3.2 Матрица достижимости к Примеру 1. 0 1 1 0 0 1 0 0 0 Результат: граф ацикличен. Пример 2. Таблица 3.3 Матрица смежности к Примеру 2. 0 1 0 0 0 1 1 0 0 a b c Таблица3.4 Матрица достижимости к Примеру 2. 1 1 1 1 1 1 1 1 1 Результат: у графа есть цикл. 7