Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
хэширование. Вопрос.
|
|||
|---|---|---|---|
|
#18+
Имеется массив строк (очень много). Нужно создать по каждой строке хэш-код с помощью хэш-функции, причем хэш-функция (неважно какая) должна выдавать хэш-код всего 10 видов (напр., от 0 до 9). Соответсвенно каждая строка в массиве должна будет содержать хэш-код из этих 10 видов (напр., йцк - 2; ew - 4, 457 - 3, wr - 23 и т. д.). Распределение всех строк по хэш-кодам должно быть равномерное. Кто знает как реализовать хэш-функцию такого типа? Буду премного благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2006, 12:41 |
|
||
|
хэширование. Вопрос.
|
|||
|---|---|---|---|
|
#18+
Сам не реализовывал, но т.к. у нас страна советов - посоветовать могу. 1) Почитать про какую-нибудь конкретную, уже реализованную хеш-функцию, определить, какое минимальное и максимальное значение она может выдавать в данной реализации. 2) Разделить интервал допустимых значений хеш-функции на 10 подинтервалов одинаковой длины. Назначить каждому подинтервалу число от 0 до 9 - хеш-код. 3) При попадании значения хеш-функции в подинтервал - выдавать соотв. хеш-код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2006, 13:42 |
|
||
|
хэширование. Вопрос.
|
|||
|---|---|---|---|
|
#18+
Удачность хэш-функции существенно зависит от данных, с которыми ей предстоит работать. Скажем, довольно неплохим для общего случая решением будет рассмотреть первые четыре байта строки как число и взять остаток от его деления на 10. Но если случайно окажется, что первые четыре символа чаще всего - "ЗАО ", "ТОО ", "ООО " - подход окажется малость неудачным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2006, 15:13 |
|
||
|
хэширование. Вопрос.
|
|||
|---|---|---|---|
|
#18+
Самый главный вопрос у меня состоит в том, чтобы данная хеш-функция не только определяла для каждой строки хеш-код, а чтобы в итоге прогона хеш-функции для всех строк к каждому хеш-коду относилось примерно равное количество строк. Например, имеется 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 и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2006, 15:25 |
|
||
|
хэширование. Вопрос.
|
|||
|---|---|---|---|
|
#18+
Извиняюсь за опечатку, 23 - это опечатка. Конечно можно создать какую-либо функцию, которая берет несколько бит из строки и потом брать остаток от деления этих бит на 10, в итоге мы получим привязку всего к 10 хеш-кодам, но привязка будет не равномерной, т.е. 20000 строк будет привязано к хешу - 0, 30000 - к хешу 1, 2000 к 2, 10000 к 3 и т.д. А мне нужно равномерное. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2006, 16:07 |
|
||
|
хэширование. Вопрос.
|
|||
|---|---|---|---|
|
#18+
Хм. У меня такое ощущение, что Вы пытаетесь решить задачу в бессмысленной постановке. "Просто так" чудесной хэш-функции не бывает. Представьте себе, что Вы придумали хэш-функцию, которая даст нужный эффект. После этого приду злобный я, дам ей на вход массив из 80.000 одинаковых строк - и либо она распределит их существенно неравномерно, либо это не хэш-функция :) Полагаю, Вы можете сказать, что "всех одинаковых строк" у Вас не будет. Отлично - это то, что нужно. Это предположение о данных, которые Вы собираетесь хэшировать. Чем больше таких предположений Вы можете назвать - тем легче будет найти хэш-функцию, которая даст статистически хороший результат для этих данных. Можно, конечно, поставить задачу динамического подбора хэш-функции - то есть, получая на вход конкретный массив данных, собирать статистику по этим данным и подбирать хэш-функцию (коэффициенты итп), хорошо работающие с этим массивом. Но весьма сомневаюсь в том, что это будет оправдано в Вашем случае. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2006, 17:03 |
|
||
|
хэширование. Вопрос.
|
|||
|---|---|---|---|
|
#18+
/devИмеется массив строк (очень много). Нужно создать по каждой строке хэш-код с помощью хэш-функции, причем хэш-функция (неважно какая) должна выдавать хэш-код всего 10 видов (напр., от 0 до 9). ... Кто знает как реализовать хэш-функцию такого типа? Буду премного благодарен. Например - суммирование всех символов строки в один байт (переполнение игнорируется). Вопрос в другом - чтобы распределение было бы равномерным. Это уже зависит от того, какие у тебя строки и с какой частотой каждый из возможных символов где встречается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2006, 13:53 |
|
||
|
хэширование. Вопрос.
|
|||
|---|---|---|---|
|
#18+
Да, правильно здесь сказали - не бывает универсально хорошей хэш-функции. Вы берете конеретные данные и по ним строите конкретные функции. Абсолютно универсальные хэши - это из задач типа криптологии. Там сложно все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2006, 13:55 |
|
||
|
хэширование. Вопрос.
|
|||
|---|---|---|---|
|
#18+
Знаете, такое чуство, что Вы пытаетесь засунуть square pegs в round holes. Зачем Вам хэш? Ну разбейте весь свой массив на 10 равных частей и присвойте всем строкам из первой группы 0, из второй 1, и т.д. В чем проблема то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2006, 19:28 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=33842251&tid=1346718]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
71ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
| others: | 254ms |
| total: | 425ms |

| 0 / 0 |
