Petr Malát | Úloha 1 | Úloha 2 | Úloha 3 | Úloha 4 | Úloha 5 | Úloha 6 | Pondělí 11:00 |
---|
Naprogramujte řešení 0/1 problému batohu hrubou silou. Na zkušebních datech pozorujte závislost výpočetního času na n. Naprogramujte řešení 0/1 problému batohu heuristikou podle poměru cena/váha.
Pozorujte:Řešení pomocí hrubé síly projde všechny přípustné možnosti a vždy najde nejlepší řešení.
Rekurzivní funkcí se postupně procházejí všechny možné stavy nepřetíženého batohu. Zapamatuje se nejlepší stav a jeho cena. Zdrojový kód programu je zde.
Řešení heuristikou nemusí najít optimální řešení. Jeho výhoda je v rychlosti.
Předměty se sestupně seřadí (quicksortem) podle poměru cena/váha. Potom se v pořadí vzniklém řazením přidávají do batohu (v případě, že ho nepřetíží). Zdrojový kód programu je zde.
Měření byla provedena na počítači s procesorem Pentium III@700MHz a pod operačním systémem Linux 2.6.22. Programy jsou naprogramovány v jazyce C a byly přeloženy pomocí gcc 4.2.1.
Z grafu je dobře viditelná exponenciální složitost algoritmu využívajícího hrubou sílu a rychle rostoucí rozdíl doby výpočtu obou algoritmů. |
![]() |
Z naměřených dat je patrné, že chyba se vzrůstajícím počtem věcí klesá. Důvod bude nejspíše ten, že při větším počtu věcí se méně projeví špatný výběr několika z nich. |
![]() |