- •Понятие «сортировка». Устойчивость сортировки.
- •Задача сортировки.
- •Понятие «ключевое поле» в сортировке.
- •Понятие внутренней сортировки.
- •Понятие внешней сортировки.
- •Причины изучения алгоритмов сортировки.
- •Группы алгоритмов внутренней сортировки.
- •Основные идеи методов сортировок с помощью вставок.
- •2)Улучшение метода простых вставок:
- •Сортировка методом простых вставок.
- •Основные идеи методов сортировок с помощью выбора.-min эл.
- •Сортировка с помощью метода прямого выбора.
- •Основные идеи методов сортировки с помощью обмена.
- •Сортировка методом Шелла.
- •Быстрая сортировка.-разобрать
- •Понятие эффективности алгоритмов и программ.
- •Виды эффективности алгоритмов программ.
- •Порядок сложности алгоритма.
- •Понятие «доминирующая» функция, «асимптотически доминирующая» функция.
- •Правила определения сложности функции.
- •Доминирование функций друг над другом.-разобрать хрень!!!
- •Понятие алгоритма полиноминальной сложности.
- •Понятие алгоритма неполиноминальной сложности.
- •Вопрос 27.
- •Проблемы реализации np-сложных алгоритмов.
- •Вопрос 27.
- •Соответствие между скоростью выполнения алгоритма и его сложностью.
- •Анализ лучшего, худшего и среднего случаев поведения алгоритма.
- •31* Ограниченность о-анализа.
- •Пространственная сложность программы.
- •Взаимосвязь различных типов сложности.
- •Контрольные замеры.
- •Файлы. Их организация и обработка.
- •Стоимость операций с вторичной памятью.
- •Внешняя сортировка. Особенности внешней сортировки.
- •Понятие «серия», «слияние», «хвост», «фаза», «этап» в алгоритмах внешней сортировки.
- •38* Алгоритм 2-х фазной сортировки прямым слиянием.
- •Алгоритм однофазной сортировки прямым слиянием.
- •Алгоритм сортировки «естественным слиянием».
- •Ускорение сортировок прямым слиянием.
- •Задача поиска.
- •Классификация методов поиска.
- •Связь задач сортировки и поиска.
- •Последовательный поиск.
- •Быстрый последовательный поиск.
- •Последовательный поиск в упорядоченной таблице. Поиск путем сравнения ключей.-херня!
- •Бинарный поиск. Интерполяционный поиск.
- •Хеширование Выбор хеш-функций.
- •Хеширование. Разрешение коллизий.
Хеширование Выбор хеш-функций.
Хеширование.
Метод адреса или методы рассеянной памяти, преобразование ключа в адрес.
Идея хеширования состоит в использовании некоторой частичной инфы, полученной из ключа в качестве основы поиска.
Исп. хеш-адрес, кот. исп. для проведения поиска.
Имеется память, состоящ. из m ячеек. Mj , 0 <= j <= m-1
Каждая яч. м. содержать 1 значение.
При некотором заданном значении j время обращения к mj постоянно и не зависит от m.
Методы с исп. хеширования исп. св-во памяти с произвольным доступом больше, чем все др. методы поиска.
b1… bn k1… kn
h(k)
b1 k1 -> h(k1)
Данный метод поиска основан на том, что эл., явл. аргументом поиск, т.е. k, м.б. исп. в кач. индекса для массива.
ki <> kj h(ki) = h(kj) - коллизия
Для ее разрешения сущ. методы.
Для исп. хеширования нужно решить 2 задачи, кот. решаются независимо друг от друга.
нужно выбрать хеш-функцию
нужно выбрать способ разрешения коллизии.
Выбор хеш-функции
Идеальная хеш-функция – кот.
быстро вычисляется (часто зависит от особенностей компа)
отображает пространство имен в пр-во адресов равномерно рассеивая имена по памяти. Т.е. число коллизий д.б. минимально. (часто зависит от особенностей данных)
Стремиться надо к построению такой ф-ции, кот. будет равномерно рассеивать по памяти те подмножества записей, кот. могут встретиться.
На практике такое сделать сложно.
Любая разумная хеш-функция будет удовлетворительно работать на большинстве мн-ва имен. В т.ж. время для любой самой хорошей хеш-функции сущ. мн-во имен, на кот. она работает плохо.
Для быстрого вычисления хеш-адресов большинство хеш – функций близки к примитивным операциям, кот. допустимы для ЭВМ и они лучше описываются на уровне операций над двоичными наборами представлениях имен и адресов.
Пример:
Нужно найти хеш-функцию для некоторой статической таблицы, когда известно ее содержимое. Допустим, нам нужно разместить в памяти 5 слов и предположим, что каждая буква представлена 5-разрядным кодом.
c1 c2 c3 c4 c5 | c6 c7 c8 c9 c10
AN 0 0 0 0 0 | 0 1 1 0 1 0 AT 0 0 0 0 0 | 1 0 0 1 1 1
NO 0 1 1 0 1 | 0 1 1 1 0 2
ON 0 1 1 1 0 | 0 1 1 0 1 4
PI 0 1 1 1 1 | 0 1 0 0 0 6
h(k) = (c4c5c6)10/c/c
Хеширование. Разрешение коллизий.
49й вопрос +
Разрешение коллизий
Сущ. 2 распростр. способа.
метод цепочек
метод открытой адресации
Метод цепочек:
b1… bn k1… kn h(k) Может возникнуть коллизия.
Некоторые хеш-адреса м.б. одинаковыми для различных ключей. Самый очевидный путь – поддержка связных списков, по 1 для каждого хеш-кода.
После хеширования ключа выполняется последовательный поиск в списке с соответствующим адресом. Для наиболее быстрого поиска в списке его желательно хранить в отсортированном виде.
Метод открытой адресации:
когда по данному ключу k определяется пробная последовательность, т.е. последовательность позиций таблицы, кот. надо просмотреть.
Их просматривают до тех пор, пока не будет найден ключ К или пустая позиция. Если встречается пустая позиция, то делается вывод о том, что ключ в таблице отсутствует. В рамках этого подхода сущ. несколько алгоритмов.
