Permutaatio algoritmi

zer0hunt3r 27.09.05 00:50

Joku kaipaili tämmöstä jossakin ja tekasin semmoisen, algoritmi ja muu koodi on 100% omaa, joten virheitäkin on ;) Ja mun eka koodi tänne. Eli tosiaan tulostaa X! permutaatiot.

 Tekstiversio  Arvo: -4 (8 ääntä)  Äänestä: +  -
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<title>
Permutaatio ohjelma
</title>
</head>
<body>
<FORM ACTION="permutaatio.php" METHOD="GET">
Your string <INPUT TYPE="TEXT"  NAME="Stringi" />
<INPUT TYPE="submit" VALUE="OK"/>
</FORM>

<?php
   
/**  Permutation algorithm with php
 * @author     Toni Helminen
 * @version    1.1
 * @since      1.0, September 28, 2005, 7:49 pm
 * @e-mail     Toni_Helminen@hotmail.com
 */



$start = microtime(true);

// Globaaliksi
import_request_variables("g", "muuttuja");
$temp2=trim($muuttujaStringi);


if(!empty($temp2)) {
    $kirjaimet = preg_split('//', $temp2, -1, PREG_SPLIT_NO_EMPTY);
    unset($temp2);

    echo "<p>Your letters: " . implode(" ", $kirjaimet) . "<br /><br />";

    // Kertoma tähän
    $ya = 1;

    // uus array
    $numeroarray[0] = 1;

        foreach ($kirjaimet as $key => $value) {
            $numeroarray[$key]=$key;
            $ya *= ($key +1);
            echo $value;
        }


        for($t=2;$t<=$ya;$t++) {
            $yyy =  suorita_jarjestys($numeroarray);
            jarjesta_loppu($yyy,$numeroarray);

            echo " ";
       
            foreach ($numeroarray as $key => $value) {
                echo $kirjaimet[$value];
            }

        } // for($t


    // code
    $end = microtime(true);
    $gen_time = $end - $start;
    echo "<br /><br />Time for the page: ";
    print (number_format($gen_time,3))."s</p>";

}//if(!empty...

else {
    echo "<p>Please enter a string</p>";
}

function suorita_jarjestys(&$taulukko) {
    $vaihda_vasen=0;
    $vaihda_oikea=0;
    // Ulompi taulukko
    for ($v=0; $v<=count($taulukko)-2; $v++) {
         //Sisempi taulukko
         for ($o=$v+1; $o<=count($taulukko)-1; $o++) {
             
              // Jos sisempi taulukko isompi
              if($taulukko[$o]>$taulukko[$v]) {
                  $vaihda_oikea=$o;$vaihda_vasen=$v;
              }
          }// for( o....
    }// for( v....

    $temp=$taulukko[$vaihda_oikea];
    $taulukko[$vaihda_oikea] = $taulukko[$vaihda_vasen];   
    $taulukko[$vaihda_vasen]=$temp;
    return  $vaihda_vasen+1;
} // suorita_jarjestys(....
               


function jarjesta_loppu($mista, &$taulukko) {

     for ($ii=$mista; $ii<=count($taulukko)-1; $ii++) {
         // otetaan loppu muistiin
         $temp_array[$ii]=$taulukko[$ii];
     }

    // Järjestetään Tämä vaihtaa indexin alkamaan alusta
    sort($temp_array);

        // Pistetään loppu ylös ja yhdistetään taulukot
        foreach($temp_array as $key => $value)
        {
            $taulukko[$mista+$key]=$temp_array[$key];
        }

} // jarjesta_loppu(....
?>
</body>
</html>

editoitu: 15:27 28.9.05
chiman 15:20 28.9.05 
Voisitko muokata tuosta koodista sisennykset yhdenmukaisiksi? Tabulaattorin voisi korvata vaikka neljällä välilyönnillä. Nykyisellään tuota on hyvin ikävä yrittää lukea.

Laitetaan vielä vinkki:

PHP
echo "Your letters: ";
foreach ($kirjaimet as $value){echo  $value; echo " ";}
echo "<br />";

muotoon:

PHP
echo "Your letters: " . implode(" ", $kirjaimet) . "<br />";
zer0hunt3r 19:18 28.9.05 
Joo kiitti vinkeistä, hiukan parantelin koodia ja lisäsin inputin niin ei tarvi koodiin muutella http://www.ippnet.fi/toni.helminen/Permutaatio/permutaatio.php tuolla voi kokeilla.
chiman 10:58 29.9.05 
Laitatko nuo sisennykset vielä vakiokäytännön mukaisiksi. Esim.

PHP
    function jarjesta_loppu($mista, &$taulukko)
    {
for ($ii=$mista; $ii<=count($taulukko)-1; $ii++)
        {
// otetaan loppu muistiin
$temp_array[$ii]=$taulukko[$ii];
              }

// Järjestetään Tämä vaihtaa indexin alkamaan alusta
sort($temp_array);

// Pistetään loppu ylös ja yhdistetään taulukot
for ($oo=0; $oo<count($temp_array); $oo++)
      {
$taulukko[$mista+$oo]=$temp_array[$oo];
            }
                  } // jarjesta_loppu(....
 

muotoon:

PHP
function jarjesta_loppu($mista, &$taulukko)
{
    for ($ii=$mista; $ii<=count($taulukko)-1; $ii++)
    {
        // otetaan loppu muistiin
        $temp_array[$ii]=$taulukko[$ii];
    }

    // Järjestetään Tämä vaihtaa indexin alkamaan alusta
    sort($temp_array);

    // Pistetään loppu ylös ja yhdistetään taulukot
    for ($oo=0; $oo<count($temp_array); $oo++)
    {
        $taulukko[$mista+$oo]=$temp_array[$oo];
    }
} // jarjesta_loppu(....
 
zer0hunt3r 13:14 29.9.05 
Oli muokkaukses tullu pikku bugi korjasin ja vähän luettavampaan kuntoon kanssa, thx vinkeistä :)