Мені хотілося б знати, чи існує функція від n-бітних чисел до n-розрядних чисел, яка має такі характеристики:
- має бути біективним
- І і повинні бути обчислені досить швидко
- повинен повернути число, яке не має суттєвої кореляції з його введенням.
Обґрунтування таке:
Я хочу написати програму, яка працює на даних. Деяка інформація даних зберігається у двійковому дереві пошуку, де ключ пошуку є символом алфавіту. З часом я додаю ще символи до алфавіту. Нові символи просто отримують наступний вільний номер. Отже, дерево завжди матиме невеликий ухил до менших клавіш, що спричиняє більше балансування, ніж я вважаю, що потрібно.
Моя ідея полягає в тому, щоб перемацати числа символів таким чином, щоб вони були широко розповсюджені у всьому діапазоні . Оскільки номери символів мають значення лише під час введення та виведення, що відбувається лише один раз, застосування такої функції не повинно бути занадто дорогим.
Я думав про одну ітерацію генератора випадкових чисел Xorshift, але насправді не знаю способу його скасувати, хоча теоретично це повинно бути можливим.
Хтось знає таку функцію?
Це гарна ідея?