spamsink: (Default)
[personal profile] spamsink
Надо записать, а то пойду спать и забуду. 

Имеется черный ящик, в котором внутри реализована некоторая фиксированная перестановка из N элементов. У ящика можно попросить сгенерировать случайную строку из N бит, с независимыми равновероятными 0 и 1 в каждой  позиции, произвести над ней эту свою перестановку, и показать исходную строку и результат.

Сколько в среднем запросов нужно сделать, чтобы однозначно определить, какая внутри ящика перестановка?

Например, при N=2, c вероятностью 50% случайная строка нам ничего не скажет (если она оказалась 00 или 11, то она такая и останется), а с вероятностью 50% мы узнаем, какая из двух возможных перестановок была реализована. Итого, ожидаемое количество проб S = 0.5*(1+S) +  0.5*1, т. е. S = 2. Для N=3 уже нужна бумажка. А дальше я и не знаю.



Date: 2022-01-20 09:42 am (UTC)
From: [personal profile] sassa_nf
I think it requires solving for all possible outcomes.

eg N=4. 0011=>1100 and 0101=>1001 provides a solution. Is it even possible to decide analytically that this combination of black box responses provides a solution without trying this combination?

Date: 2022-01-20 05:25 pm (UTC)
From: [personal profile] sassa_nf
"analytically" - like, work out a "cheap formula" instead of just computing all combinations of inputs and outputs.

I don't quite understand what "constructing all intersections of sets" means in this context, but certainly the existence of "all" makes me think that you do need to try all combinations of inputs and outputs.

Date: 2022-01-20 06:18 pm (UTC)
From: [personal profile] sassa_nf
Ok, thanks, I understand what you mean now. No, not cheap enough, because requires "enumerating all possibilities".

eg

0011
0101

- all columns unique

But also need to check

1100
0101,

0101
0011,

...

and even longer sequences:

0011
0100
0001

etc. Don't you need to do this? Or is there a cheaper method than just enumerating?

Date: 2022-01-21 07:32 am (UTC)
From: [personal profile] sassa_nf
No, I was stuck thinking that I needed to enumerate all possibilities to find all unique columns, but now I can see there is a "cheap formula" for that. (But still need to think how to derive the mean column height)

Date: 2022-01-20 03:18 pm (UTC)
sab123: (Default)
From: [personal profile] sab123
Тут наверное удобнее начать с вопроса о том, что будет если у нас есть возможность активно подавать цифры на вход? Очевидным образом, перестановку можно вычислить за N шагов, если подавать значения "одна единица и все остальные нули" (или наоборот). Потом рассмотреть случаи, когда надо подавать на вход как минимум 2 единицы (для N>2) - как их разгрести? Через сравнение пар, то есть если у нас есть результат с единицами в позициях (a, b) и результат от (b, c), оттуда мы можем узнать перестановки всех трех позиций a, b, c, глядя на то, что в результатах совпало (это будет перестановка b), а что нет. Ну и, естественно, через сравнение с результатом от строки с одной единицей. Далее смотрим для трех единиц, и так далее.

О, это получается аналог судоку! Там мы тоже строим список того, какие позиции могут содержать какие числа, и вычеркиваем логические невозможности.

Date: 2022-01-21 04:22 am (UTC)
sab123: (Default)
From: [personal profile] sab123
Ну, тут наверное как всегда в комбинаторике надо рассмотреть все возможные пути достижения цели, а потом посчитать их вероятности :-)

Date: 2022-01-20 03:34 pm (UTC)
mtve: (Default)
From: [personal profile] mtve
ответа не знаю, но это что-то близкое к сетям сортировки (sorting networks).

что бы проверить что сеть сортировки правильная, вместо проверки всех возможных перестановок n! на входе достаточно проверить все варианты нулей и единичек 2^n - https://en.wikipedia.org/wiki/Sorting_network#Zero-one_principle
Page generated Mar. 6th, 2026 03:13 am
Powered by Dreamwidth Studios