Структуры данных-лекция1.ppt
- Количество слайдов: 34
Структуры и алгоритмы обработки данных Лекции читает к. т. н. , проф. Гулаков Василий Константинович Вид учебной нагрузки Объём в часах 3 -й сем 4 -й сем Всего Лекции 34 34 68 Лабораторные работы 17 34 51 Курсовой проект - + Расчётно-графическая работа (2) + - Зачёт + - Экзамен - + Всего аудиторных занятий 51 68 119 Самостоятельная работа 93 148 241 Итого 144 216 360 1
Материалы по дисциплине • • Сайт кафедры «И и ПО» ftp: //iipo. tu-bryansk. ru http: //iipo. tu-bryansk. ru ftp: //linux http: //linux Раздел /pub/Gulakov Для доступа из Internet необходим login и пароль, обращаться к Трубакову Андрею Олеговичу Коростелёву Дмитрию Александровичу • Для доступа из кафедральной сети login и пароль не нужны 2
Содержание дисциплины в соответствии с требованиями ГОС • • • Абстрактный тип данных: спецификация, представление, реализация; линейные структуры данных: стек, очередь, дек; нелинейные структуры данных: иерархические списки, деревья и леса, бинарные деревья; обходы деревьев; задачи поиска и кодирования (сжатия) данных, кодовые деревья, оптимальные префиксные коды; исчерпывающий поиск: перебор с возвратом, метод ветвей и границ, динамическое программирование; быстрый поиск: бинарный поиск, хеширование; использование деревьев в задачах поиска: бинарные деревья поиска, случайные, оптимальные, сбалансированные по высоте (АВЛ) и рандомизированные деревья поиска; задачи сортировки; внутренняя и внешняя сортировки; алгоритмы сортировки; оптимальная сортировка; порядковые статистики; анализ сложности и эффективности алгоритмов поиска и сортировки; файлы: организация и обработка, представление деревьями: Bдеревья; алгоритмы на графах: представления графов, схемы поиска в глубину и ширину, минимальное остовное дерево, кратчайшие пути; теория сложности алгоритмов: NP-сложные и труднорешаемые задачи. 3
Введение • В основе любой программы лежат алгоритмы и структуры данных. • Эффективный алгоритм - необходимое условие для создания эффективной программы, но не достаточное. Очень много зависит от того, как хранятся данные. – Представим себе библиотеку, в которой книги свалены в кучу. Надо перебрать в среднем половину этой кучи, чтобы найти нужную книгу. Когда же книги расположены в определённом порядке, нужная книга находится быстро. То есть время поиска зависит от структуры хранения. То же самое можно сказать и о хранении данных в программе. 4
Применение знания структур данных • знание теории структур данных и, в частности методов представления данных на логическом и машинном уровнях, а также допустимых операций над различными структурами необходимо для глубокого уяснения таких дисциплин как – компиляторы языков программирования, – операционные системы (ОС), – управление базами данных, – системы искусственного интеллекта и т. д. 5
Понятие структура в окружающем мире • Понятием структура пронизан весь окружающий нас мир. • В живом мире это и скелет человека или животного, ДНК, анатомия человека и т. д. • Объекты биологии, химии, строительные объекты и другие имеют определённую структуру • Понятие структура относится не только 6 к объектам, но и к процессам.
Определение множества • Множество (set) можно охарактеризовать как неупорядоченную совокупность (которая может быть пуста) отдельных элементов некоторого типа, обладающих некоторым свойством. Между данными отсутствуют какие либо отношения. • Конкретное множество определяется – либо в виде явного списка элементов (например, S = {2, 3, 5, 7}), – либо в виде указания условия, которому должны удовлетворять все элементы множества и только они (например, S= {n, где n - простое число, меньшее 10}). 7
Основные операции над множествами • операция доступа: – – – принадлежности извлечения, изменения, включения исключения. • вычисление подмножества • объединение двух множеств • пересечения двух множеств (формирование нового множества, элементы которого принадлежат только обоим множествам одновременно). • разность двух множеств (формирование нового множества, элементы которого принадлежат только первому множеству и не принадлежат второму одновременно). 8
Представление множеств • битовым вектором (bit vector), если U = {1, 2, 3, 4, 5, 6, 7, 8, 9}, то подмножество S = {2, 3, 5, 7} можно представить в виде битовой строки 011010100. • в виде связанного списка. Необходимо обратить внимание на два принципиальных различия между множествами и списками. – Во-первых, во множестве не может быть одинаковых элементов, а в списке — может. – Во-вторых, множество — это неупорядоченная совокупность элементов, изменение порядка его элементов не изменяет само множество. В свою очередь, список определяется как упорядоченная совокупность элементов. 9
Коллекция • Коллекция - множество элементов, объединённых некоторым семантическим смыслом 10
Структуры данных Общие положения Классификация структур данных Классификация алгоритмов обработки данных 11
Определение структуры данных • Структурой данных называется совокупность элементов данных, между которыми существуют определенные отношения, причем элементами данных могут быть как простые данные, так и структуры данных. • Математически структуру данных можно определить S= (D, R), – где D - множество данных – R -множество отношений 12
Признаки структуры данных • возможное множество допустимых значений • характер отношения между данными • возможные операции над структурами данных Данные, объединенные по этим признакам, называются структурой 13
Возможное множество допустимых значений Элементом структуры может быть –данное некоторого типа (целое, вещественное, логическое и т. д. ), –конечное упорядоченное множество данных одного типа, –данные разных типов –структура данных общего вида, (т. е. возможны несколько уровней иерархии структуры). • Более сложный случай, когда элемент данных представляет собой конечное упорядоченное множество простых данных и структур данных. 14
Характер отношения между данными • Отношения одного к одному (например – списки); • Отношения одного ко многим (например – деревья); • Отношения многих ко многим (например – граф). • Если отношения имеют какую либо характеристику (вес, смысл, и т. д. ), то различают взвешенные сети, семантические сети и т. д. 15
Возможные основные операции над структурами данных • Создать • Добавить • Удалить • Сравнить 16
Графическое представление структур данных • Используется для визуализации небольших структур путём отражения элементов данных и связей между ними. Поэтому, как правило, структуру изображают в виде графа. • В случае когда отношения между данными просты и очевидны, элементы отношений в явном виде отсутствуют. Например - массив. В этом случае удобно использовать векторную или табличную форму. • Иногда удобно изображать не всю структуру , а лишь один или несколько ее элементов. Для удобства элемент разбивается на фиксированные поля, каждое из которых содержит простое данное, элемент данных или элемент отношения Элемент структуры данных Элемент отношений 17 Связь с другими элементами
Логическое представление структур данных • Структуры данных, рассматриваемые без учета представления их в машинной памяти называют логическими структурами • Например, доступ к элементу двухмерного массива на логическом уровне реализуется указанием номеров строки и столбца. 18
Физическое представление структур данных • Физическая структура данных отражает способ физического представления данных в машине. • Например на физическом уровне доступ к элементу массива осуществляется с помощью функции адресации, которая при известном начальном адресе массива в памяти преобразует номера строки и столбца в адрес соответствующего элемента массива. 19
Преобразование структур данных из логической формы в физическую и обратно • Вследствие различия логической и соответствующей ей физической структур в вычислительных системах должны существовать процедуры , осуществляющие отображение логической структуры в физическую и , наоборот, физической структуры в логическую (дескрипторы). • Эти процедуры обеспечивают, кроме того, доступ к физическим структурам и выполнения над ними различных операций , причем каждая операция может рассматриваться применительно к логической или физической структурам данных. 20
Связь между структурами данных и алгоритмом • Связь между структурами данных и алгоритмами их обработки требуют значительно внимания, так как от этого зависит эффективность алгоритма. • Например, существует достаточно много алгоритмов сортировки, но каждый из них эффективен в зависимости от обрабатываемых структур данных и от объемов информации. 21
Определение понятия алгоритма • Нестрогое определение: Алгоритм- это однозначно трактуемые процедуры решения задачи. Процедура- это конечная последовательность точно определенных шагов или операций, для выполнения которых требуется конечный объем памяти и конечное время. • Очевидно что в этом определении есть недостатки. • Например, мы фактически утверждаем, что только тогда имеется алгоритм для решения задачи, когда можно написать программу для ЭВМ. Но это не так! Человечество разработало эффективный алгоритм завязывания шнурков на ботинках. Но описать этот алгоритм очень сложно, тем более написать программу. • Т. е. мы оперируем ограниченным понятием алгоритма. Но пока оно нас устраивает, будем им пользоваться. 22
Отличие алгоритма • Современное значение слова алгоритм очень схоже со значением слов рецепт, процесс, метод, способ, процедура, программа. Однако в слове алгоритм есть свой дополнительный смысловой оттенок. • Помимо того, что алгоритм не просто свод конечного числа правил, задающих последовательность выполнения операций при решении той или иной специфической задачи, он имеет еще пять важных особенностей (свойств ): 23
Свойства алгоритма • 1) Конечность: Алгоритм должен всегда заканчиваться после конечного числа шагов. Процедуру, обладающую всеми свойствами алгоритма за исключением конечности, можно назвать вычислительным методом. Например, нахождение числа π никогда не заканчивается. • 2) Определенность: Каждый шаг алгоритма должен быть точно определен. Действия, которые необходимо произвести должны быть строго и недвусмысленно определены в каждом возможном случае. • 3) Ввод: Алгоритм имеет некоторое ( быть может, равное нулю ) число входных данных, т. е. величин, заданных ему до начала работы. • 4) Вывод: Алгоритм имеет одну или несколько выходных величин, имеющих вполне определенные отношения ко входным данным. • 5) Эффективность: Это означает, что операции, которые необходимо провести в алгоритме, должны быть достаточно простыми, чтобы их в принципе можно было выполнить точно и за конечный отрезок времени. 24
Комментарии к свойствам алгоритма • • Попытаемся сравнить алгоритм с рецептом кулинарной книги. Рецепты обладают свойствами финитности, имеют входные данные, выход, но отличаются печально известным отсутствием определенности. Например, инструкция “Добавьте щепотку соли “, или “Перемешайте”. В практике, как правило, алгоритм должен быть не просто конечным, а предельно конечным, т. е. иметь разумное число шагов. Например, алгоритм определения выигрыша в произвольной шахматной ситуации конечен, но время достижения результата огромно. Одной из характеристик качественности алгоритма является время его выполнения. Другими характеристиками являются приспособляемость алгоритма к вычислительным машинам, его простота изящество и т. д. Существует понятие анализ алгоритмов. Суть его состоит в том, что берется определенный алгоритм и устанавливаются его средние свойства. Существует теория алгоритмов, где речь идет главным образом о существовании и не существовании эффективных алгоритмов для подсчета тех, или иных величин. В этом случае определение алгоритма следующее : Алгоритм- это вычислительный метод, заканчивающийся в конечное число шагов для всех х из множества I. 25
АНАЛИЗ СЛОЖНОСТИ АЛГОРИТМА • Время, затрачиваемое алгоритмом, как функция размера задачи, называется временной сложностью этого алгоритма. Поведение этой сложности в пределе при увеличении размера задачи называется асимптотической временной сложностью этого алгоритма. • Аналогично можно определить ёмкостную сложность и асимптотическую ёмкостную сложность. • Асимптотическая сложность алгоритма определяет в итоге размер задач, которые можно решать этим алгоритмом. Если алгоритм обрабатывает входы размера n за время cn 2, где c - некоторая постоянная, то говорят, что временная сложность этого алгоритма есть O(n 2) (порядка n 2). 26
Нотация сложности • Различают • F=O(g), f растёт не быстрее g (оценка сверху) • F=Ω(g), f растёт не медленнее g (оценка снизу) • F=ϴ(g), f и g имеют одинаковый порядок роста • В дальнейшем будем рассматривать нотацию F=O(g) 27
Виды сложности алгоритма Сложность алгоритма классифицируется по мере возрастания: • Сложность не зависит от размера задачи О(1) • логарифмическая сложность O(log 2 n) • линейная сложность О(n) • полиноминальная сложность О(nа), где а=сonst • экспоненциальная сложность О(an) 28
пример анализа сложности алгоритма • нахождение максимального числа в массиве А[n] • 1 Начальные установки Все ли элементы проверены ДА n-1 Сравнить Заменить 1 < A < n-1 A К=К+1 n-1 нет 29
Классификация структур данных • Структуры данных, характерные для основной памяти ВС, будем называть оперативными структурами. Структуры данных для внешней памяти -внешние структуры. • Понятия и определения, относящиеся к типам и структурам данных, нельзя считать установившимися и единственными. Весьма условна и граница разделяющая понятия “тип данного” и “структура данных”. 30
Классификация оперативных структур В зависимости от отсутствия или наличия явно заданных связей между элементами данных следует различать несвязные структуры (векторы, массивы, строки, стеки, очереди) и связные структуры (связные списки). 31
Важный признак структуры данных - характер упорядоченности ее элементов. По этому признаку структуры можно делить на линейноупорядоченные или линейные, и нелинейные структуры. 32
В зависимости от характера взаимного расположения элементов в памяти линейные структуры можно разделить на структуры с последовательным распределением их элементов в памяти (векторы, строки, массивы, стеки, очереди) и структуры с произвольным связанным распределением их элементов в памяти (односвязные, двухсвязные, циклически связанные, ассоциативные списки). Пример нелинейных структур многосвязные списки, древовидные структуры и графы общего вида. 33
Изменчивость структуры Весьма важный признак структуры данных- ее изменчивость. По признаку изменчивости будем различать структуры статические, полустатические и динамические: – статические структуры – размеры структуры данных и связи между элементами структуры не изменяются; – полустатические структуры – меняется размер структуры данных, а связи между элементами структуры не изменяются; – динамические структуры – меняется и размер структуры данных и связи между элементами структуры; 34
Структуры данных-лекция1.ppt