Posted By: snake (Keeping on the sunny side) on 'CZprogram'
Title:     Re: Permutace
Date:      Wed Jun 25 00:07:04 2003

Na zacatek:

v cem to potrebujes? je to vymyslene pro kterykoli programovaci jazyk a je to
uloha, ktera se dava prvakum, aby ji naprogramovali v ramci 2 hodin vcetne
odladeni:-)...

No a dalsi poznamky: pokud to potrebujes spustit na 16, spocital jsi si, kolik 
vychazi "16!"? Je to 20 922 789 888 000, coz jsou biliony... Takze na 
normalnim procesoru se do roka nedopocitas. Posledni poznamka: pokud to ma vic 
reseni a Ty chces najit jenom jedno z nich, bude rozumnejsi asi vymyslet jiny 
postup, mohou to byt treba geneticke algoritmy... No a v nejposlednejsi rade 
dost zalezi na tom, jestli se cleny opakuji ci neopakuji... 

No a ted v kratkosti postup prohledavani pro n-faktorial:
rekurze (k=kolikata_cislice)
  - n = k+1 ? vypis permutaci; jinak
  - dej na k-tou pozici postupne cislici na k-te az n-te pozici a zavolej
    rekurzi (k+1); k-tou az n-tou pozici jde vytvorit bez dodatecnych
    promennych, staci vzdycky prohazovat dvojice, pokud ty permutace 
    nepotrebujes mit vzestupne serazene (prvni se zavola rekurze(k+1), pak
    se prohodi k. a k+1. clen a zavola rekurze, pak k. a k+2. a a...)

Vola se to samozrejme rekurze(1).

snake

>   Chci prohledavat do sirky reseni jednoho hlavolamu a prisel jsem, jak
> pozice
> hlavolamu zakodovat do cisla. Z cisla vyrobim pozici, tu pak je ohodnotim a
> kdyz to pustim pres noc, tak urcite najdu nejlepsi reseni:)
>
>   Abych to alespon trochu urychlil, tak jsem zjistil, ze pozice hry nejsou
> vsechna cisla, ale jen permutace. Napriklad pro delku cislice rovnu 3:
>
> 123
> 132
> 213
> 231
> 312
> 321
>
> V klidku to muzu pustit na vsechna trojciferna cisla,ale dovedete si
> predstavit ten bugr, kdyz bych to pustil na 16timistne cislo;)

Search the boards