Отписал я вариант ответа. Чего тут еще придумывать. Ну ты подумай что двухуровневая таблица - это-ж фу-фу-фу.
Ни один нормальный разработчик не захочет тащить в проект накладные расходы ни с того ни с сего 2х от нужного размера. И кукуха здесь не поможет и Робин гуд. Если уж ты такой перфекционист.
Давай я тебе мысль закину. А ты подумай. Вот в твоем исходнике-же нет таблицы.
Там только ключи. Сет по сути. Тогда тебе можно завести битовый массив и включай биты
где надо. У тебя 5 млн ключей?
А я тебе предлагаю аллоцировать 512 Мб битов и этого тебе хватит для любого
целого числа от 0 до 4 млрд.
floppa322, ты меньше слушай ребят из Кликхаус. Они всполне могли использовать
CRC32 (славо богу его и TCP использует и много чего) но не в таком юзкейсе как ты
придумал.
По поводу CRC32. Это очень примитивная функция. Она создавалась в 20-м веке
в эпоху 16 и 32х битных процессоров. И в основе ее лежит один раунд ХОРь ,
сдвиг и отображение из массива заранее расчетных констант.
У нее есть некоторые интересные совйства. Кажется она идеально хеширует int32
целое число. Вот. Но если-бы я хотел повторить такие свойства то я мог-бы
создать функцию к примеру которая-бы ... меняла левые 16 бит и правые.
Вот тоже самое свойство. Идеально отображает одно в другое.
Дружище Флоппа. Ну Кукушка она вообще не для поиска идеальной функции. Весь фокус в том
что если у тебя 1000 ключей и из них 150 популярны (перекошенная skew гистограмма частот)
а остальные 850 допустим редкие. И тогда кукушка поднимает популярные наверх и делает
иммитацию идеального хеша. Но она ничего не гарантирует при других условиях.
Я ошибся насчет Сэма. Послушал треки. Да там всего 2 трека миксуются. Спокойный и режим боя.
Ну а по поводу mp3. Ну ... надо видимо для каждого трека поставить разметку где ритм стучит.
И синхронизировать игровые события с этим генератором. Но схема все равно не идеальная.
Трудно будет подобрать mp3 который бы долбил непрерывно. В противном случае будет
"клинить" пулемет :)
Но глубина пробирования будет в 1 шаг. После первой коллизии мы применяем ту-же хеш-функцию типа CRC или mur-mur но с другим seed.
Если после 2 шага коллизия - то растягиваем таблицу.