Hey mannen..
Op deze mooie morgen zit ik met een klein probleem. Ik dacht dat het allemaal heel makkelijk zou zijn, maar blijkbaar niet.

Ik heb een array, deze array kan alle lengtes hebben. En bestaat uit :
<?
array('x','y','z');
?>
Maar kan ook zijn :

<?
array('v','w','x','y','z');
?>

Ik heb nu alle string mogelijkheden nodig die zon array kan produceren in alle volgordes : Bij de eerste array zou dat dus zijn :

x,y,z | x,z,y | y,x,z | y,z,x | z,x,y | z,y,x

Ik heb al aardig wat for loopje sgeprobeerd, maar krijg hem steeds net niet te pakken :(
Enige idee ? Thanks alvast



Tja, hoe meer letters, hoe exponentioneel meer mogelijkheden. Ik had de script stukje herschreven zodat resultaat naar disk wordt opgeslagen, maar ook hier loop je al snel tegen beperkingen aan. Daar kun je nou eenmaal niks aan doen.
zorgen dat het niet recursief is.
nico schreef op 23.06.2009 13:22
zorgen dat het niet recursief is.

Of zorgen dat het efficiënt is, en dus niet zoals dat script van Dennis Lassing met tig loops met dubbele variabelen.
Volgens mij wordt er per letter voor elke letter die functie aangeroepen (dus per letter wordt totaal aantal letters - 1 die functie aangeroepen). Binnen die functie wordt er gewoon lekker allemaal array's gekopieerd en gedaan. Dat zorgt inderdaad er wel voor dat je geheugen vol komt te zitten.
Recursiefe functie's kunne wel goed werken, je moet dus alleen opletten dat je niet te veel overkopieert e.d.
@ karl,, je hebt vrij veel loops nodig,, maar recursie doet dit hele script de das om.
in mijn pseudo code,, die alleen nog voor mij gevoel werkt, heb k ook vrij veel loops nodig.
Inderdaad, ik heb even gekeken findcombis is hier bij mij 143935 keer aangeroepen voordat ik een mem. error kreeg.
Al denk ik dat dit script dus de das omgedraaid wordt door het onnodig kopiëren van variabelen.
En dat heb je gedraaid op je localhost neem ik aan?
Probeer dit maar een te draaien op een shared hosting.
Dan heb je meestal nog veel minder geheugen tot je beschikking.
<?php
$erin = array('a', 'b', 'c');

$teller = array();
$l = count($erin);
$m = pow($l, $l);
for($i=0;$i<$l;$i++) {
$teller[] = 0;
}

for($i=0;$i<$m;$i++) {
$found = array(); $fail = 0;
for($a=0;$a<$l;$a++) {
if ( ++$found[$erin[$teller[$a]]] > 1 ) {
$fail =1;
break;
}

}
if ( $fail == 0 ) {
for($a=0;$a<$l;$a++) {
echo $erin[$teller[$a]];
}
echo "<BR>";
}

// +1
$teller[0]++;

for($a=0;$a<$l;$a++) {
if ($teller[$a] >= $l) { $teller[$a] = 0; $teller[$a+1]++; }
}
}
?>

Zonder recursie dan.... ik tover die dingen ook ff zo uit m'n hoge hoed, dus efficient is het niet. Maar ik naam aan dat ik jullie (misschien?) in de goede richting duw en hiermee mogelijkheden laat zien en wellicht dat jullie ideeen hebben om het wel efficienter te maken.
Kan ik die hoge hoed ergens kopen ? Misschien een lease contract ?

Reageren