LINUX.ORG.RU

Реализация хэш-таблицы на C.


0

2

По сабжу нашёл uthash, который в принципе подходит. Дело только в том, что ключом хэш-таблицы должен быть массив точек (x,y), и поэтому интересен хэш для массива вещественных числе, или целых, что в принципе одно и то же.

★★★★

Последнее исправление: aptyp (всего исправлений: 1)

думаю, тут проще использовать плюсовый map из stl и написать для него сишную обертку под свои нужды, если хочется уйти от плюсов

EugeneBas ★★
()
Ответ на: комментарий от cdshines

Проблема не в выборе хэш таблицы, дело уже в хэш-функции, и том, что gpl юзать нельзя.

aptyp ★★★★
() автор топика
Ответ на: комментарий от aptyp

Проблема не в выборе хэш таблицы, дело уже в хэш-функции, и том, что gpl юзать нельзя.

Так вопрос в реализации хэш-таблицы или в выборе хэш-функции?

twosev ★★
()
Ответ на: комментарий от unfo

Почему ничего нельзя? uthash можно. Вообще, замучу сейчас свой поиск со скоростью O(N), и всё)))

aptyp ★★★★
() автор топика

интересен хэш для массива вещественных числе

аналогичен хэшу для массива байт, итого можно брать crc32, md5 etc.

wota ★★
()
Ответ на: комментарий от aptyp

Вообще, замучу сейчас свой поиск со скоростью O(N), и всё)))

Хэш-таблица с линейным поиском - это сильно. :)

2 wota:

Плюcую md5!

unfo ★★★★★
()
Ответ на: комментарий от aptyp

А в случае, если будет массив целых, что делать?

тоже самое

wota ★★
()
Ответ на: комментарий от aptyp

Умеет хэш от любой строки, очень низвкая вероятность коллизий. Формируешь строку из массива, берешь от нее md5-хэш.

unfo ★★★★★
()
Ответ на: комментарий от aptyp

Скастовать массив в char* и скормить хэш функции, работающей с массивом байт (как собственно wota написал).

invy ★★★★★
()
Ответ на: комментарий от invy

А какая вероятность коллизий будет после md5 % tableSize ?

Для MD5 скорее всего будет 1 / tableSize. Просто посмотри на своих данных. Некоторые хеш-функции дают равномерное распределение вероятности коллизий только если tableSize простое число. Вообще покури третий том Кнута.

anonymous
()

А если библиотека под GPL, то даже динамически линковать с проприетарным кодом ее нельзя?

rand
()

В libc уже есть готовое: hcreate, hsearch, hdestroy.

beastie ★★★★★
()
Ответ на: комментарий от invy

это и дураку ясно. я всего лишь предложил концепцию для решения задачи.

nanoolinux ★★★★
()
Ответ на: комментарий от nanonymous

Ну путает человек ассоциативные массивы и хэш-таблицы.

Разве это не одно и тоже ?

#Perl любитель.

joy4eg ★★★★★
()
Ответ на: комментарий от nanonymous

Так... ща... map использует сравнение ключей прямиком, чтобы запихивать их в дерево, а не прогоняя их сначала через хеш-функцию?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.