Автор работы: Пользователь скрыл имя, 14 Февраля 2013 в 00:30, курсовая работа
Цель курсовой работы рассмотреть закрытое хеширование, основные виды хеш-функций и некоторые их модификации, проблемы удаления элементов из хеш-таблицы, а также некоторые варианты применения хеширования.
Объектом исследования являются алгоритмы хэширования.
Предметом является программная реализация алгоритма хэширования.
Для достижения цели исследования поставим перед собой следующие задачи:
-рассмотреть закрытое хэширование;
-охарактеризовать основные понятия хэширования;
-разработать программную реализацию алгоритма закрытого хэширования.
const
n = 200; {общее количество множеств}
type
Tcollection = set of byte; {используем множества типа byte}
TsetOfCollect = array[1..n + 1] of Tcollection;
Tused = array[1..n + 1] of boolean;
var
totalEl : byte; {количество элементов в текущем множестве}
hashTable : TsetOfCollect;
used : Tused;
Программа работает с множествами, состоящими из типа данных byte. Есть массив множеств, состоящий из 201 элемента (200 - принятое количество множеств, но необходимо иметь массив длиной превышающей общее количество анализируемых данных, поэтому я взяла 201, т к удовлетворяем условию 201 > 200).
{заполняем различными значениями множестов состоящее из countEl элементов}
procedure fillSet(var currColl : Tcollection; countEl : byte);
var
currentValueEl : byte; {значение текущего одного элемента, текущего множества}
i : byte;
begin
for i := 1 to countEl do
begin
currentValueEl := i;
include(currColl, currentValueEl);
end;
end;
Затем процедурой fillSet заполняю каждое множество элементами, количество которых генерирую при помощи случайных чисел (а сами значения вбиваю от 1 до количества элементов). В хэш-таблице привязываюсь к индексу элемента (индекс равен количеству элементов множества), т е например получила что в текущем множестве 34 элемента -> заполнила его значениями от 1 до 34 и в массив множеств в элемент с индексом 34 записала данное множество. Если вдруг так получилось, что ранее уже было сгенерировано число 34, то двигаюсь вправо (т е к элементу 35) и проверяю, не занято ли эта позиция, если занята, то операция поиска вставки продолжается иначе текущее множество заполняется в массив множеств. Если достигнут конец массива, то начинается поиск вставки с самого первого элемента. Так как количество элементов массива больше общего количества анализируемых множеств, то место для вставки будет обнаружено всегда.
{заполняем массив имитирующий хеш - таблицу}
procedure fillHashTable(var currColl: Tcollection; index : byte);
var
i : byte;
begin
for i := index to (n + 1) do
begin
if(used[i] = false) then
begin
hashTable[i] := currColl;
used[i] := true;
break;
end;
if(i = (n + 1)) then
begin
i := 1; {переходим на начало массива}
end;
…
Процедура показывает, как можно произвести поиск множества по заданному количеству элементов этого множества.
var
i : byte;
collection : Tcollection;
begin
clrscr;
for i := 1 to n do
begin
collection := []; {обнуляем множество}
totalEl := random(255) + 1;
fillSet(collection, totalEl);
fillHashTable(collection, totalEl);
end;
В данном случае хэш-функцией является totalEl := random(255) + 1, так как максимальное количество элементов множества 255.
Следует иметь в виду, что описанная в этом разделе схема хеширования очень проста и на практике приходится применять более сложные схемы хеширования. Однако, основные принципы хеширования остаются неизменными.
2.2 Руководство
пользователя и результаты
В соответствии с ГОСТом 19.701-90 руководство пользователя должно содержит следующие разделы:
Общие сведения о программном продукте.
Программное приложение предназначено для поиска множества по заданному количеству элементов этого множества, то есть преобразование хэш-функции. В качестве пользователей могут выступать студенты, спец. преподаватели, программисты различного уровня.
Описание логической структуры.
После запуска программы перед пользователем появляется программное приложение, которое автоматически заполняет массив имитирующий хэш-таблицу.
Описание запуска.
Для того чтобы
запустить программу
-зайти в каталог, запустить файл с именем «Закрытое хэширование .pas»;
-если открытие программного приложения осуществляется непосредственно через Pascal, нужно нажать комбинацию клавиш Ctrl+F9;
-запустив программное приложение, выводится хэш-таблица с данными физического массива.
Рис. 4. Программная реализация
алгоритма закрытого
В хэш-таблице индекс равен количеству элементов множества, то есть массив заполнил его значениями (for i := 1 to 200) и в массив множеств в элемент с выбранным индексом записал данное множество.
Тестирование программы
Тестированием называется процесс выполнения программы с целью обнаружения ошибки, хотя никакое тестирование не может доказать полное отсутствие ошибок в программе (12: 72). Однако тестирование позволяет уменьшить (свести к минимуму) ошибки, допущенные при программировании.
В качестве стратегии тестирования будем использовать модульное тестирование.
Модульное тестирование — процесс в программировании, позволяющий проверить на корректность отдельные модули исходного кода программы.
Идея состоит в том, чтобы писать тесты для каждой нетривиальной функции или метода. Это позволяет достаточно быстро проверить, не привело ли очередное изменение кода к регрессии, то есть к появлению ошибок в уже оттестированных местах программы, а также облегчает обнаружение и устранение таких ошибок.
Цель модульного тестирования — изолировать отдельные части программы и показать, что по отдельности эти части работоспособны.
При тестировании данного продукта соблюдались следующие основные принципы:
Ниже в таблице приведены тесты готового программного продукта по принципу «Модульного тестирования»:
Таблица 1
Тестирование программного приложения
Номер Теста |
Назначение теста |
Значения исходных данных |
Ожидаемый результат |
Реакция программы |
Вывод |
1. |
Проверить правильность работы процедуры, компоновки множества элементов. |
Множество сгенерировано случайным образом. |
Построение массива по заданному алгоритму. |
Программное приложение генерирует множество, после чего выполняется операция поиска вставки элемента. |
Система правильно осуществляет построение массива. |
2. |
Проверить правильность работы хэш-функции. |
Данные выводятся автоматически на экран монитора. |
Вычисление индекса хеширования и вставка значения элемента. |
Выстраивается логическая цепь, которая показывает осуществление алгоритма закрытого хэширования. Наличие ошибок отсутствует. |
Приложение правильно выполняет заданную операцию. В результате тестирования ошибок не обнаружено. |
ЗАКЛЮЧЕНИЕ
Хеширование, которое родилось еще в середине прошлого века, активно используется в наши дни везде, где требуется произвести быструю выборку данных. Появились новые методы хеширования, новые модификации алгоритмов, написанных ранее. По мнению Дональда Кнута, наиболее важным открытием в области хеширования со времен 70 годов, вероятно, является линейное хеширование Витольда Литвина. Линейное хеширование, которое не имеет ничего общего с классической технологией линейной адресации, позволяет многим хеш-адресам расти и/или выступать в поли вставляемых и удаляемых элементов. Линейное хеширование может также использоваться для огромных баз данных, распределенных между разными узлами в сети.
Разумеется, методы и сферы применения хеширования не ограничиваются тем, что представлено в этой работе. Основное внимание в данной рабте уделено методу закрытого хеширования. Помимо них можно отметить полиномиальное хеширование (М. Ханан и др., 1963), упорядоченное хеширование (О. Амбль, 1973), линейное хеширование (В. Литвин, 1980). Подробнее о методах хеширования см.
В рамках выполнения данной работы была написана демонстрационная программа, которая, используя методы закрытого хеширования, создает хеш-таблицу и производит поиск по ней.
Программа предназначена для демонстрации применения алгоритма закрытого хеширования. Язык реализации – Паскаль.
Таким образом, цель курсовой работы была выполнена. Поставленные задачи полностью решены.
Список использованных источников
Приложение1
Техническое задание на создание программы
«Реализация алгоритм закрытого хэширования»
1.ВВЕДЕНИЕ
Настоящее техническое задание распространяется на разработку программы реализующей алгоритм закрытого хэширования.
Программа позволит графически отобразить методы трансформации.
2.ОСНОВАНИЯ ДЛЯ РАЗРАБОТКИ
Программа разрабатывается на основании темы курсовой работы в соответствии с учебным планом.
3.НАЗНАЧЕНИЕ
Программа предназначена для наглядного представления реализации алгоритма закрытого хэширования.
4.ТРЕБОВАНИЯ К ПРОГРАММЕ ИЛИ ПРОГРАММНОМУ ИЗДЕЛИЮ
4.1.Требования к
4.1.1.Программа должна обеспечить возможность выполнения следующих функций:
4.1.2.Исходные данные:
4.1.3.Результат:
4.2.Требования к надежности
4.2.1.Предусмотреть контроль вводимой информации
4.3.Требования к составу
и параметрам технических
4.3.1.Система должна работать на IBMсовместимых персональных компьютерах.
4.3.2.Минимальная
4.4. Требования к информационной и программной совместимости
Система должна работать
под управлением семейства
5. ТРЕБОВАНИЯ К ПРОГРАММНОЙ ДОКУМЕНТАЦИИ
5.1.Разрабатываемые
Информация о работе Программная реализация алгоритма закрытого хэширования