46
Vývoj / Re:Algoritmus pro skládání kousků dřeva
« kdy: 09. 06. 2016, 11:30:15 »V tom případě by mohl algoritmus vypadat následovně (opět je jen lineární obvykle fungující implementace v případě "rozumné" distribuce dílků):Protipříklad:
1. Nadefinovat left=0 (levá hranice), right=0 (pravá hranice), current=0 (aktuální pozice konce)
2. Vzít následující element, porovnat current-element-left a current+element-right a podle toho, který z nich bude větší, umístit element doleva či doprava. Minimalizuje buď přesah nebo není-li žádný, maximalizuje prostor pro další krok
3. Podle předchozího kroku upravit current = current+-element a pokud překročí left/right hranice, tak i ty
4. Loop to (2) until input empty
Váš algoritmus: 1-3+1+4=5
Správné řešení: 1-3-1+4=4
Já vím, že existují protipříklady, proto jsem "lineární obvykle fungující implementace v případě rozumné distribuce". Nelze (aspoň si to zatím celý svět myslí) vyřešit NP-úplný problém v rozumném čase.
Nicméně, jak podotknul "j", v zásadě by tento případ vylepšilo nastavení "end" na délku maximálního dílku. Nicméně některé zase zhorší: 1+1-4 místo 1-1+4. V zásadě jde o to před největším dílkem dostat se na 0 nebo na max...

