
- •Лабораторные работы по программированию "Структуры и алгоритмы обработки данных"
- •Задание к лабораторной работе
- •Варианты задания
- •Методические указания по выполнению задания
- •Задание к лабораторной работе
- •Варианты задания
- •Методические указания по выполнению задания
- •Задание к лабораторной работе
- •Варианты задания
- •Методические указания по выполнению задания
- •Задание к лабораторной работе
- •Варианты задания
- •Методические указания по выполнению задания
- •Задание к лабораторной работе
- •Варианты задания
- •Методические указания по выполнению задания
- •Методические указания по выполнению задания (окончание)
- •Задание к лабораторной работе
- •Варианты задания
- •Методические указания по выполнению задания
- •Литература
- •Хранение данных в файлах
- •Простая организация данных
- •Ускорение операций с файлами
- •Хешированные файлы
- •Хешированные файлы (окончание)
- •Индексированные файлы
- •Индексированные файлы (окончание)
- •Несортированные файлы с плотным индексом
- •Внешние деревья поиска
- •Разветвленные деревья поиска
- •Создание пустого б-дерева
- •Создание пустого б-дерева (продолжение)
- •Создание пустого б-дерева (продолжение)
- •Создание пустого б-дерева (окончание)
- •Сравнение методов
- •Формат атд
- •Формат атд (окончание)
- •Вариант 8:
- •Атд "Хеш-таблица с цепочками коллизий"
- •Атд "Хеш-таблица с цепочками коллизий" (окончание)
- •Атд "Хеш-таблица с открытой адресацией"
- •Атд "Хеш-таблица с открытой адресацией" (окончание)
- •Атд "Итератор"
- •Описание методики тестирования хеш-функции (определение статистики c2)
- •Описание хеш-функций
- •Результаты тестирования хеш-функции
- •Описание методики тестирования трудоемкости операций
- •Описание методики тестирования трудоемкости операций (окончание)
- •Сравнительный анализ теоретических и экспериментальных оценок эффективности операций
- •Литература
Атд "Итератор"
Данные:
Параметры: Ссылка на структуру данных Значение текущего ключа
Операции:
Конструктор: Вход: Ссылка на структуру данных, значение текущего ключа элемента, на который указывает итератор Предусловия: нет Процесс: Инициализация ссылки на структуру данных, установка текущего ключа Постусловия: итератор установлен Выход: нет
Оператор присваивания: Вход: Инициализированный итератор Предусловия: нет Процесс: Инициализация ссылки на структуру данных, установка текущего ключа Постусловия: итератор установлен Выход: нет
Переход к следующему элементу списка: Вход: нет Предусловия: итератор установлен не на конец таблицы Процесс: переход на следующий элемент таблицы Постусловия: итератор установлен на следующий элемент, либо итератор не установлен, если не выполнено предусловие Выход: нет
Оператор сравнения итераторов на равенство: Вход: инициализированный итератор Предусловия: нет Процесс: Сравнение текущего ключа данного итератора с ключом переданного итератора Постусловия: нет Выход: true, если ключи равны, false, если ключи не равны
Оператор сравнения итераторов на не равенство: Вход: нет Предусловия: нет Процесс: Сравнение текущего ключа данного итератора с ключом переданного итератора Постусловия: нет Выход: false если ключи равны, true если ключи не равны
Получение значения текущего элемента: Вход: нет Предусловия: Итератор установлен Процесс: Поиск значения элемента по ключу в таблице Постусловия: нет Выход: пара текущий ключ - текущее значение, ключ равен -1, если не выполнено предусловие
Описание методики тестирования хеш-функции (определение статистики c2)
Определение критерия c2 требуется для оценки эффективности хеш-функции. Она вычисляется по следующей формуле:
где P - количество ключей, использованных для получения распределения (в нашем случае P=20m),
m - размер хеш-таблицы,
fi - количество ключей с хеш-значением, равным i.
Таким образом, мы должны построить доверительный интервал для экспериментального значения статистики 2. Также определяется вероятность попадания данного экспериментального значения в построенный интервал. При тестировании мы должны обеспечить уникальность ключей.
Описание хеш-функций
В программе использовалась хеш-функция, осуществляющая свёртку ключа комбинированную с выбором определённого количества цифр из ключа. Свёртка производится следующим образом. Для представления ключа в виде 12-ти значного натурального числа используется тип 64 битного целого. При свёртке младшие 31 бит ключа и старшие 33 бита "складываются" логической операцией XOR и получается знаковое 32 битное целое число. Далее над этим значением производится выбор цифр.
Выбор цифр начинаестся с разной позиции, номер которой зависит от величины ключа, можно избежать большого числа совпадений хеш-значения для различных ключей. Хеш-функция выбирает цифры из числа, с определённым шагом, зависящим от количества цифр в числе и размера хеш-таблицы.
Для выбора позиции, с которой начинается выбор цифр в программе введены два критерия. Первый критерий - остаток от деления ключа на два, второй - остаток от деления ключа на три. Если ключ делится без остатка на два, то первая цифра отбрасывается, (нумерация цифр начинается с конца), после этого ключ проверяется по второму критерию - если деление на три даёт остаток два или не даёт остатка, то первая цифра снова отбрасывается. Возможно, эти критерии не оптимальны, но даже при таком способе выбора цифр для хеш-функции получается достаточно приемлемый критерий c2.