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 18. 12. 2011 00:46

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

algoritmus zahradník

Zdravím. Dostal jsem za úkol naprogramovat následující program a nevím jak to realizovat:

Jste zahradníci a chcete sázet jeden dlouhý řádek cibule a česneku
● Nechcete sázet dva česneky těsně vedle sebe, vždy mezi ně zasadíte minimálně jednu cibuli
● Kolika různými způsoby můžete řádek osázet?
● Vypište všechny možnosti a spočtěte jejich počet
● Řádek bude vždy obsahovat N sazeniček

Snažím se to splácat v Javě a už mi z toho jde hlava kolem. Budu rád za jakékoli popíchnutí.

Offline

 

#2 18. 12. 2011 12:55

Dioxid
Příspěvky: 416
Reputace:   13 
 

Re: algoritmus zahradník

Zdravím, napadá mne jen řešení s asymptotickou časovou složitostí $O(2^N)$. A sice zkoušení všech možností. Využil bych pole jedniček a nul s délkou N (1 bude česnek, 0 bude cibule). Na začátku bude celé pole vypadat takto: (pro N=4)
0000
To pole si můžeme představit jako číslo v dvojkové soustavě, které budeme zvyšovat o 1. Další stavy budou vypadat takto:
0001
0010
0011 (neodpovídá zadání)
0100
0101
0110 (neodpovídá zadání)
0111 (neodpovídá zadání)
1000
1001
1010
1011 (neodpovídá zadání)
1100 (neodpovídá zadání)
1101 (neodpovídá zadání)
1110 (neodpovídá zadání)
1111 (neodpovídá zadání)

Daná časová složitost se ale může trochu vylepšit (jak je vidět z příkladu) - pokud jsou v poli dvě jedničky za sebou tak již nemá cenu dělat operace, které by změnily hodnoty "za nimi" - když řešení není 1100 tak nebude řešením ani 1101 ani 1110 nebo 1111. Tak si můžeme (v tomto případě) zlepšit počet ověřování z 16 na 11.


Jsem omylný, proto ne vše, co jsem napsal, je zaručeně správně.
468

Offline

 

#3 18. 12. 2011 13:37

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

Re: algoritmus zahradník

Pro n sazenic vyjde n-té Fibonacciho číslo. To jde samo o sobě spočítat rychle, ale pokud chceme možnosti vypsat, nedostaneme se se složitostí pod 1.6^n.


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

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson