Frage

Ich versuche, zu meiner Bestürzung in C. zufällige Permutationen einer 80-stelligen feste Zeichenfolge zu erzeugen, wobei das System arbeite ich an fehlt strfry (). Was ist der beste Weg für mich eine zufällige Permutation dieser Zeichenfolge zu generieren? Da dies ca. geschlungen über werden. 100.000 Mal, ist die Leistung ein Problem.

War es hilfreich?

Lösung

Verwenden Sie einfach die Open-Source-Implementierung GLIBC, wie Google Code .

char *
strfry (char *string)
{
  static int init;
  static struct random_data rdata;
  size_t len, i;

  if (!init)
    {
      static int state[8] = { 1, 2, 3, 4, 5, 6, 7, 8 };
      rdata.state = NULL;
      __initstate_r (time ((time_t *) NULL), state, 8, &rdata);
      init = 1;
    }

  len = strlen (string);
  for (i = 0; i < len; ++i)
    {
      int32_t j;
      char c;

      __random_r (&rdata, &j);
      j %= len;

      c = string[i];
      string[i] = string[j];
      string[j] = c;
    }

  return string;
}

Sie können die GLIBC bestimmte Datentypen zu etwas allgemeineren ändern möchten.

Dieser Code verwendet die Fisher-Yates mischen, die eigentlich ganz einfach zu implementieren ist durch selbst, und sehr effizient.

Andere Tipps

schafft einen 80-Line-Array, setzt ein Zeichen und eine Zufallszahl in jede Zeile des Arrays, dann sortiert das Array auf den Zufallszahlen.

Rebuild-String aus sortierten Feld.

void gcry_randomize (unsigned char * buffer, size_t Länge, Enum gcry_random_level Ebene)

Fill-Puffer mit einer Länge von zufälligem Bytes einer zufällige Qualität mit wie Ebene definiert.

http://www.g10code.com/p-libgcrypt.html

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top