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

PERFECT HASH FUNCTION

28.10.2013, 00:56. Просмотров 552. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.10.2013, 00:56
Ответы с готовыми решениями:

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

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...

Семантика перемещения и perfect forwarding
Спасибо автору статьи http://www.cyberforum.ru/blogs/174410/blog826.html Но...

Многофайловая программа, ошибка: unresolved external symbol 'symbol' referenced in function 'function'
1 файл header #pragma once #ifndef LIST_1_ #define LIST_1_ template...

Hash+++
Скажите пожалуйста где скачать Hash subj и Hash on coure it

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

Без коллизий -- умножением.
Если у вас латинский алфавит, то у вас 26 вариантов заглавной буквы и 10 вариантов цифр.
Итого 26 * 10 * 10 * 10 * 26 * 26 = 17576000.
В четыре байта влезет.
1
Warezovvv
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
lemegeton
2933 / 1362 / 467
Регистрация: 29.11.2010
Сообщений: 2,725
28.10.2013, 10:31 4
Ваша функция явно предполагает, что int состоит из четырех байт, потому что в два байта число 77813 уже не лезет. Почему-б тогда не сделать хэширующую функцию без коллизий!?

А кто такой kNumBuckets? Если это "количество корзин" в каком-либо хранилище, использующем хэши, то ему не место в хэширующей функции.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2013, 10:31

Почему возникает ошибка "function returning function is not allowed"
Подключаю заголовочный файл .dll библиотеки, возникают ошибки #pragma once ...

Std::hash<.>
а для чего конкретно он применяется? читал на с++/reference, не особо понял...

hash строк
Доброго времени суток! =) Зачем: Для игры понадобилась база данных стандартных...


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

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

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