Autor Zpráva
PHPgirl
Profil *
Ahoj, mám následující algoritmus, který počítá počet možných kombinací délky 9 podle pravidla, že v poli abeceda[Písmeno] jsou všechny písmena, která mohou za ním následovat. Následující kód ale přeteče paměť, a to i 1GB. Proto jsem chtěla vše urychlit tím, že budu ukládat jen poslední písmeno.

V řádku s

$kombinace[$i][]=$temp.$add;

tedy vymažu $temp, ale hlasí to pak error a nefunguje, proč?

<?php
/*Na vstup

3
A:AB
B:BC
C:CA

je správným výstupem 12
Příklad

Na vstup

5
A:ABCD
B:ACEG
C:DE
E:A
F:B
G:F

je správným výstupem 129*/

/*
$abeceda["A"] = array("A","B","C","D");
$abeceda["B"] = array("A","C","E","G");
$abeceda["C"] = array("D","E");
$abeceda["E"] = array("A");
$abeceda["F"] = array("B");
$abeceda["G"] = array("F");
*/

$abeceda["A"] = array("A","Q","g","w");
$abeceda["B"] = array("B","R","V","h","x");
$abeceda["C"] = array("C","D","H","S","i","y");
$abeceda["D"] = array("C","D","E","I","T","j","z");
$abeceda["E"] = array("D","E","L","N","P","U","X","k");
$abeceda["F"] = array("F","K","O","R","V","a","l");
$abeceda["G"] = array("G","H","J","W","Z","d","m");
$abeceda["H"] = array("C","G","H","I","U","X","Y","n","o");
$abeceda["I"] = array("D","H","I","X","Y","n","o");
$abeceda["J"] = array("G","J","W","Z","p");
$abeceda["K"] = array("F","K","N","V","a","b","e","q");
$abeceda["L"] = array("E","L","M","O","a","b","r");
$abeceda["M"] = array("L","M","c","s");
$abeceda["N"] = array("E","K","N","W","d","t");
$abeceda["O"] = array("F","L","O","a","e","u");
$abeceda["P"] = array("E","P","f","v");
$abeceda["Q"] = array("A","Q","g","w");
$abeceda["R"] = array("B","F","R","h","x");
$abeceda["S"] = array("C","S","i","y");
$abeceda["T"] = array("D","T","j","z");
$abeceda["U"] = array("E","H","U","k");
$abeceda["V"] = array("B","F","K","V","l");
$abeceda["W"] = array("G","J","N","W","m","p","t");
$abeceda["X"] = array("E","H","I","X","Y","n","o","y");
$abeceda["Y"] = array("H","I","X","Y","n","o");
$abeceda["Z"] = array("G","J","Z","m","p");
$abeceda["a"] = array("F","K","L","O","a","q");
$abeceda["b"] = array("K","L","b","r");
$abeceda["c"] = array("M","c","s");
$abeceda["d"] = array("G","N","d","m","t","u");
$abeceda["e"] = array("K","O","e","t","u");
$abeceda["f"] = array("P","f","v");
$abeceda["g"] = array("A","Q","g","w");
$abeceda["h"] = array("B","R","h","x");
$abeceda["i"] = array("C","S","i","n","y");
$abeceda["j"] = array("D","T","j","z");
$abeceda["k"] = array("E","U","k","r");
$abeceda["l"] = array("F","V","l");
$abeceda["m"] = array("G","W","Z","d","m","p");
$abeceda["n"] = array("H","I","X","Y","i","n");
$abeceda["o"] = array("H","I","X","Y","o");
$abeceda["p"] = array("J","W","Z","m","p");
$abeceda["q"] = array("K","a","q");
$abeceda["r"] = array("L","b","k","r");
$abeceda["s"] = array("M","c","s");
$abeceda["t"] = array("N","W","d","e","t","u");
$abeceda["u"] = array("O","d","e","t","u");
$abeceda["v"] = array("P","f","v");
$abeceda["w"] = array("A","Q","g","w");
$abeceda["x"] = array("B","R","h","x");
$abeceda["y"] = array("C","S","X","i","y");
$abeceda["z"] = array("D","T","j","z");


$kombinace[0] = 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","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");


for($i=1;$i<9;$i++) {
	foreach ($kombinace[$i-1] as $temp) {
		if(strlen($temp)==$i) {
			foreach ($abeceda[substr($temp,-1)] as $add) {
				$kombinace[$i][]=$temp.$add;
			}
		}
	}
	unset($kombinace[$i-1]);
}


foreach ($kombinace[9] as $temp) {
	if(strlen($temp)==$i) $sum++;
}

echo $sum;

?>
Alphard
Profil
PHPgirl:
Můžete ty pravidla více vysvětlit slovně? Zkusil jste jiný postup, ale zřejmě jsem to pochopil špatně, vychází mi jiná čísla. Co znamenají v příkladech ta čísla před definicí (3 a 5)? A v druhém příkladě vám navíc chybí definice, co následuje po D.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0