Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пантелеев Евгений Рафаилович.docx
Скачиваний:
2
Добавлен:
14.11.2019
Размер:
41.77 Кб
Скачать

Пантелеев Евгений Рафаилович

Структуры и алгоритмы обработки данных

Цель понятие алгоритмов решения сложных задач.

Литература “Структуры и алгоритмы обработки данных”.

Экзамен. Задача на компе.

2 семестра

Задачи курса:

Формализация и структуризация понятия сложность.

Абстрактные типы данных (структурная сложность).

Теория вычислительной сложности.

Методы ограниченного и полного перебора.

Приближенные методы оптимизации.

Эффективные алгоритмы оптимизации на графах.

Фактор сложности.

  1. Структурная сложность – сложность моделей данных, которые используются для решения задач.

  2. Вычислительная сложность характеризует вычислительные затраты на исполнение алгоритма.

Абстрактные типы данных.

Абстрактный тип данных (АТД) – тип определяемый программистом в терминах операций доступа в его экземплярах. Совокупность этих операций принято называть интерфейсом абстрактных операций.

Требования к интерфейсу:

  1. Функциональная полнота. Набор операций должен быть достаточен для выполнения любой из функций.

  2. Простота. Должно быть минимальное кол-во операций.

  3. Интерфейс должен быть независимый от реализации.

Реализация АТД – набор скрытых операций и свойств АТД, который необходим для обеспечения его интерфейса.

Реализация скрыта!!!

Интерфейс открытый!!!

2 ветви абстракции КОД и ДАННЫЕ.

Тут должна быть схема с доски.

Структура данных называется линейной, если для каждого элемента этой структуры можно указать непосредственно следующий и непосредственно предыдущий элемент (массив).

Преимущества абстракции данных:

  1. Декомпозиция. Использование АТД позволяет разрабатывать сложную модель данных по частям.

  2. АТД повышает повторное использование кода.

Пример АТД.

Стек.

Набор данных, который поддерживает дисциплину доступа последний пришел, первый вышел.

Классификация операций интерфейса.

Конструктор – операции по выделению ресурсов экземпляру объекта и его реализации.

Деструктор…

Операции позволяющие узнать состояние объекта – селекторы.

Модификатор – это операция меняющая состояние объекта.

Операции интерфейса стека.

Положить в стек, взять со стека. (Модификаторы).

Пустой стек, полный стек. (Селекторы).

Конструктор и деструктор. Для создания.

В зависимости от выбора реализации может потребоваться скрытое представление тела стека (массив) и указателя на вершину стека.

Задание для самоподготовки: выполнить объектную реализацию абстрактного типа стек с учетом ограничения доступа к элементам реализации. Использовать динамический массив.

Использование АТД стек для вычисления Польской инверсной записи. Это способ записи арифметических выражений, в которой знак операций следует за операндами, в котором она применяется. 1+2 – инфиксная запись. 1 2 + - Польская инверсная запись.

1+2*3 = 1 2 3 * +

Дает возможность вычислить значение за один проход.

Лексема – минимальный смысловой элемент записи. (Смотри Вики).

Алгоритм вычисления.

Пока не конец строки выполняй:

  1. Читать лексему.

  2. Если лексема операнд, то положить ее в стек, иначе взять со стека 2 верхних элемента и применить к ним операцию соответствующую текущей лексеме, результат положить в стек.

(Лабораторная вычислить Польскую запись или построить).

Алгоритм построения Польской записи.

1.Расставить все недостающие скобки в записи инфиксного выражения с учетом приоритета операций.

2.Переместить знаки операций за соответствующие правые скобки.

3.Удалить все скобки в записи.

Преобразование из инфиксной записи в Польскую.

+

-

*

/

(

)

Инфиксный

1

1

2

2

3

0

Стековый

1

1

2

2

0

-

В отличие от алгоритма вычисления Польской записи в стеке размещаются не числа, а символы операций.

  1. Инициализировать стек операций.

  2. Пока не конец инфиксной строки выполнять

    1. Читать лексему

    2. Если лексема операнд (число) то

      1. Отправить лексему в выходной поток

      2. Иначе если лексема закрывающая скобка то

        1. извлечь из стека операций все операции до открывающей скобки и отправить их кроме скобки в выходной поток.

        2. Иначе извлечь из стека все операции, стековый приоритет которой больше или равен инфиксному приоритету текущей операции и отправить эти операции в выходной поток. Поместить текущую операцию в стек.

  3. Извлечь операции из стека и отправить ее в выходной поток.

Пример абстракции нелинейных структур.

Бинарное дерево – ор. Граф, каждая родительская вершина которого имеет не более 2ух дочерних. Вершина, не имеющая родителей, называется корнем. Вершина, не имеющая потомков, называется истоком.

Пример дерево оптимального префиксного кодирования.

ДОПК – это структура данных, которая используется в алгоритме сжатия (алгоритм Хаффмана).

Математика

М А Т Е И К

2 3 2 1 1 1

Построение дерева

  1. Пока длинна вектора частот больше либо равна 2 выполнять

    1. Упорядочить вектор частот по убыванию

    2. Построить элементарное дерево на 2ух последних элементах списка

    3. Заменить 2 последних элемента суммой их частот

Все символы входного потока соответствуют листьям дерева.

Разметить дуги дерева влево 0 вправо 1.

Кодом символа будем считать последовательность элементов разметки дуг на пути от корня к листу соответствующего символа. ДОПК.

Не один из кодов не является префиксом другого (т.е. не является началом кода другого символа).

Математика – 80 бит

ДОПК – 25 бит

Декодирование

  1. Пока не конец входного потока выполнять

    1. Установить указатель текущей вершины в корень дерева

    2. Пока текущая вершина не лист выполнять

      1. Читать бит входного потока

      2. Спуститься в дочернюю вершину по дуге разметка, которой совпадает со считаным битом

      3. Сделать вершину текущей

    3. Отправить символ соответствующий листу в выходной поток.

Проблемы практического применения алгоритма Хаффмана.

  1. Необходимость дополнительного просмотра файла для построения таблицы частот.

  2. Увеличение объема сжатого файла за счет модели кодирования

    1. Модель дерева

    2. Таблица частот

    3. Вектор длин поля

Максимальная длина кода байта.

Оптимальная передача модели кодирования

Применение алгоритма Хаффмана увеличивает размер сжатого файла на длину словаря.

  1. Проблема кода переменной длины.

3.1. Переменная длина

3.2. Выравнивание байта

Передать декодеру длину входного потока кодера.

Включить в набор символов исходной кодировки включить фиктивный символ с нулевой частотой.

Основы теории вычислительной сложности алгоритмов.

Принципы оценки сложности алгоритмов.

Оценка эффективности должна формулироваться в машинно-независимых терминах. Такой машинно-независимой единицей является элементарная операция.

Оценка вычислительной эффективности вычисляется для худшего случая.

Можно оценивать эффективность в терминах размерности задач.

Оценка эффективности строится для разумно большого кол-ва элементов данных.

Методика построение оценки эффективности по коду программы.

Шаг 1. Исключаем из рассмотрения линейные участки (не содержащие явных и скрытых циклов).

Шаг 2. Из оценки исключаются циклы кол-во повторений, которых не зависит от размерности задачи.

Шаг 3. Если кол-во повторений цикла линейно зависит от размерности задачи (n) то эффективность такого цикла является линейной.

Шаг 4. Циклы, при выполнении которых размерность задачи кратно уменьшается, имеют логарифмическую зависимость.

Шаг 5. Оценка эффективности последовательных циклов складывается. Оценки эффективности вложенных циклов перемножаются.

Шаг 6. Упрощение полученной функции от размерности задачи n. именно в соответствии с шагом 3 исключаем коэффициенты и составляющие оценки высоких порядков малости.

Порядковая оценка.

Пример 1.

Пузырьковая сортировка.

N(N-1)/2

O(N2)

Пример 2.

Задача коммивояжёра.

Для нахождения кратчайшего цикла Гамильтона необходимо построить все перестановки на множестве вершин V. Для всех перестановок на V:

Вычислить длину цикла.

Если длина цикла меньше минимальной запомнить цикл.

O(N!)

Пример 3.

Задача о двоичном векторе.

AX=B где X – двоичный вектор

Найти X

Задача решается полным перебором всех чисел двоичного числа n.

  1. Если двоичное число является решением выйти из цикла.

O(2n)

Пример 4.

Бинарный поиск

  1. Задать верхнюю и нижнюю границу поиска

  2. Пока адресное пространство существует выполнять

    1. Вычислить середину адресного пространства

    2. Если ключ поиска совпадает с ключом в середине то вернуть адрес иначе

    3. Если ключ в середине больше ключа поиска то изменить верхнюю границу иначе изменить нижнюю.

Экспоненциальный алгоритм при кратном повышении мощности вычислителя позволяет увеличивать размерность задачи на фиксированную величину.

Оптимизационные и опознавательные задачи.

Оптимизационная задача это задача поиска варианта решения из множества вариантов наилучшего в смысле заданного критерия.

Распознавательная задача это задача дающая ответ на вопрос является ли предложенный вариант оптимальным.

Каждая оптимизационная постановка имеет распознавательный эквивалент.

  1. Для всех вершин I от 1 до n выполнять

    1. Для всех вершин j != I выполнять

      1. Удалить ребро I j из графа

      2. Если в изменённом графе отсутствует кратчайший цикл то вернуть его на место. (Распознавательная задача)

Решение задач оптимизационной.

Задача оптимизации полиноминально сводиться к задаче оптимизации.

Если задача А полиноминально сводится к задаче B то оценка эффективности решения задачи А отличается от оценки эффективности задачи B полиноминальным множителем.

Если существует эффективный алгоритм решения распозновательной задачи то существует и эффективный алгоритм решения распознавательной задачи.

P и NP классы эффективности.

НП – алгоритмы это алгоритмы которые решаются за премиуминальное время при условии неограниченного распаралеливаования.

Задачи оптимизации на графах.

Подходы к решению:

  1. Перебор – алгоритм исчерпывающего и ограниченного перебора.

  2. Приближенный методы оптимизации.

  3. Эффективные алгоритмы.

Алгоритмы исчерпывающего перебора.

Поиск в глубину и поиск в ширину.

В стратегии перебора отличается последовательностью порождения допустимых вариантов.

В стратегии поиска в глубину для каждого текущего состояния выбирается допустимое состояние приемника до тех пор пока очередное состояние не окажется целевым или тупиковым, в этом случае инициируется процесс возврата при котором пересматривается вариант продолжения для последнего состояния его предшественников.

Стратегия поиска в ширину для каждого текущего состояния рассматривает все возможные состояния–продолжения в порядке очереди.

Пример.

Поиск пути между парой заданных вершин графа.

Рисунок графа

Найти все возможные варианты пути из вершины 3 в вершину 6.

Мы находимся в вершине 3.

Стратегии поиска в глубину и ширину отличаются только порядком исследования допустимых состояний. Обе стратегии имеют одинаковую вычислительную эффективность. Обе неэффективны но только в том случае когда речь идет об исчерпывающем поиске, если требуется найти первый допустимый вариант решения такие стратегии становятся эффективными. Прием решения задач оптимизации с применением стратегии исчерпывающего перебора называется погружением задач в стратегию исчерпывающего поиска. Эти стратегии могут быть реализованы с использование абстрактных типов данных.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]