377 похожих чатов

Добрый вечер! Ищу генератор перестановок из N элементов, который бы,

во-1, за N! генераций выдал бы N! уникальный перестановок и при этом, во-2, любые соседние перестановки были бы максимально непохожими друг на друга. Алгоритм Нарайяны соответствует первому критерию, но не соответствует второму. Алгоритм получения новой перестановки шифра RC4 (уже в режиме генерирования нового байта гаммы, а не создания начальной перестановки по ключу) соответствует второму критерию, но не соответствует первому. Я слегка изменил RC4, чтобы он выдавал больше уникальных перестановок, но 100%-ого результата всё равно не достиг. Кто-нибудь из здесь присутствующих знает что-то, что могло бы соответствовать сразу обоим предъявленным критериям? Спасибо.

18 ответов

38 просмотров

Можно запустить два алгоритма Нарайяны навстречу друг другу, на i-ой генерации брать вывод первого или второго, в зависимости от четности i

Fido-Retano Автор вопроса

То есть, один начинает с "1234", а второй с "4321"?

Да, но я не уверен, что они всегда будут получаться "максимально непохожими"

Fido-Retano Автор вопроса

если каждая копия алгоритма Нарайяны пройдёт только половину своего пути и их выводы чередовать в один общий поток, то любые две соседние перестановки скорее всего таки будут сильно непохожими. Однако я теперь понял, что нужно вводить третий критерий: непредугадываемость следующей перестановки до момента её фактического появления. То есть, нужно ещё что-то по типу псевдослучайности их появления. Ваше предложение соответствует предъявленным двум критериям, но от него придётся всё же отказаться.

Тогда вам нужен какой-то алгоритм перемешивания, например, алгоритм Фишера-Йетса

Fido-Retano Автор вопроса

Не слышал о таком. Сейчас буду читать.

а какая конечная цель? почему соседние перестановки должны быть непохожими может можно чёто придумать отталкиваясь от задачи

Fido-Retano Автор вопроса

Увы, но именно этот алгоритм не подходит, так как уникальность получаемых перестановок зависит только от псевдослучайности числовых последовательностей и никак не зависит от предыдущей перестановки. Нужно что-то самодостаточное, как RC4.

Fido-Retano Автор вопроса

Вот представьте себе алгоритм Диффи-Хелмана, который при правильно подобранных параметрах сгенерит все числа, не превышающие простой модуль, ни разу их не повторив. Вот нужно тоже самое, но генерящее перестановки.

Fido-Retano Автор вопроса

Сейчас напишу.

Вы про формулу g^x (mod p), которая сгенерит все числа от 1 до p?

Я не очень понимаю, что это значит. Как без псевдослучайности выполнить этот критерий: "непредугадываемость следующей перестановки до момента её фактического появления"? Если мы знаем перестановку и алгоритм, при этом алгоритм детерминированный, мы можем посчитать следующую

Fido-Retano Автор вопроса

Да.

Fido-Retano Автор вопроса

Да, можем посчитать, как, например, значение хеш-функции. Но не должно быть возможности сказать, хотя бы в какой части диапазона N! она будет до её подсчёта.

Fido-Retano Автор вопроса

Эээээ... Не знаю. Может быть. :-))) Бент-функции я как-то раз пытался осилить, но так и не осилил.

ну типа, достаточно же сделать маппинг номер→перестановка

А нельзя ли взять (kx + b) mod n! и алгоритм получения перестановки по номеру?

Fido-Retano Автор вопроса

Вы имеете в виду получение перестановки по номеру в лексико-графическом порядке? (http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BD%D0%BE%D0%BC%D0%B5%D1%80%D0%B0_%D0%BE%D0%B1_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%83_%D0%B8_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%B0_%D0%BF%D0%BE_%D0%BD%D0%BE%D0%BC%D0%B5%D1%80%D1%83)

Похожие вопросы

Обсуждают сегодня

Telos is at a pivotal moment. While ambitious projects like zkEVM and SNARKtor have shown promise, the delay in delivering EVM 2.0—a cornerstone of the ecosystem—is a growing ...
Trinidad
8
#include <stdio.h> #include <stdlib.h> #include <time.h> void mass_first_generate(int mass[5][7]) {     for (int N = 0; N < 5; N++) {         for (int A = 0; A < 7; A++) {   ...
Чувак
6
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Except the wealthiest, people that buy crypto want to "cash out" at the end of the day, one way or another. Converting to fiat is craziness, converting to BTC is unwise. Hold ...
Erdelanax
2
Всем привет! Решаю 99 OCaml Problems и столкнулся со следующей проблемой (прошу палками не забивать, я OCaml практически не трогал до этого момента): open OUnit2 let create_...
К|/|pи/\/\ 6е3yглbIи
2
Hello guys, hope you can help me with a quick question. I've staked some ZIL using Atomic Wallet some while ago and wanted to claim my rewards and unstake it. Atomic Wallet sa...
Martin | #bornbrave
14
Ready for some fun AND a chance to win TKO Tokens? Join us for exciting minigames in our Telegram group! 🕒 Don’t miss out—games start on today 25 October 2024, at 8 PM! Ge...
Milkyway | Tokocrypto
255
https://www.linkedin.com/posts/ugama-benedicta-kelechi-codergirl-103041300_mobiledevelopment-fluttertraining-handsonlearning-activity-7263445699227254784-IdHB?utm_source=share...
CoderGirl
16
возможно ли как-то передать в электрон или таури медиа поток с рендера 2д движка? двиг запускается как dll, а дальше надо как-то отправлять рендер кодировать не подходит, зр...
Kyle Nekto
7
VIP-397 BNBx Oracle implementation upgrade Summary This proposal, if approved, will upgrade the implementation of the BNBx Oracle contract on Venus from version 1 (V1) to v...
Venus Announcements
2
Карта сайта