Ich versuche, zufällige Permutationen einer festen 80-Zeichen-Zeichenkette in C zu generieren. Zu meiner großen Bestürzung fehlt dem System, an dem ich arbeite, strfry(). Was ist der beste Weg für mich, eine zufällige Permutation dieser Zeichenfolge zu erzeugen? Da dies in einer Schleife ca. 100.000 Mal durchgeführt wird, ist die Leistung ein Problem.
Antworten
Zu viele Anzeigen?Verwenden Sie einfach die Open-Source-GLIBC-Implementierung, wie sie von 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;
}
Vielleicht möchten Sie die GLIBC-spezifischen Datentypen in etwas Allgemeineres ändern.
Dieser Code verwendet die Fisher-Yates-Mischung die eigentlich recht einfach selbst zu implementieren und sehr effizient ist.
Nicht registrierter Benutzer
Punkte
0
plan9assembler
Punkte
2876