Anonymous
Ну тащемта да, можно взять в чистом виде FPE над этим множеством и шифровать последовательно числа от 0 до 10^8-1.
Anonymous
И даже разные последовательности таким образом получать, изменяя ключ шифрования.
Snusmumriken
Да, похоже на правду, малацом.
Ivan
Что это за алгоритм в который влезают такие большие числа
Ivan
Ээ
Ivan
У вас же размер числа не влезает в 128 бит
Anonymous
Длинную арифметику никто не отменял
Snusmumriken
Мы абстрагируемся от железа, за исключением минимума памяти.
Ivan
Это почему же
Snusmumriken
Потому что память указана как лимит )))
Ivan
Не совсем корректно
Snusmumriken
640кб памяти хватит для длинной арифметики над несколькими числами.
Ivan
В любом случае у вас могут быть коллизии
Anonymous
Так надо брать перестановку, а не отображение.
Anonymous
В перестановке не бывает коллизий по определению
Snusmumriken
Главное чтобы их шанс бесконечно стремился к нулю )))
Ну, знаешь? Когда шанс коллизии минимально-идеальной функции (а в этом её и суть) - ~0.00000000000000000001 - нам пофигу, у нас чисел-то таких нет.
Ivan
И что у вас есть такая функция?
Snusmumriken
Вот ща считаю, это более чем реально ))
Snusmumriken
Альтернатива - тасование колоды карт кучками.
Лимит ЖД не указан. Количество кучек - тоже ))
Ivan
То что ты считаешь не важно) важно есть ли алгоритм или нет
Anonymous
Можно ещё взять число, взаимно-простое с 10^8 и прибавлять его к некоторому исходному числу много-много раз.
Ivan
А так да, можно рекрсивно файл по частям читать и шафлить
Ivan
N раз
Ivan
N^N раз
Ivan
Ну это понятно
Snusmumriken
https://habrahabr.ru/post/254431/
Ivan
Да, возможно задача изначально на то, чтобы человек написал хеш функцию
Ivan
Это не так то просто
Snusmumriken
Тебе запретили использовать хеш-таблицы, а не писать хеш-функции, потому что ни в одну таблицу оно не влезет по умолчанию ))
Snusmumriken
Придумай ещё одно решение, основанное на РАНДОМЕ. Вот прям math.random. Оно тупое-тупое.
Ivan
Всё решается через кеш) либо через проц
Anonymous
Я только что доказал, что решение, основанное на рандоме эквивалентно решению, не основанному на рандоме в отсутствии каких-либо предположений.
Anonymous
Просто берёшь рандом, выдающий всегда 0 и сводишь задачу к другой задаче.
Ivan
Ivan
Берешь рандом выдающий всегда ноль
Anonymous
А что, рандом не может выдать 10^8 раз подряд ноль?
Anonymous
А потом что-нибудь другое, например.
Ivan
function random() return 0 end
Dika
Anonymous
Диапазон от 0 до 2^32-1, например
Ivan
Да да да
Anonymous
Но он ведь больше нуля?
Ivan
Больше
Anonymous
Ну вот.
Ivan
Что дальше то?
Anonymous
А дальше то, что это тоже рандом "в отсутствии каких-либо предположений", только энтропия выдаваемых им значений равна нулю или около того.
Anonymous
А значит, его можно просто выкинуть, заменив на константу.
Anonymous
/fix и получишь денормализованное число
Ivan
Можно было написать проще
1 / (2^32 - 1)
Snusmumriken
Тот факт что энтропия равна нулю (на заданном сиде) - значит только то, что можно восстановить узор, зная сид.
Ivan
У меня вот интереснее тема
Anonymous
Ivan
Я сейчас штуку пишу, типа временных пользовательских сессий
Ivan
красивый URL выдаётся пользователю на 2 - 60 минут.
Anonymous
Snusmumriken
Ivan
Клиентов может быть дофига
Ivan
Как освобождать URL?
Snusmumriken
Ivan
Snusmumriken
Когда проверять?
Кеш людей, которые недавно вошли. Он мелкий, в сравнении с полным списком пользователей. Удаляем и производим выход пробегая по нему.
Anonymous
Ivan
Anonymous
Ivan
Нужно новому клиенту дать освободившийся URL
Anonymous
Цензура!!!111
Ivan
Нет урл мы не генерим
Ivan
У нас есть список с красивыми строчками типа /cat
Ivan
/the /it
Ivan
И такое прочее