|
3 / 3 / 0
Регистрация: 30.08.2021
Сообщений: 29
|
|
Зачем нужны хэши18.01.2024, 10:44. Показов 2339. Ответов 24
Здравствуйте, мне иногда приходится указывать различные типы данных в других типах данных, которые его не поддерживают то, что я в ней пишу. Пример: set<set<int>>. Для этого приходится писать 2 структуры - hash и equal (set<set<int>, hash, equal>). С equal все понятно - она нужна для того, чтобы c++ понял как сравнивать данный тип, но hash зачем? Что будет если я напишу плохую hash функцию? Допустим она будет выдавать всегда одно значение. И вообще зачем она нужна и где используется?
Заранее спасибо)
0
|
|
| 18.01.2024, 10:44 | |
|
Ответы с готовыми решениями:
24
Зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может больше 4 байт весить? Зачем нужны операторы << и >>
|
|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
|||
| 18.01.2024, 11:14 | |||
Сообщение было отмечено 2010142118 как решение
РешениеТ.е. с хорошей хеш функцией должно искаться по теории за O(1), а если хеш всех элементов одинаков - то будет искаться за O(n)
1
|
|||
|
Вездепух
12922 / 6789 / 1818
Регистрация: 18.10.2014
Сообщений: 17,177
|
|||||
| 18.01.2024, 11:15 | |||||
Сообщение было отмечено 2010142118 как решение
РешениеА уж затем приходить в форум с конкретными вопросами по непонятным местам.
2
|
|||||
|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
|
| 18.01.2024, 11:17 | |
|
0
|
|
|
фрилансер
6442 / 5636 / 1127
Регистрация: 11.10.2019
Сообщений: 14,983
|
||
| 18.01.2024, 12:00 | ||
|
hash нужен для быстрого поиска бакета с коллизиями, а equal - для поиска внутри бакета
1
|
||
|
Комп_Оратор)
|
|
| 19.01.2024, 12:30 | |
|
2010142118, хеширование, это способ (не однозначной, в общем случае) нумерации объектов. То есть, это отображение объектов класса, являющихся с точки зрения данных, матрицами, состоящими в свою очередь, из различных объектов на множество целых неотрицательных чисел. Такая операция позволяет хранить данные в массивах и обращаться к ним по индексу где индекс и есть хеш данного элемента. Хеширующая структура сама заботится о правильном размещении используя хеш-функцию, которую предоставляет пользователь. При поиске, эта же функция используется для определения требуемого индекса. Среди проблем нужно отметить две противостоящие задачи: - создание такой функции, которая более равномерно "размазывает" данные по массиву ("hesh" - размазывать), то есть, имеющей высокую разрешающую (различающую) способность и задача создания быстрой функции хеширования. Полная разрешающая способность, соответствует полной однозначности, но применяется редко. Например, задача хеширования строк приводит к компромиссному решению, как и многие другие. Ведь если выбрать для представления номера числа в системе счисления с основанием равным алфавиту, то можно и в множество unsigned long не поместиться, не говоря уже о том, что быстрой хеш-функция не будет. Отсюда и необходимость неоднозначности отображения. В способе основанном на "цепочках", например, элементы с одинаковым хешем формируются в группы (цепочки), а массив содержит указатели на эти цепочки. Чем меньше , в среднем размер цепочки, по массиву, тем лучше. Быстрые хеш-функции дают размер больше. При поиске, индекс даёт адрес группы моментально O(n). Но потом, нужно пройти по группе последовательно, для определения содержится ли тот элемет, что мы ищем, в массиве. Вот тут можно увидеть гибридное решение для структуры использующей сортированный массив адресных выражений на цепочки в сортированном списке содержащем адресные выражения на элементы списка, который не сортирован и хранит сами значения как некая куча. Всего - три уровня доступа, два из которых не прямые, в терминах контейнеров) Это не хеширование и не дерево. Но есть общие черты) Остальное почитайте, если найдется время и желание:
https://www.cyberforum.ru/blog... g4772.html
0
|
|
|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
||
| 19.01.2024, 12:33 | ||
|
IGPIGP
Вы меня извините, но если бы я не знал что такое хэш - я бы хрен что понял. Зачем люди так непонятно пишут?? что это?? зачем это нагромождение текста в этом месте?
0
|
||
|
Комп_Оратор)
|
|||
| 19.01.2024, 21:29 | |||
|
KSergey9, я пишу так как считаю нужным. Когда люди ищут информацию о непонятном, они перелопачивают много разных источников, а картина складывается из фрагментов понятного в каждом из них. Хороший текст, как мне кажется, рассчитан как на разных читателей, так и на перспективу для одного. Кто-то поймёт сразу, кто-то позже.
Что касается отображения, то тут все немного математики, как однажды мудро отметил, любимый мною Байт. Если отображение множества X на множество Y (однозначное), не дошло в 6-м классе, туда и нужно возвращаться.
0
|
|||
|
6118 / 2813 / 1038
Регистрация: 01.06.2021
Сообщений: 10,262
|
|
| 19.01.2024, 22:28 | |
|
2010142118, за всё время я только раз использовал хеши - при написании движка для крестиков-ноликов, когда реализовал хеш-таблицу. Причем, я не писал свою хеш функцию, а использовал из стандартной библиотеки std::hash<std::vector<bool>>. Свою хеш функцию люди пишут редко, как правило, функций стандартной библиотеки всегда хватает. Да и если написать плохую хеш функцию, то будут коллизии.
0
|
|
|
Вездепух
12922 / 6789 / 1818
Регистрация: 18.10.2014
Сообщений: 17,177
|
|
| 20.01.2024, 11:48 | |
|
0
|
|
|
6118 / 2813 / 1038
Регистрация: 01.06.2021
Сообщений: 10,262
|
||||||||||
| 20.01.2024, 12:40 | ||||||||||
![]() std::unordered_map, с помощью которого реализовал хеш-таблицу. Таким образом, я сокращал время поиска лучшего хода, т.к. поиск обращался к таблице.Еще нечто похожее использовал при использовании алгоритма A*, когда писал головоломку "водопроводчик". Но тогда собсна никакая сложная хеш функция не понадобилась. У меня были объекты, которые имели координаты x и y, и нужно было каждой позиции дать уникальный id. Оказалось достаточно Cantor Pairing Function. Псевдокод такой:
0
|
||||||||||
|
6118 / 2813 / 1038
Регистрация: 01.06.2021
Сообщений: 10,262
|
||
| 20.01.2024, 14:00 | ||
setoption name hash value 1024
0
|
||
|
Вездепух
12922 / 6789 / 1818
Регистрация: 18.10.2014
Сообщений: 17,177
|
||
| 20.01.2024, 21:45 | ||
|
Вариантов много, но суть моего замечания в том, что всякие Cantor Pairing Functions - это следствие работы в тесных рамках того, что разрешается в абстрактной математике. В практическом программировании нам разрешается и дается намного больше и, соответственно, открывается масса более привлекательных вариантов.
0
|
||
|
Комп_Оратор)
|
||
| 20.01.2024, 23:24 | ||
|
0
|
||
|
6118 / 2813 / 1038
Регистрация: 01.06.2021
Сообщений: 10,262
|
|
| 21.01.2024, 00:47 | |
|
IGPIGP, я знаю, что вектор булок неидеален. На самом деле, vector<unsigned> тоже не вишенька. Правильнее будет через битовые строки, а для вычисления хеша вместо использования hash из стандартной библиотеки написать собственную функцию, реализовав Zobrist hashing. Именно так реализовано в сильнейшем шахматном движке - Stockfish. Я это к тому, что учить меня не надо, я всё отлично знаю, как делать правильно. Движок я написал за день и разумеется особо не углублялся и не всегда делал так, как правильно, а делал так, как мне было удобно. Собственно, первостепенная задача была создать работающий движок и эта задача была успешна выполнена. А дальше я просто потерял интерес и не стал улучшать движок. Но не думаю, что всё это интересно ТС. Он спрашивал, зачем нужна и где используется хеш-функция, я вот привел один пример из своего небогатого опыта программирования как хобби.
0
|
|
|
Комп_Оратор)
|
||
| 21.01.2024, 02:03 | ||
|
0
|
||
|
6118 / 2813 / 1038
Регистрация: 01.06.2021
Сообщений: 10,262
|
||
| 21.01.2024, 02:24 | ||
|
Во-вторых, вы предлагаете менять шило на мыло. Выше я уже написал, как это делается в серьезных движках.
1
|
||
|
фрилансер
6442 / 5636 / 1127
Регистрация: 11.10.2019
Сообщений: 14,983
|
|
| 21.01.2024, 04:54 | |
|
Royal_X, для вектора интов я бы взял в качестве хеша первые 2 байта длины + 6 первых байтов содержимого
0
|
|
| 21.01.2024, 04:54 | |
|
Помогаю со студенческими работами здесь
20
Зачем нужны классы?
Зачем нужны указатели? Зачем нужны итераторы? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|