Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Проблема с хешированием для записи в файл.


Автор: Knorkator 26.11.2006, 21:26
Добрый день.
Мне требуется создать хеш-функцию для хранения записей в файле в сортированном виде. Хеш функцию связать с кодами первых 3 символов первого элемента структуры. Всего элементов 3, состоят из char [20];
И не мог бы кто нибудь дать мануалы по хешированию, огромный пробел в этом smile
Без использования СТЛ smile

Автор: Daevaorn 26.11.2006, 21:48
Knorkator, 
http://en.wikipedia.org/wiki/Hash_function
Посмотри тут. Обрати внимание на ссылки

Автор: Knorkator 26.11.2006, 22:09
Как создать уникальный индекс трех букв, тупо складывать/умножать/делить/вычитать аски коды врядли прокатит smile остальное по идее просто.

Автор: Earnest 27.11.2006, 16:46
Хэширование в некотором смысле противоположно сортировке.
Если тебе нужна именно сортировка по трем буквам... ну и используй их (первые 3 символа). Хотя это поганая практика. Точно также как и использовать их для хэширования. Если тебе нужна функция для построения хэша строки - кто мешает, не использую STL, списать из нее код?
И уникальность под большим сомнением. Хэш в принципе никакой уникальности не гарантирует.

Автор: MAKCim 27.11.2006, 17:01
Цитата

Как создать уникальный индекс трех букв

Код

static inline unsigned long partial_name_hash(unsigned long chr, unsigned long prevhash) {
    return (prevhash + (chr << 4) + (chr >> 4)) * 11;
}

unsigned long hash_name(const char* str) {
    unsigned long hash = 0;
    for (; *str != '\0'; ++str) 
        hash = partial_name_hash(*str, hash);
}

хэш взят из linux kernel sources  smile 
можешь сам посмотреть (http://www.linux-m32r.org/lxr/http/source/fs/namei.c#L810)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)