Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции / Struktury.docx
Скачиваний:
37
Добавлен:
04.04.2018
Размер:
2.84 Mб
Скачать

Увеличение быстродействия программ

Схема проектирования:

  сравнения алгоритмов

Выбор метода

Выбор структур данных

Уровень алгоритма

Увеличение локальности

уроверь алгоритм а уровень программы

Детализация алгоритма и структур

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

Рекомендации:

  1. Уменьшение времени, на скрытые операции с памятью; отказ от рекурсии и увеличение локальности алгоритмов, избегать передачи больших структур по значение в подпрограммы.

  2. Избегайте частых обращение к системе динамической памяти

  3. Учет средней длительности вычисления арифметических операций: известно, что умножение и деление вычисляется медленнее остальных операций. Деление от 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

  1. Как правило критическая часть программы сосредоточена в циклах вынося из цикла действия, которые можно делать до или после или отложить до вычисления цикла.

Чистка выражения – удаление алгоритмов; которые часто попадаются в цикле.

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

Сокращения числа вспомогательных действий цикла.

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

  1. Предварительная обработка данных, дополнительная структуризация. Например, для упрощения бинарного поиска необходимо отсортировать.

Хеширование

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

Задача: необходимо найти отображение при хешировании 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

Время работы каждой из этой операции пропорционально времени одного шага.

Соседние файлы в папке Лекции