Wyznaczanie k-tej permutacji zbioru n-elementowego.
Ostatnio zmodyfikowano 2015-03-13 21:44
pekfos |
» 2015-03-08 18:46:25 byle nie dłuższy niż 20 elemntów |
Chyba można by niewielkim kosztem wycisnąć 21, bo pierwsze co robisz z n silnią, to dzielisz przez n ;) |
|
Monika90 |
» 2015-03-08 19:13:01 Można by, ale dla 21 elementów i tak większość permutacji będzie miało numery poza zakresem unsigned long long, więc chyba nie warto. Zwłaszcza że dodałam asercję assert( n < f ); , więc początkowa wartość f jest przydatna. |
|
michal11 Temat założony przez niniejszego użytkownika |
» 2015-03-08 19:21:46 No to może napisze wprost do czego mi to potrzebne. Robię zadanie ze spoja http://pl.spoj.com/problems/TPERML/, napisałem już sobie funkcję na następną permutacje ale okazało się, ze przekraczam limit czasu, więc chcę teraz wyliczyć k-tą permutacje od razu i wypisywać tylko kolejne. Obawiam się, że rozwiązanie Moniki może nie przejść ponieważ liczba ma mieć do 100 cyfr. Może ktoś ma pomysł jak to rozwiązać ? |
|
Monika90 |
» 2015-03-08 19:48:56 Spróbuj to napisać moim sposobem, ale w języku, który ma liczby całkowite o nieograniczonej precyzji. Jeżeli to przejdzie, to będziemy wiedzili, że jesteśmy na właściwej drodze. |
|
michal11 Temat założony przez niniejszego użytkownika |
» 2015-03-08 19:54:44 |
|
Piastlis |
» 2015-03-13 13:47:13 Szybki algorytm na k- tą permutaję z n... Wystarczy zauważyć ze przestawienie z n na n-1 następuje po (n-1)!+1 permutacjach, czyli : 1. Jeżeli k>(n-1)! zamieniasz n z n-1 ,k=k-(n-1)!-1 2. n=n-1,punkt 1. Problem z długością czyfry można obejść korzystając z tablicy znaków. Wystarczy tylko mnożenie liczb na znakach i odejmowanie 1. Algorytm sam się prosi o rekurencję. |
|
Piastlis |
» 2015-03-13 21:44:29 Oczywiście to nie jest pełen algorytm... Kilka punktów ominołem...Sam na nie powinieneś wpaść. Jak nie dasz rady to trudno. |
|
1 « 2 » |