36PAA - Batoh 1

Zadání

Definice problému

Implementace

Úlohu jsem implementoval v Jazyce C# jako konzolovou aplikaci. Data načítá ze standardního vstup a výsledky vypisuje na stdandardní výstup. Řešení jsem rozdělil do 4 tříd.

Parametry programu

Naměřené hodnoty a výsledky

Měřil jsem na NTB s procesorem Centino 1.4GHz, nastavení max Performance při napájení z adaptéru. Použitý OS: Windows XP SP2 s .net Framework 2.

Tabulka výsledků měření

Protože rozlišení čítače (Environment.TickCount) je 16 ms, je nutné instance spočítat vícekrát a výsledný čas získat vydělením počtem opakování. Pro měření časové složitosti hrubé síly jsem experimentálně nastavoval počet opakovaní od 100 000 (pro n = 4) do 1 (pro n = 30). Pro měření heuristiky jsem nastavil 100 000 opakování pro každou instanci problému.

nhrubá síla [ms]heuristika [ms]IDmax. chybyprum. zhoršenímax. chyba
40,00750,007190372,17%36,36%
100,0440,01590801,73%11,48%
151,2290,02191261,32%8,54%
2036,8650,02791651,14%8,43%
22136,7360,03092371,05%7,23%
251140,040,03492830,96%3,68%
274803,90,03693380,90%10,60%
3038723,10,04193800,85%5,51%

Graf: Časová závislost

časová složitost

Graf: Závislost průměrné chyby na velikosti instance

Závislost průměrné chyby na velikosti instance

Graf: Závislost maximální chyby na velikosti instance

Závislost maximální chyby na velikosti instance

Závěr

Řešení hrubou silou dává sice nejlepší možné řešení, ale daní za prohledání celého stavového prostoru je neúnosná (exponenciální) časová složitost. Překvapující jsou poměrně dobré výsledky jednoduché heuristiky. Časová závislost je lineární (obsahuje velkou multiplikativní konstantu, takže pro malá n se neprojeví složitost řazení n.log(n)) a dosahuje průměrné chyby v nejhorším případě 2,17% pro zadané instance. Z grafu je dobře patrné, že průměrná relativní chyba s velikostí instance klesá.