• Главная
  • Скачать
  • Контрольная Решение задач с использованием хеш-функций


    Предмет: Программирование. Добавлен: 13.11.2020. Год: 2018. Страниц: 9. Оригинальность по antiplagiat.ru: 20%

    A. Хеш-функция
    В задачах поиска часто используются так называемые хеш-функции. Хеш-функции могут определяться самым разнообразным образом — например, так:
    • Вначале число возводится в квадрат.
    • Если полученное число имеет три и более цифр, то первая и последняя его цифры отбрасываются.
    • Ответом будет остаток от деления числа на M (где M – заданное заранее значение).
    Рассмотрим пример. Пусть M = 10, входное число = -37.
    1. Возводим в квадрат: ?-?372?=?1369.
    2. Число имеет более двух цифр, поэтому отбрасываем первую и последнюю цифру — получаем 36.
    3. Берём остаток от деления на M — получаем ответ 6.
    Реализуйте вычисление такой хеш-функции и вычислите её для каждого из N входных чисел.
    Входные данные
    В первой строке входных данных записаны два целых числа M и N (1???M,?N???105).
    Во второй строке записаны N целых чисел, для каждого из которых вы должны сосчитать и вывести значение хеш-функции. Все числа не превышают по модулю 109.
    Выходные данные
    Выведите N целых чисел — ответы.
    Пример
    входные данные
    10 5
    -37 37 5 2 -352145261
    выходные данные
    6 6 5 4 2
    Код программы:
    #include ‹iostream›

    using namespace std;

    long long hash_function(long long a,int m){
    a *= a;
    if (a›99){
    long long p = 1;
    while (a / p › 9) p *= 10;
    a = a % p;
    a = a/10;
    }
    return a%m;
    }
    int main()
    {
    int n,m;
    long long a;
    cin ›› m;
    cin ›› n;
    for (int i = 0;i‹n;i++){
    cin ›› a;
    cout ‹‹ hash_function(a,m) ‹‹ " ";
    }
    }
    Описание программы: процедура hash_function реализует заданный алгоритм хеширования: возводит число в квадрат, если число больше 100, то удаляет первую и последнюю цифры, выводит остаток от деления на m.


    B. Хеширование с цепочками
    Одним из эффективных способов реализации множеств в памяти компьютера является хеш-таблица.
    Вставка нового элемента в хеш-таблицу начинается с вычисления хеш-функции от ключа. Получающееся значение является индексом в хеш-таблице. В данной задаче используется простейший вариант хеш-функции: h(x)?=?x mod M (где M – размер хеш-таблицы).
    Заметим, что возможна ситуация, когда для разных ключей хеш-функция даст одно и то же значение. Такая ситуация называется коллизией. Одним из способов разрешения коллизий является метод цепочек: элементы множества, которым соответствует одно и то же хеш-значение, связываются в цепочку — связный список.
    На рисунке показан пример результирующей хеш-таблицы после вставки последовательности чисел 75, 66, 42, 192, 91, 40, 49, 87, 67, 16, 417, 130, 372, 227 в хеш-таблицу размера M?=?10...
    Описание алгоритма: выполняется цикл, пока полиномиальная функция не станет равна v, внутри цикла идет подбор сроки t. Подбор осуществляется следующим образом: процедура next каждый раз увеличивает последний элемент строки на 1,если значение стало равно 9, то переходит к предыдущему и действует точно также, если
    Перейти к полному тексту работы