Generieren Sie eine zufällige Permutation einer großen Liste (in Python).


Gerenuk

Ich möchte eine zufällige Permutation der Zahlen erstellen, bei [1,2,...,N]denen Nes sich um eine große Zahl handelt. Ich möchte also nicht alle Elemente der Permutation im Speicher speichern, sondern die Elemente meiner bestimmten Permutation durchlaufen, ohne frühere Werte im Speicher zu behalten.

Irgendeine Idee, wie man das in Python macht?

Rossum

Eine Möglichkeit ist die Verwendung einer Verschlüsselung. Da die Verschlüsselung reversibel ist, dh eins zu eins, erhalten Sie für einen bestimmten Schlüssel dieselben Nummern zurück, die Sie verschlüsseln, jedoch in einer anderen Reihenfolge.

Sie benötigen eine Blockverschlüsselung mit einer Blockgröße, die groß genug ist, um Ihr maximales N aufzunehmen. Verwenden Sie DES im EZB-Modus für N = 2 ^ 64 - 1. Verwenden Sie AES im EZB-Modus für N = 2 ^ 128 - 1. Auch für andere Größen Verwenden Sie die Hasty Pudding-Chiffre mit variabler Blockgröße oder schreiben Sie Ihre eigene einfache Feistel-Chiffre . Ich gehe davon aus, dass Sie nur ein Shuffle benötigen, kein kryptografisch sicheres Shuffle.

Wenn die Ausgabe größer als N ist, verschlüsseln Sie sie erneut, bis sie kleiner als N ist. Die 1-zu-1-Eigenschaft stellt sicher, dass die Kette großer Zahlen ebenfalls eindeutig ist.

Es ist nicht erforderlich, das gesamte Array im Speicher zu speichern. Jede Nummer kann nach Bedarf verschlüsselt werden. Es werden nur der Schlüssel und der Verschlüsselungsalgorithmus benötigt. Eine leichte Komplikation ist, dass Blockchiffren an [0 ... N-1] arbeiten; Möglicherweise benötigen Sie zusätzlichen Code, um mit den Extremen fertig zu werden.

Verwandte Artikel


Generieren Sie eine zufällige Farbe einer Liste in Python

AVB Also, was ich tun möchte, ist eine Liste wie diese zu erstellen: color1 = (225, 225, 0) color2 = (225, 0, 225) color3 = (0, 225, 225) color4 = (0, 225, 0) color5 = (225, 0, 0) color6 = (0, 0, 225) Und wählen Sie mit dem Zufallsmodul einen zufälligen aus.

Generieren Sie eine zufällige Störung einer Liste

georg Wie kann ich eine Liste zufällig mischen, damit keines der Elemente an seiner ursprünglichen Position bleibt? Mit anderen Worten, bei einer Liste Amit unterschiedlichen Elementen möchte ich eine Permutation Bdavon generieren , damit Diese Permutation ist

So generieren Sie eine zufällige Liste von Ints in Python3

Himmelswolken Meine Idee ist folgende: l=[] for i in range(10): l.append(random.randint(0,100)) Aber gibt es eine bequemere Möglichkeit, eine zufällige Liste von Ints zu generieren, da ich das Zufallsmodul importiert habe? bevc Ich bin mir nicht sicher, w

So generieren Sie eine zufällige quadratische Funktion in Python

AdamH Ich versuche, eine zufällige quadratische Funktion bis zum 2. Grad in Python zu erstellen, die jedes Mal das gleiche Ergebnis zurückgibt. Etwas in der Art von: funk = lambda i : random.randint(0,10)*i**2 + random.randint(0,10)*i + random.randint(0,10) D