Array to string voor game
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.
in mijn pseudo code,, die alleen nog voor mij gevoel werkt, heb k ook vrij veel loops nodig.
Al denk ik dat dit script dus de das omgedraaid wordt door het onnodig kopiëren van variabelen.
Probeer dit maar een te draaien op een shared hosting.
Dan heb je meestal nog veel minder geheugen tot je beschikking.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?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]++; }
}
}
?>
$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 ?