Alle möglichen zeichenketten erstellen

hallo,
ich versuche gerade aus einem array mit zeichen, alle möglichkeiten zu bekommen.
das klappt soweit auch:

[code]$chars[] = ‘a’;
$chars[] = ‘b’;
$chars[] = ‘c’;
$chars[] = ‘d’;
$chars[] = ‘e’;
$chars[] = ‘f’;
$chars[] = ‘g’;
$chars[] = ‘h’;
$chars[] = ‘i’;
$chars[] = ‘j’;
$chars[] = ‘k’;
$chars[] = ‘l’;
$chars[] = ‘m’;
$chars[] = ‘n’;
$chars[] = ‘o’;
$chars[] = ‘p’;
$chars[] = ‘q’;
$chars[] = ‘r’;
$chars[] = ‘s’;
$chars[] = ‘t’;
$chars[] = ‘u’;
$chars[] = ‘v’;
$chars[] = ‘w’;
$chars[] = ‘x’;
$chars[] = ‘y’;
$chars[] = ‘z’;
$chars[] = ‘ä’;
$chars[] = ‘ö’;
$chars[] = ‘ü’;
$chars[] = ‘1’;
$chars[] = ‘2’;
$chars[] = ‘3’;
$chars[] = ‘4’;
$chars[] = ‘5’;
$chars[] = ‘6’;
$chars[] = ‘7’;
$chars[] = ‘8’;
$chars[] = ‘9’;
$chars[] = ‘0’;
$chars[] = ‘-’;

function buildCombos($chars, $n)
{
if($n <= 0)
{
return array(’’);
}
else
{
$built = array();
foreach($chars as $char)
{
foreach(buildCombos($chars, $n - 1) as $b)
{
$built[] = $b . $char;
}
}
return $built;
}
}
$combos = buildCombos($chars, 4);
[/code]

nun möchte ich das skript allerdings mit einer höheren zeichenlänge laufen lassen. dies funktioniert auch nicht, da nicht genügend speicher vorhanden ist.

ich suche jetzt nach einer möglichkeit die aufgabe des skriptes aufzuteilen, sodass das skript an bestimmten stellen angehalten werden kann und dann auch fortgesetzt werden kann, sodass ich auch längere zeichenketten erzeugen kann.

liebe grüße,
sebastian

Lieber Herr Sebastian,
ich find das schon sehr interessant… es gibt ‘sprintf’ und auch die Ausgabe (macht mich persönlich an) in html echo '<a href="index.php?section='.$var.'">Link</a>'; ist schon eine schöne Sache als Verkettungsoperator.(<?php $arr = array("foo", "bar", "bla", 5.6, false, -10, "foo", "foo", "bar", "foo"); ?> echo $arr[0]; // gibt foo aussomit gehört zum ersten aufsteigenden Array Element der Index 0) ES SIEHT für mich so aus als baust du konstruktoren. Aber das weis Ich nicht! Weiter sag’ ich mal das kann man denke Ich wohl logisch Verknüpfen. wie z.B. bei Du darfst draußen spielen wenn du deine Hausaufgaben gemacht hast und dein Zimmer aufgeräumt ist. In PHP wird diese Verknüpfung mit dem AND-Operator realisiert. $spielen = $hausaufgaben_fertig and $zimmer_aufgeraeumt;

[quote](!(false XOR true) AND !( true OR false)) XOR (false OR (true XOR true ))
[/quote]
Wenn du der Sache entnehmen kannst wie das helfen soll, sonst eben als echo () ist nicht wirklich eine Funktion (es ist eine Sprache zu konstruieren), so dass Sie nicht unbedingt Klammern brauchen damit. Cache…
MfG
Dumm bleibt Dumm . . .

zu viel ouzo, nuso? ich frag mich ja schon die ganze zeit aus was für nem loch du gekrochen bist…

@lenz: wie wärs, wenn du eine datenbank verwendest, um die zwischenergebnisse zu speichern?

darf man fragen, was du damit machen willst? brute-force? :smiley:

meiner meinung nach arbeitet winrar zum beispiel mit dem zusammenlegen von gleichen werten wenn etwas verkleinert werden muss. für mich sah es nach etwas in der art aus. also arr[0] (a.‘x_mal’); class {1 and 2 nor 3}; so aus lust und dollerei aber viell. hab ich mich ja geirrt.

Eventuell findest du hier ja eine Idee, wie du den Algorithmus zwischendurch anhalten kannst:
en.wikipedia.org/wiki/Permutatio … rmutations

um das Ganze abzukürzen.
Solche Operationen wie string-permutation sind sehr teuer. Klar wird da auch bei wenigen schon der Speicher voll werden ($size = pow(count($chars),$length); bei $length = 4 hat man also 2.560.000 Möglichkeiten bei 40 chars).
Ich weiß nicht, ob Datenbank/Datei so eine tolle Idee ist, da das doch sehr langsam dann wird. Erst die letzten (Anzahl_chars)^{string_length} Schritte erzeugen die entgültigen Möglichkeiten. Also kann man sie nicht zwischenspeichern oder zwischendurch ausgeben, sodass man unnötigen Speicher freigeben könnte. Insgesamt läuft er [latex]\sum_{i=1}^{n}(Anzahl_chars)^{i}[/latex] Schritte.

Ein anderer Versuch wäre Java und die Klasse BigInt oder natürlich Haskell

Das Array bekommst man mittels $chars = array(‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’, ‘h’, ‘i’, ‘j’, ‘k’, ‘l’, ‘m’, ‘n’, ‘o’, ‘p’, ‘q’, ‘r’, ‘s’, ‘t’, ‘u’, ‘v’, ‘w’, ‘x’, ‘y’, ‘z’, ‘ä’, ‘ö’, ‘ü’, ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’, ‘-’); (schönerer Code, wie ich finde).

Das array kann noch einfacher erstellt werden

$chars = str_split('abcdefghijklmnopqrstuvwxyzäöü0123456789-);

Was auch immer damit angestellt werden soll, alle Kombinationen in einen array abzulegen macht keinen Sinn.

[quote=“do-it-yourself”]um das Ganze abzukürzen.
Solche Operationen wie string-permutation sind sehr teuer. Klar wird da auch bei wenigen schon der Speicher voll werden ($size = pow(count($chars),$length); bei $length = 4 hat man also 2.560.000 Möglichkeiten bei 40 chars).
Ich weiß nicht, ob Datenbank/Datei so eine tolle Idee ist, da das doch sehr langsam dann wird. Erst die letzten (Anzahl_chars)^{string_length} Schritte erzeugen die entgültigen Möglichkeiten. Also kann man sie nicht zwischenspeichern oder zwischendurch ausgeben, sodass man unnötigen Speicher freigeben könnte. Insgesamt läuft er [latex]\sum_{i=1}^{n}(Anzahl_chars)^{i}[/latex] Schritte.

Ein anderer Versuch wäre Java und die Klasse BigInt oder natürlich Haskell

Das Array bekommst man mittels $chars = array(‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’, ‘h’, ‘i’, ‘j’, ‘k’, ‘l’, ‘m’, ‘n’, ‘o’, ‘p’, ‘q’, ‘r’, ‘s’, ‘t’, ‘u’, ‘v’, ‘w’, ‘x’, ‘y’, ‘z’, ‘ä’, ‘ö’, ‘ü’, ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’, ‘-’); (schönerer Code, wie ich finde).[/quote]
Es gibt Algorithmen, die die nächste Permutation aus der vorhergehenden ableiten, nur durch das vertauschen zweier Zeichen. Auch damit erreicht man alle Permutationen und kann jeden beliebiegen Zustand zwischenspeichern und dort weitermachen.
en.wikipedia.org/wiki/Steinhaus% … #Algorithm
Dazu musst du deine Zeichen nur eindeutig durchnummerieren.

das ganze hat mit meinem domain projekt zu tun :stuck_out_tongue:
mehr sage ich vorerst dazu nicht…

ich bin mir nicht sicher, ob ich mit den links was anfangen kann, aber ich werd mir die auf jeden fall lesen :slight_smile:
danke schonmal.

UND nochwas! „>>MySQL<<“ benutzt solche Algorithmen!!
MfG :hail: :hail: :hail: :hail: :hail: