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