Merhaba arkadaşlar...
a dan zeye 5 harfli bütün kelimeleri nasıl dizeriz?
bir nevi olasılık ve permütasyon hesabı ama.
Permütasyon & Olasılık Hesaplama
8
●9.276
- 06-06-2008, 13:12:22İşine yarayabilir ama serveri çok kasıyor

<? $Harfler='ABCÇDEFGĞHIİJKLMNOÖPRSŞTUÜVYZ'; for($Sayac1=0; $Sayac1<strlen($Harfler); $Sayac1++){ for($Sayac2=0; $Sayac2<strlen($Harfler); $Sayac2++){ for($Sayac3=0; $Sayac3<strlen($Harfler); $Sayac3++){ for($Sayac4=0; $Sayac4<strlen($Harfler); $Sayac4++){ for($Sayac5=0; $Sayac5<strlen($Harfler); $Sayac5++){ //echo $Harfler[$Sayac1].$Harfler[$Sayac2].$Harfler[$Sayac3].$Harfler[$Sayac4].$Harfler[$Sayac5].'<br>'; static $Adet=0; $Adet++; } } } } } echo $Adet; ?>Kelime adetini bulmanın başka yoluda var. Mesela 5 harf ile yazılacak bütün kelimeleri bulmak için 29*29*29*29*29 işlemi adeti verir. - 06-06-2008, 13:34:25Üyeliği durdurulduelinize sağlık arkadaşlarım. yukarıda sayfa açıldığında karşıma 20511149 geldi.
bu nedir?
alfabede 29 tane harf var diyelim. bunlarla sırasıyla 4 harfli kelimeleri alt alta yazmayı deniyorum.
<?php function permutations($letters,$num){ $last = str_repeat($letters{0},$num); $result = array(); while($last != str_repeat(lastchar($letters),$num)){ $result[] = $last; $last = char_add($letters,$last,$num-1); } $result[] = $last; return $result; } function char_add($digits,$string,$char){ if($string{$char} <> lastchar($digits)){ $string{$char} = $digits{strpos($digits,$string{$char})+1}; return $string; }else{ $string = changeall($string,$digits{0},$char); return char_add($digits,$string,$char-1); } } function lastchar($string){ return $string{strlen($string)-1}; } function changeall($string,$char,$start = 0,$end = 0){ if($end == 0) $end = strlen($string)-1; for($i=$start;$i<=$end;$i++){ $string{$i} = $char; } return $string; } ?> To use this Generator you can do something like this : <? $Array=permutations("ABCDEFGHIJKLMNOPRSTUVWYZX",4); // $Array=permutations("abcdefghijklmnoprstuvwyzx",4); for($i=0 ; $i < count($Array) ; $i++) { echo ''.$Array[$i],'<BR>'; } ?>$Array=permutations("ABCDEFGHIJKLMNOPRSTUVWYZX",4) ; satırını düzenleyip sıralatıyorum. ama okumuyor.
$Array=permutations("ABCD",4); bu şekilde yapıyorum bu kezde kısalıyor. - 06-06-2008, 14:25:33Bunuda kullanabilirsin. Bu kod daha kısa oldu
. Ama yine mantığı aynı ilk verdiğim kod ile. Alfabemizdeki harfleri 5 harfli kelimeler halinde dizersek 20 milyondan fazla kelime oluşuyo tabi bunuda ekrana basarsak çok uzun sürer çünkü yanlış hesaplamadıysam 19mb den fazla veriyi ekrana basıyoruz.
function permutasyon($Harfler, $KacHarfli){ for($Sayac1=0; $Sayac1<$KacHarfli; $Sayac1++){ $PHPKod.='for($Sayac'.$Sayac1.'=0;$Sayac'.$Sayac1.'<strlen($Harfler); $Sayac'.$Sayac1."++){\n"; if($Sayac1==$KacHarfli-1){ $PHPKod.='$Perm[]="'; for($Sayac2=0; $Sayac2<$KacHarfli; $Sayac2++){ $PHPKod.='$Harfler[$Sayac'.$Sayac2.']'; } $PHPKod.="\";\n"; for($Sayac2=0; $Sayac2<$KacHarfli; $Sayac2++){ $PHPKod.="}\n"; } } } @eval($PHPKod); return $Perm; } foreach(permutasyon('abcde',2) as $a => $b){ echo $b.'<br>'; }
