Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что такое хєш-функции, и с чем их едят 
:(
    Опции темы
Nastya
Дата 19.1.2004, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

Репутация: 5
Всего: 44



Ребята, я слышала только это загадочное слово (хєш-функции). Объясните в трех словах или кинте доку




--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
Sheff
Дата 20.1.2004, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 503
Регистрация: 25.3.2002
Где: Зеленоград

Репутация: 3
Всего: 3



Ну в общем эта фишка используется для быстрого поиска, кажись даже в qsort, короче есть хэш-функция и список, допустим надо забить список строками и так чтобы потом нужную строку можно было быстро найти. Делается следующим образом: Строка передаётся в хэш-функцию, обрабатывается и функция возвращает индекс в списке, туда и заносится строка. Вот пример хэш-функции:
Код

int Hash(const char *Key) //Хеш-функция
{
int i = 0;
for(int q = 0;( q < (int)strlen(Key) + 1);q++)
i = i + (q * Key[q]);
i = i % макс_к-во_элементов;
return i;
}

А как потом быстро найти эту строку ? Очень просто, просто передать её в хэш функцию, ну а та даст индекс, и не надо бегать по всему списку. Это я конечно объяснил в 3 словах как ты и просила, вообще при разработке хэш таблиц возникают такие вещи как коллизии и их нужно обрабатывать, но это уже отдельный разговор...


--------------------
--------------------------
Шеф всегда прав :)
PM MAIL WWW ICQ   Вверх
Sardar
Дата 20.1.2004, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 1
Всего: 317



Представь себе большой список. Поиск перебором очень медленный, потому используется фокус: хеширование, от английского to hash - делить.
Большой список делится на несколько маленьких списков, в которых нам легко найти требуемое. Есть хеш-функция "кидающая" обьект в некоторую кучу, т.е. получив обьект искать его надо в том маленьком списке на который укажет хеш-функция. Сама хеш-функция вычисляется очень быстро.
Самые большие споры в выборе хорошей хеш-функции, которая бы равномерно делила бы обьекты между маленькими списками.
В коде это вылгядит так:
Код

function getObject(obj) {
return _getSmallContainer(hash(obj)).get(obj);
}



--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
maxim1000
Дата 20.1.2004, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



есть еще одно применение hash-функций - криптография
кстати, по-моему, они используются на этом форуме
hash-функция обладает следующими свойствами:
1. она действует из большего множества в меньшее, а поэтому необратима - одному результату может соответствовать несколько аргументов
2. в прямом направлении она высичляется достаточно легко (с точки зрения вычислительной сложности)
3. в обратном направлении (найти хоть один аргумент, дающий заранее заданный результат) она практически невычислима
иногда добавляют 4. практически невозможно найти два аргумента, которые дают одинаковый результат

используется hash-функция, например, так:
есть ресурс, к которому обеспечивается парольный доступ
пользователь регистрируется, создает пароль
система берет hash-образ этого пароля и сохраняет его
при аутентификации пользователь набирает свой пароль, система берет от него hash-функцию и сравнивает ее с сохраненным значением и по результатам принимает решение о допуске
если вдруг кто-то получит доступ (на чтение) к базе данных паролей, он сможет прочитать только их hash-образы, а это (свойство 3) ему ничего не дает
поэтому, когда кто-то просит пароль у нашего Админа, он не может его выслать: он его просто не знает, зато его можно сменить.


--------------------
qqq
PM WWW   Вверх
Guest
Дата 20.1.2004, 11:40 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Спасибо большое.
Эти функции используются только при поиске и сортировке ?
Есть ли четкое определение?
Как я поняла с точки зрения языка это обычная функция, толко используюемая определенным образом?
  Вверх
Sardar
Дата 20.1.2004, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 1
Всего: 317



Нет это просто обычная функция, на пример используемая тобой для обьеденения множества обьектов по одному признаку.
По идее hash-функция действует из большего множества в меньшее, но в жизни "может быть наоборот" - из меньшего множества "любимых" человеком паролей берется хеш-код(например md5) с огромным диапазоном возможных значений. Это важно для аутентификационных алгоритмов smile.gif
На algolist.manual.ru загляни в разделы: хеш-таблицы, аутентификация и хеш-функции.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0580 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.