Питання, яке мене цікавить, пов’язане з генерацією випадкових перестановок. Враховуючи ймовірнісні парні ворота swap як основний будівельний блок, який є найбільш ефективним способом отримання рівномірно випадкової перестановки елементів? Тут я беру "ймовірнісний парний шлюз swap" як операцію, яка реалізує ворота swap між обраними елементами та з певною вірогідністю яку можна вільно обирати для кожного затвора, і ідентичність в іншому випадку.
Я розумію, що це звичайно не так, як можна генерувати випадкові перестановки, де зазвичай можна використовувати щось на зразок перемикання Фішера-Йейта, однак це не буде працювати для програми, яку я маю на увазі, оскільки дозволені операції різні.
Зрозуміло, що це можна зробити, питання полягає в тому, наскільки ефективно. Яка найменша кількість ймовірнісних свопів, необхідних для досягнення цієї мети?
ОНОВЛЕННЯ:
Ентоні Левер'є надає метод нижче, який дійсно забезпечує правильний розподіл за допомогою воріт , а Цуйосі Іто пропонує інший підхід з таким же масштабуванням у коментарях. Однак найкраща нижня межа, яку я бачив досі, - це , який масштабується як . Таким чином, питання лишається відкритим: Is найкраще , що можна зробити (тобто є кращий нижня межа)? Або в якості альтернативи, чи існує більш ефективна сім'я схем?
ОНОВЛЕННЯ:
У кількох відповідях та коментарях запропоновані схеми, які повністю складаються з імовірнісних свопів, де ймовірність встановлена на рівні . Така схема не може вирішити цю проблему з наступної причини (знята з коментарів):
Уявіть схему, яка використовує таких воріт. Тоді є рівномірних обчислювальних шляхів, і тому будь-яка перестановка повинна відбуватися з ймовірністю для деякого цілого k. Однак для рівномірного розподілу нам потрібно, щоб
ОНОВЛЕННЯ (від mjqxxxx, який пропонує винагороду):
Пропонована сума - це (1) доказ того, що потрібні ворота, або (2) робочий контур для будь-якого , що використовує менше воріт.n n ( n - 1 ) / 2