powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / хэширование. Вопрос.
9 сообщений из 9, страница 1 из 1
хэширование. Вопрос.
    #33840039
/dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется массив строк (очень много). Нужно создать по каждой строке хэш-код с помощью хэш-функции, причем хэш-функция (неважно какая) должна выдавать хэш-код всего 10 видов (напр., от 0 до 9). Соответсвенно каждая строка в массиве должна будет содержать хэш-код из этих 10 видов (напр., йцк - 2; ew - 4, 457 - 3, wr - 23 и т. д.). Распределение всех строк по хэш-кодам должно быть равномерное.
Кто знает как реализовать хэш-функцию такого типа? Буду премного благодарен.
...
Рейтинг: 0 / 0
хэширование. Вопрос.
    #33840075
AlexTheRaven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сам не реализовывал, но т.к. у нас страна советов - посоветовать могу.
1) Почитать про какую-нибудь конкретную, уже реализованную хеш-функцию, определить, какое минимальное и максимальное значение она может выдавать в данной реализации.
2) Разделить интервал допустимых значений хеш-функции на 10 подинтервалов одинаковой длины. Назначить каждому подинтервалу число от 0 до 9 - хеш-код.
3) При попадании значения хеш-функции в подинтервал - выдавать соотв. хеш-код.
...
Рейтинг: 0 / 0
хэширование. Вопрос.
    #33840141
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Удачность хэш-функции существенно зависит от данных, с которыми ей предстоит работать. Скажем, довольно неплохим для общего случая решением будет рассмотреть первые четыре байта строки как число и взять остаток от его деления на 10. Но если случайно окажется, что первые четыре символа чаще всего - "ЗАО ", "ТОО ", "ООО " - подход окажется малость неудачным.
...
Рейтинг: 0 / 0
хэширование. Вопрос.
    #33840159
/dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Самый главный вопрос у меня состоит в том, чтобы данная хеш-функция не только определяла для каждой строки хеш-код, а чтобы в итоге прогона хеш-функции для всех строк к каждому хеш-коду относилось примерно равное количество строк. Например, имеется 80000 строк. Имеется 10 возможных хеш-кодов (напр, 0,1,2,3,4,5,6,7,8,9). В итоге должно получится, чтобы к каждому хеш-коду было привязано равное количество строк (примерно), т.е. 8000 к 0, 8000 к 1, 8000 к 2 и т.д. Это конечно в идеале. Но желательно, чтобы разброс был не более чем на 2000 (если рассматривать данный пример). Напр., 7000 к 0, 8500 к 1, 9000 к 2 , 7500 к 3 и т.д.
...
Рейтинг: 0 / 0
хэширование. Вопрос.
    #33840215
/dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извиняюсь за опечатку, 23 - это опечатка.
Конечно можно создать какую-либо функцию, которая берет несколько бит из строки и потом брать остаток от деления этих бит на 10, в итоге мы получим привязку всего к 10 хеш-кодам, но привязка будет не равномерной, т.е. 20000 строк будет привязано к хешу - 0, 30000 - к хешу 1, 2000 к 2, 10000 к 3 и т.д. А мне нужно равномерное. Спасибо.
...
Рейтинг: 0 / 0
хэширование. Вопрос.
    #33840266
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм. У меня такое ощущение, что Вы пытаетесь решить задачу в бессмысленной постановке.

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

Полагаю, Вы можете сказать, что "всех одинаковых строк" у Вас не будет. Отлично - это то, что нужно. Это предположение о данных, которые Вы собираетесь хэшировать. Чем больше таких предположений Вы можете назвать - тем легче будет найти хэш-функцию, которая даст статистически хороший результат для этих данных.

Можно, конечно, поставить задачу динамического подбора хэш-функции - то есть, получая на вход конкретный массив данных, собирать статистику по этим данным и подбирать хэш-функцию (коэффициенты итп), хорошо работающие с этим массивом. Но весьма сомневаюсь в том, что это будет оправдано в Вашем случае.
...
Рейтинг: 0 / 0
хэширование. Вопрос.
    #33842251
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
/devИмеется массив строк (очень много). Нужно создать по каждой строке хэш-код с помощью хэш-функции, причем хэш-функция (неважно какая) должна выдавать хэш-код всего 10 видов (напр., от 0 до 9). ...
Кто знает как реализовать хэш-функцию такого типа? Буду премного благодарен.

Например - суммирование всех символов строки в один байт (переполнение игнорируется). Вопрос в другом - чтобы распределение было бы равномерным. Это уже зависит от того, какие у тебя строки и с какой частотой каждый из возможных символов где встречается.
...
Рейтинг: 0 / 0
хэширование. Вопрос.
    #33842260
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, правильно здесь сказали - не бывает универсально хорошей хэш-функции. Вы берете конеретные данные и по ним строите конкретные функции.

Абсолютно универсальные хэши - это из задач типа криптологии. Там сложно все.
...
Рейтинг: 0 / 0
хэширование. Вопрос.
    #33846184
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Знаете, такое чуство, что Вы пытаетесь засунуть square pegs в round holes. Зачем Вам хэш? Ну разбейте весь свой массив на 10 равных частей и присвойте всем строкам из первой группы 0, из второй 1, и т.д. В чем проблема то?
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / хэширование. Вопрос.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]