Máme-li optimalizační problémy, tak si kvůli složitosti často vystačíme s -aproximací, čili s řešením které má cenu , kde značíme optimum, pro konstantu v případě minimalizačního problému. Je to totéž jako říci, že relativní chyba nepřekročí . Pro maximalizační problémy chceme alespoň optima.


Problém Obchodního cestujícího

Máme neorientovaný graf s a chceme nejkratší hamiltonovskou kružnici. Hamiltonovskost je sama o sobě úplná. Relaxujeme problém a budou nás zajímat je úplné grafy s platnou trojúhelníkovou nerovností.


Algoritmus

Najdeme minimální kostru a obejdeme ji, zakořeníme kostru projdeme ji do hloubky a poznamenáme si hrany kterými jsme prošli. Každou hranu kostry ale projdeme 2krát a je to sled. Sled upravíme tak, abychom vždy kdybychom měli navštívit již navštívený vrchol tak místo toho půjdeme do nejbližšího nenavštíveného. Máme tedy hamiltonovskost a jelikož v grafu platí trojúhelníková nerovnost, celková délka nevzrostla.


Algortimus je 2-aproximační

Označíme si délku minimální kostry a jako optimum a jako výsledek algoritmu. Z toho jak jsme vytvořili nám vychází a vychází nám .


Problém batohu

Máme předmětů s hmotnostmi a cenami , a danou kapacitu batohu .

Chceme najít takovou podmnožinu předmětů , že:

  • a je maximální.

Aproximace — kvantování cen

Chceme nalézt řešení s relativní chybou nejvýše .

Idea:

Zmenšíme ceny, aby byly menší než pevné a tím zrychlíme DP.


Kvantování cen

  • Označme
  • Kvantujeme ceny:
  • Nové ceny jsou celá čísla v intervalu
  • Zaokrouhlením může být každá cena snížena nejvýše o , tedy maximálně celkem
  • Aby chyba byla , volíme

Algoritmus AproximaceBatohu

  1. Odstraňme ze vstupu všechny předměty s
  2. Spočítejme , nastavíme
  3. Pro každé :
  1. Vyřešíme batoh pomocí DP pro kvantované ceny , původní hmotnosti a kapacitu
  2. Vrátíme výběr předmětů z kvantovaného řešení a spočítej jejich hodnotu v původních cenách

Důkaz přesnosti

  • Označme jako optimální řešení původního problému
  • Označme jako výstup našeho algoritmu Získáme:

a

Složením obou:


Složitost

  • Kvantované ceny mají maximální součet
  • Čas na řešení DP:
  • Ostatní kroky běží v

Problém batohu s malými čísly (pseudopolynomiální algoritmus)

Zadání

Máme:

  • předmětů
  • každý s hmotností a cenou
  • kapacitu batohu

Cílem je najít podmnožinu , která:

  • se vejde do batohu:
  • co největší cenu: je maximální

Idea algoritmu

Namísto klasického dynamického programování podle hmotnosti, sledujeme všechny možné ceny a ke každé hledáme nejmenší možnou hmotnost, za kterou ji lze dosáhnout.

Definice

Označme:

  • = celková suma cen (horní mez)
  • = minimální možná hmotnost, kterou lze získat pomocí prvních předmětů s přesnou cenou
    • Pokud nelze ceny dosáhnout, položíme

Iniciace

Pro (žádné předměty):

  • pro

Rekurence (přechod)

Pro :

  • buď -tý předmět nevybereme: pak
  • nebo ho vybereme: pak (pokud )

Tedy celkově:

Výstup

Po výpočtu všech najdeme největší takové, že:

To je maximální dosažitelná cena při dané kapacitě.

Rekonstrukce řešení

Zavedeme si pomocné pole = index posledního předmětu použitý k dosažení ceny s hmotností .

Pak zpětně dohledáme předměty:

  • je poslední
  • je předposlední
  • atd. To celé trvá

Časová složitost

  • Přechod přes předmětů a možných cen:
  • Rekonstrukce: