• 06-06-2008, 12:16:49
    #1
    Üyeliği durduruldu
    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.
  • 06-06-2008, 12:55:20
    #2
    Üyeliği durduruldu
    permütasyonun ingilizcesi ne acaba ?
  • 06-06-2008, 13:12:22
    #3
    İş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
    #4
    Üyeliği durduruldu
    elinize 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, 13:35:35
    #5
    5 harfli yazılabilecek kelime adedi. Eğer forların ortasında ki echo nun başında ki çift slahı kaldırırsan bütün kelimeleri karşında görebilirsin.
  • 06-06-2008, 13:49:23
    #6
    Üyeliği durduruldu
    teşekkürler dostum. fakat tam manasıyla makinayı kullanım dışı bırakıyor. Bir de file fonksiyonları mevcut ikisi makinayı ele geçirdi şu an.
  • 06-06-2008, 14:25:33
    #7
    Bunuda 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>';
    }
  • 06-06-2008, 15:34:19
    #8
    Üyeliği durduruldu
    evet çalışıyor ellerine sağlık dostum ama nedense 20 nin üstüne çıkmıyor. t harfinden sonrasını yazarsam almıyor.

    istersen bi test edebilirsin.
  • 06-06-2008, 20:47:24
    #9
    20'nin üstüne çıkmıyor derken? Ben 29 tane harfi 4 lü gruplar şekilde yazıyorum bir sorun çıkmıyor.

    Birde senin verdiğim kod da çalışıyor onu söylemeyi unuttum