Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
9 / 9 / 3
Регистрация: 09.12.2012
Сообщений: 219
1

PERFECT HASH FUNCTION

28.10.2013, 00:56. Показов 1348. Ответов 3
Метки нет (Все метки)

Вопрос таков, подскажите хэш функцию:
формат AcccAA- где A-заглавные буквы,c-цифры.
всего 1500 сегментов.
Мин сумма символов 339 и макс 441.
Т.Е. если мы будем складывать в тупую аски коды каждого из символов то получится что все они лягут в 339<ТУТ<441?
что означает что коллизий будет OVER9000.
C++
1
2
3
4
5
int HashFunc(string key){
        int    Adress = (key[0] + key[1] + key[2] + key[3] + key[4] + key[5]);
 
        return Adress;
    }
Пока она такая ,но хочется что бы элементы ложились от 0<ТУТ<1499

Добавлено через 1 час 41 минуту
UPPPPP
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.10.2013, 00:56
Ответы с готовыми решениями:

Hash Function Efficiency v0.1 pre-Alpha (May 11th, 2017)
Вот код, для наглядности (cyberforum.ru - не сохраняет оригинал кода! может не компилироваться) ...

Ucoz hash pass to phpbb hash pass
в ucoz выглядит так пароль: $1$d9gE$qArqNHo6j6jBcey9gGCkZ. в phpbb:...

Past Perfect
В Мерфи в качестве примера приводится предложение: At first I thought I'd done the right thing,...

Pixel perfect
Почему на одном ПК Pixel perfect показывает ровно, а на другом небольшое смешение (тестирую один и...

3
3379 / 1587 / 552
Регистрация: 29.11.2010
Сообщений: 3,263
28.10.2013, 01:21 2
Цитата Сообщение от Warezovvv Посмотреть сообщение
но хочется что бы элементы ложились от 0<ТУТ<1499
Непонятная фраза.

Без коллизий -- умножением.
Если у вас латинский алфавит, то у вас 26 вариантов заглавной буквы и 10 вариантов цифр.
Итого 26 * 10 * 10 * 10 * 26 * 26 = 17576000.
В четыре байта влезет.
1
9 / 9 / 3
Регистрация: 09.12.2012
Сообщений: 219
28.10.2013, 01:50  [ТС] 3
C++
1
2
3
4
5
6
7
int address = key[0] + 
              31 * key[1] + 
              137 * key[2] + 
              1571 * key[3] + 
              11047 * key[4] + 
              77813 * key[5];
return address % kNumBuckets;
Лично я сделал так. может кому поможет
0
3379 / 1587 / 552
Регистрация: 29.11.2010
Сообщений: 3,263
28.10.2013, 10:31 4
Ваша функция явно предполагает, что int состоит из четырех байт, потому что в два байта число 77813 уже не лезет. Почему-б тогда не сделать хэширующую функцию без коллизий!?

А кто такой kNumBuckets? Если это "количество корзин" в каком-либо хранилище, использующем хэши, то ему не место в хэширующей функции.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.10.2013, 10:31

Function or interface marked as restricted, or the function uses an Automation type not supported
Добрый день! Столкнулась с неожиданной проблемой: Объявляю переменные для программы...

FUN must be a function, a valid string expression, or an inline function object
Здраствуйте, нужна помощь. clear all; close all; Scr_data_C; Scr_data_L; fv = 10:10:10000;...

FUNCTION new.COUNT does not exist. Check the 'Function Name Parsing and Resolution' section in the Reference Manual
Ругаеться на COUNT , что тут не так ? $result = mysql_query(&quot;SELECT COUNT (`model`.`cat_id`) FROM...

C:\Dev-Cpp\lib\vector.h `ostream' is neither function nor member function; cannot be declared friend
выкидывает C:\Dev-Cpp\lib\vector.h `ostream' is neither function nor member function; cannot be...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.