2017-08-31 2 views
0
  1. Ein Benutzer füllt zuerst einige Textfelder aus, zB: Name, E-Mail, Telefon.
  2. Dann wird er 15 Artikel angezeigt (1,2,3, ... 15).
  3. Weil wir nicht wollen, dass Nummer 1 immer am Anfang steht, fügen wir einige Abweichungen in der Reihenfolge der Anzeigen hinzu.
  4. Die Anzeigereihenfolge für diesen Benutzer (oder für diese Sitzung) wird später erneut verwendet.
  5. Wegen 4) können wir entweder
    a) Randomisierung die einmal bestellen, dann Cache oder
    b) Berechnung der Reihenfolge von ein paar Informationen des Benutzers (oder dieser Sitzung).
  6. Für b), ich denke, um einen Hash-Wert aus dem Textfeld Eingaben,
    dann konvertieren Sie die Hash-Reihenfolge um anzuzeigen.
  7. Die Konvertierung muss nicht gleichmäßig verteilt werden, dh
    die Wahrscheinlichkeit des Auftretens von jedem der 15! (= 1.3e + 12) Permutationen müssen nicht gleich sein.

M = Anzahl der Elemente
P (1) = {1,2,3, ..., M}
P (2) = {2,1,3, ... , m}
P (m) = eine PermutationVon Hash zu Permutation

h = hash (Name, E-Mail, Telefon) oder hash (Sitzungs-ID), um nur einen Hash aus einem Text
N (h) = eine ganze Zahl in der Bereich [1, M]

dann die Reihenfolge, die wir wollen = P (N (h))

Frage: Was ist der gute Weg zu dieser Umwandlung?

+1

warum nicht Eingänge zu Samen Pseudozufallszahlengenerator und dann Ihre Permutation mit den Ausgaben von zufälligen Aufrufen erzeugen? – TheGreatContini

+0

Die Berechnung der N-ten Permutation wurde bereits behandelt, zum Beispiel: https://stackoverflow.com/q/7918806/555045 – harold

Antwort

1

Wie @TheGreatContini vorgeschlagen, verwenden Sie Ihren Hash-Wert, um einen Zufallszahlengenerator zu erzeugen und verwenden Sie ihn mit Fisher–Yates shuffle, um eine zufällige Permutation zu generieren.