Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 04. 05. 2009 18:18 — Editoval terry (04. 05. 2009 18:31)

terry
Zelenáč
Příspěvky: 1
Reputace:   
 

algoritmus - následující permutace

ahoj, máme tento úkol na seminář programování a já si s tím vůbec nevím rady, mohl by mi s tim někdo pomoc..  dík

Následující permutace
Na standardním vstupu je dáno nejprve jedno kladné celé číslo N, které není větší než 100. Následuje permutace množiny přirozených čísel {1, 2, ..., N}, přičemž jednotlivá čísla jsou na vstupu od sebe oddělena mezerami. Všechny vstupní údaje jsou umístěny na jednom řádku.
Program k zadané permutaci určí permutaci bezprostředně po ní následující v lexikografickém uspořádání. Výslednou permutaci vypíše do jednoho řádku na standardní výstup, její jednotlivé členy budou na výstupu opět odděleny mezerami. Pokud byla zadána poslední permutace v lexikogafickém uspořádání a následující permutace tedy neexistuje, program vypíše pouze znakový řetězec NEEXISTUJE a skončí.

Příklad vstupu:
6 1 3 6 2 5 4

Odpovídající správný výstup:
1 3 6 4 2 5

Offline

 

#2 04. 05. 2009 19:25

Kondr
Veterán
Místo: Linz, Österreich
Příspěvky: 4246
Škola: FI MU 2013
Pozice: Vývojář, JKU
Reputace:   38 
 

Re: algoritmus - následující permutace

Abychom permutaci lexikograficky zvětšili jenom o trochu, budeme se sanžit dělt změnu co nejvíc na konci. A protože ji chceme zvětšit, znamená to, že první (bráno zleva) položka, kterou změním, musí být zvětšena. Proto pokud je konec permutace klesající, prohozením dvou prvků permutaci naopak znížíme. Pokud je klesající celá permutace, je lexikograficky největší.

Stačí posloupnost projít od konce a zjistit, jaká část je klesající. Pokudcelá permutace, vypíšeme NEEXISTUJE.  Předpokládejme nyní, že je klesající pouze část, viz příklad:
1,4,2,6,5,3
po ní má násedovat
1,4,3,2,5,6
jak jsme to vyrobili: odsekli jsme klesající knec a jeden znak navíc. Zbylo nám 1,4, to jsme opsali na výstup. Místo dvojky použijeme to číslo z klesajícího konce, které je vzhledem ke dvojce nejbližší vyšší. To vypíšeme na výstup. Do zbytku původně klesajícího konce zařadíme dvojku a tento konec vypíšeme v rostoucím pořadí.

Jinak je na to funkce v STL: http://marknelson.us/2002/03/01/next-permutation


BRKOS - matematický korespondenční seminář pro střední školy

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson