- •Поиск и включение для деревьев
- •Исключение из деревьев
- •Сбалансированные деревья
- •Включение элементов в сбалансированное дерева.
- •1 Случай
- •2 Случай
- •Исключение из балансированного дерева (авл)
- •Критерии и оценки алгоритма. Общие методы.
- •Асимптотические характеристики
- •Роль и методы в снижении трудоемкости решения задачи
- •Структура данных для описания решетки.
- •Частные характеристики качества алгоритмов
- •Увеличение быстродействия программ
- •Хеширование
- •Хеш таблицы.
- •Хеш функции
- •Двойное хеширование
- •Идеальное хеширование
- •Алгоритмы для работы с графами
- •Деревья поиска в ширину
- •Поиск в глубину
- •Стягивающие или остовные деревья
- •Минимальное остовное дерево
- •Эйлоровый цикл
- •Гомельтоновый цикл
- •Кротчайшие пути в ориентированных графах.
- •Комбинаторика
Увеличение быстродействия программ
Схема проектирования:
сравнения алгоритмов
Выбор метода
Выбор структур данных
Уровень алгоритма
Увеличение локальности
уроверь алгоритм а уровень программы
Детализация алгоритма и структур
С продвижением по схеме, доля общего выигрыша, определяемая разумным выбором, обычно уменьшается. Рассмотрим приемы рационального кодирования.
Рекомендации:
Уменьшение времени, на скрытые операции с памятью; отказ от рекурсии и увеличение локальности алгоритмов, избегать передачи больших структур по значение в подпрограммы.
Избегайте частых обращение к системе динамической памяти
Учет средней длительности вычисления арифметических операций: известно, что умножение и деление вычисляется медленнее остальных операций. Деление от 2-5 раз медленнее умножения.
Ci=jk=
For j:=1 to N do For k:=1 to N do C[j,k]:=(a[j,k]+b[j,k])/d[j]
For j:=1 to N do begin M=1 |d[j] for k:=1 to N do C[j,k]:=(a[j,k]+b[j,k])*M
Как правило критическая часть программы сосредоточена в циклах вынося из цикла действия, которые можно делать до или после или отложить до вычисления цикла.
Чистка выражения – удаление алгоритмов; которые часто попадаются в цикле.
S:=d; j:=0; x:=5; repeat inc (j); s:=S+F(x,i); until F(x,j)<=0,001
Repeat inc (i); M:=F(x,i); if H<0,001 then break
Сокращения числа вспомогательных действий цикла.
Например, используем Барьер, на границе массива устанавливают предельный элемент. Затем цикл можно объединить если управление ими приводится к одному виду.
Предварительная обработка данных, дополнительная структуризация. Например, для упрощения бинарного поиска необходимо отсортировать.
Хеширование
Получение адреса по ключу. На поиск хеш таблицы тратится столько же времени сколько и на размещение там. Проблема в том, чтобы выделить массив размера достаточного, для того чтобы каждому возможному элементу(ключу имелась своя ячейка).
Задача: необходимо найти отображение при хешировании H ключей в адреса их размещения. Мы должны иметь функцию, которая позволит реализовать такое отображение. Полученное с помощью хеш функции таблицы – хеш таблицы. Основная сложность, связанная с преобразованием ключей состоим в том, что множество возможных значений ключей всегда значительно шире, чем множество допустимых адресов памяти. (Индексы массивов) Тогда альтернативой по отношению к таблицам с прямой адресацией. Альтернативой становится хеш таблица, которая обычно использует массив пропорциональной количеству реально хранящихся ключей.
Пр. Возьмем в качестве ключей имена содержащий до 16 букв. Эти имена идентифицируют в 1000n возможных индексов. 26^16 возможных ключей. Отобразить с 1000 возможных индексов. Функция H много значений в одном.
Если есть ключ к то сначала вычисляем связанный с ним индекс, а затем проверяем действительно ли в ячейке с этим индексом есть ключ к. Если ключа нет, значит был конфликт. Нет, необходимо построить дальнейшую трассу поиска заданного ключа.
Ситуация, когда в указанном месте нет ключа - называется конфликтом. Т.е. при размещении нескольких ключей, далее одинаковые хеш значения. Т.е. один и тот же индекс в хеш таблицы. Методы формирования вторичного индекса – это разрешение конфликта.
Таблица с прямой адресацией.
Пусть имеется динамическое множество ключей
U{0,1,..,m-1} m не велико по отношению к размеру памяти. ?. для представления динам множество используют массив или таблицу с прям адресацией, обозначают T[0..m] m – размер хеш таблицы.
U
Состав 1) Поиск 2) Вставка 3) Удаление
Addres_search (T,k) return T[k] Addres_insetr (T,x) T[x,k]<- x
Adress_delete (T,x) T[x,k]<-Nil
Время работы каждой из этой операции пропорционально времени одного шага.