slowthinker:Fixní élka vstupu u složitosti je nesmysl. Už třeba proto, že se bavíme o asymptotické složitosti, tedy o složitosti kdy délka vstupu se limitně blíží k nekonečnu. Takže buďto můžeš prohlásit n za konstantu, nebo mu povolit růst do nekonečna (to ale nejde s fixní délkou vstupu).
Ono pokud měříš složitost dle délky vstupu pro n zadané fixní délkou, tak samozřejmě nejdéle to vždy poběží, když n je maximální. A vstup je furt stejně dlouhý, takže vlastně měříš složitost algoritmu: "jaký je nejlevnější košík pro C", kde C je konstanta (2^délku n). Ale to je už trochu jinej algoritmus.
(např. proto, že neumí řešit všechny případy).
Seřazení dvaceti čísel variabilní délky má taky lineární složitost. (s délkou čísel roste jen lineárně) - a přesto má řazení složitost větší: n*log(n).
Tohle tvrzení k důkazu nijak nepřispívá, ze dvou prázdných košíků stejně nic nesestavíš. S tou indukcí bych na tvé místě začal od jedničky...
Při indukci je vyžadováno, aby pro krok n byl vyřešen krok n-1. Takže mám dvě možnosti, buď vyřeším úplně triviální případ pro nulu (byť z nulového košíku nikdy další skládat nebudu), nebo pro jedničku, kdy je to složitější. Jsem línej člověk a tak radši vyřeším tu nulu. :-P.
PS: Jedička se pak vyřeší jako běžnej krok, holt se tam prostě půlka neuplatní, protože neexistuje žádná vhodná kombinace A a B, ale co mi po tom?
jaromír:V čem je lepší?
Ty jen projdeš stromovou strukturu.... :-) Že je velikost té stromové struktury exponenciální (2^n vrcholů stromu)ty už jaksi nevadí.... Vždyť sám píšeš, že pro větší počty to bude pomalý.
Jestli chceš přesně vědět, v čem je dynamický programování lepší, tak třeba v tom, že pokud máš balení s jedním a dvěma kusama, obě za korunu kus, tak zatímco dynamické programování rozvine jen jedno řešení a u druhého zjistí, že není lepší a zahodí ho už hned jak vezme do ruky to dvoukusový balení, tak ty rozvíjíš obě možnosti a zjistíš, že jsou ekvivalentní teprve poté, co prohledáš celý podstrom.
Exaktnějc řečeno, tvoje řešení není pseudopolynomiální, zatímco dynamické programování ano.
Tímto způsobem se mi nemůže stát, aby se nejvýhodnější sestava objevila na konci hledání, neboť by musela být kombinací těch nejdražších balíčků.
Ach jo. Opravdu?
Chceš 1600 kusů
400 kusů celkem za 4000
1 kus za 10000000
+ hromada 300 - 399 kusových balení za cenu pod 3000.
Výsledná kombinace bude obsahovat 4x4 kusy, ale na tu přijdeš skoro až jako poslední.
Další věc je, že i když přijdeš na nejlepší kombinaci rychle, tak pokud jsou ceny hodně podobné, tak stejně zbytek stromu musíš projít hodně do hloubky, než přijdeš na to, že
ostatní kombinace jsou horší.