Autor Zpráva
donner
Profil *
Potreboval by som surne nejaky script, ktory by vypisal vsetky variacie 12!, je ich skoro 500 milionov. Ak ste nepochopili, potrebujem nieco co mi vypise vsetky mozne kombinacie cisel 1-12.
napriklad
1 2 3 4 5 6 7 8 9 10 11 12
2 1 3 4 5 6 7 8 9 10 11 12
1 3 2 4 5 6 7 8 9 10 11 12
Senky
Profil
Toto som nasiel na nete, Je to pre slova, ale da sa to vyuzit aj v tvojom pripade:
    <?

    // Factorial
    function fact($s){
    if ($s==0) return 1;
    else return $fact = $s * fact($s-1);
    }

    $phrase=”Your Phrase Comes Here”;        // tu daj cisla oddelene medzerou...
    // Let’s count the number of words by creating an array
    $words=explode(” “, $phrase);
    $n=count($words);

    // Here comes a loop that creates all possible combinations of array positions
    for ($m=1; $m<=fact($n); $m++)
    {
    $ken = $m-1;
    $f = 1;
    $a = array();
    for($iaz=1; $iaz<=$n; $iaz++)
    {
    $a[$iaz] = $iaz;
    $f = $f*$iaz;
    }
    for($iaz=1; $iaz<=$n-1; $iaz++)
    {
    $f = $f/($n+1-$iaz);
    $selnum = $iaz+$ken/$f;
    $temp = $a[$selnum];
    for($jin=$selnum; $jin>=$iaz+1; $jin–)
    {
    $a[$jin] = $a[$jin-1];
    }
    $a[$iaz] = $temp;
    $ken = $ken%$f;
    }
    $t=1;

    // Let’s start creating a word combination: we have all the necessary positions
    $newphrase=”";

    // Here is the while loop that creates the word combination
    while ($t<=$n)
    {
    $newphrase.=$words[$a[$t]-1].” “;
    $t++;
    }
    // Output of the phrase
    echo $newphrase.”\r\n”;

    }

    ?>
Davaj na to ale pozor! Ak to slape na localhoste, tak ti to zacne zrat cely HW, a ak na serveri, moze sa tam upiect procesor!
bohyn
Profil
Senky
moze sa tam upiect procesor!
Ale neupece :)

donner
Dovedes si predstavit co by prohlizec delal s minimalne 12GB souborem? Ja teda ne :)
AM_
Profil
Potreboval by som surne nejaky script, ktory by vypisal vsetky variacie 12!, je ich skoro 500 milionov. Ak ste nepochopili, potrebujem nieco co mi vypise vsetky mozne kombinacie cisel 1-12.
Kombinace a variace je něco jiného, tak co chceš?
1 2 4 3 je stejná kombinace jako 1 2 3 4, ale jiná variace.
TomášK
Profil
donner
Ujasni si terminologii :) V první větě píšeš variace, pak to upřesníš na kombinace a ve skutečnosti chceš permutace - jsou to tři různé pojmy. A zvaž, jestli je php ten pravý jazyk - kompilované jazyky jako java, C nebo Pascal budou podstatně rychlejší (třeba 10x).
panther
Profil
AM_
Kombinace a variace je něco jiného, tak co chceš?
to máš sice pravdu, ale chce „vsetky variacie 12!“ - ten faktoriál na kombinace moc neukazuje ;-)
AM_
Profil
to máš sice pravdu, ale chce „vsetky variacie 12!“ - ten faktoriál na kombinace moc neukazuje ;-)
taky jsem si to myslel, ale jak praví TomášK, ve skutečnosti chce permutaci, takže asi tak, nepůsobí moc dobře, když se na fóru o programování motají dohromady základní pojmy středoškolské matiky :)
Jinak vážně by mě zajímalo, na co chce výpis řad o 479 001 600 řádcích, jestli je to domácí úkol tak aby si na dovoz výtisku do školy pořídil kamión...
donner
Profil *
Ja to potrebujem pdostate do skoly, donesem to v Notebooku
AM_
Profil
donner
Mohu se optat, ve které škole vám dávají za úkol vytvořit třináctigigový výpis? :)
donner
Profil *
:D no to teraz nie je dolezite...robi to chybu, dal som tam len 1 2 3 a stane sa http://www.playradio.warke.sk/faktorial.php
AM_
Profil
Použij klasické uvozovky " místo 66 a 99
donner
Profil *
miesto coho?
donner
Profil *
no skusil som zmenit toto
$phrase=”1 2 3”;

na
$phrase="1 2 3";
AM_
Profil
donner
ano, ale musíš to udělat všude.
donner
Profil *
bolo tam tych chyb ovela viac, ale s touto si z neviem rady...vytera teraz ten subor asi takto:
<?

// Factorial
function fact($s){
if ($s==0) return 1;
else return $fact = $s * fact($s-1);
}

$phrase="1 2 3";
// Let’s count the number of words by creating an array
$words=explode(" ", $phrase);
$n=count($words);
    
// Here comes a loop that creates all possible combinations of array positions
for ($m=1; $m<=fact($n); $m++)
{
$ken = $m-1;
$f = 1;
$a = array();
for($iaz=1; $iaz<=$n; $iaz++)
{
$a[$iaz] = $iaz;
$f = $f*$iaz;
}
for($iaz=1; $iaz<=$n-1; $iaz++)
{
$f = $f/($n+1-$iaz);
$selnum = $iaz+$ken/$f;
$temp = $a[$selnum];
for($jin=$selnum; $jin>=$iaz+1; $jin–)
{
$a[$jin] = $a[$jin-1];
}
$a[$iaz] = $temp;
$ken = $ken%$f;
}
$t=1;

// Let’s start creating a word combination: we have all the necessary positions
$newphrase="";

// Here is the while loop that creates the word combination
while ($t<=$n)
{
$newphrase.=$words[$a[$t]-1]." ";
$t++;
}
// Output of the phrase
echo $newphrase."\r\n";

}

?>


a stale nejak chyba
bohyn
Profil
donner
vsim jsem si chybky
for($jin=$selnum; $jin>=$iaz+1; $jin-–)


Mimochodem nepouzivej echo, ale vypisuj to vsechno rovnou do souboru - prohlizec by se z 12GB souboru zbaznil.
Jinak pocitej s behem scriptu v radu hodin, kdybys to napsal v C nebo jinem kompilovanem jazyce tak by to bylo mnohem rychlejsi.
PS: ucitel je blb.
AM_
Profil
a stale nejak chyba
tuto větu ti tímto virtuálně omlacuji o hlavu. Buď té lásky a napiš sem, jaká chyba. Fakt je,že ten kód je napsaný dost hrozně, ten co to psal zřejmě neměl moc fantazii na názvy proměnných.
donner
Profil *
ved mate link kde je ten subor, tak sa na chybu pozries, akto by mi to anpisal v C? a ako to mam dat rovno do suboru?
donner
Profil *
stale ta ista chyba
http://www.playradio.warke.sk/faktorial.php
bohyn
Profil
donner
dat rovno do suboru?
fopen() a fwrite()

stale ta ista chyba
script narazi na casovy limit. Tipuju na nekonecnou smycku.
donner
Profil *
A ako to vyriesit?
bohyn
Profil
donner
Opravil jsi tu chybu co jsem nasel v [#16]?
donner
Profil *
jj
Visitor
Profil *
Tam se faktorial vubec pocitat nema ne? Podle toho co pises vsetky mozne kombinacie cisel 1-12 a nasledujici priklady tak se jedna o permutace jak uz bylo psano.

http://php.vrana.cz/permutace.php

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: