Redukcia (teoretická informatika)

Zo stránky testwiki
Verzia z 23:36, 27. december 2024, ktorú vytvoril imported>Matej Selepec (growthexperiments-addlink-summary-summary:1|0|1)
(rozdiel) ← Staršia verzia | Aktuálna úprava (rozdiel) | Novšia verzia → (rozdiel)
Prejsť na navigáciu Prejsť na vyhľadávanie

Redukcia v zmysle teórie vypočítateľnosti je vyjadrenie problému v podobe inštancie iného problému. Pomocou redukcie sa definujú triedy zložitosti. Ak sa dá problém A redukovať na problém B, a B sa dá redukovať na A, hovoríme, že A a B sú rovnako ťažké problémy, alebo že A aj B patria do rovnakej triedy zložitosti.

Ako funguje redukcia problému A na problém B? Je to taký postup, ktorý:

  1. transformuje vstup problému A na vstup problému B
  2. vyrieši B
  3. transformuje výstup B na výstup A

Príklad:

Majme čiernu skrinku B, ktorá vie vypočítať funkciu sínus. Chceme vedieť počítať problém A, ktorý pre dané x vráti súčin sinxcosx.

Na to môžeme využiť vzorec sin2x=2sinxcosx. Treba len vhodne transformovať vstupy a výstupy. Rovnica sa dá upraviť na sinxcosx=sin2x2. Takže naša redukcia bude vyzerať takto:

  1. zoberieme vstup x, transformujeme ho na 2x
  2. vyriešime B so vstupom 2x, výsledok bude sin2x
  3. tento výsledok vydelíme dvoma, čo je výsledok A

Tento príklad je len ilustračný, redukcia sa využíva hlavne v prípadoch, keď je náročné reprodukovať riešenie problému B, alebo sme na to leniví. Využijeme len to, že B vieme riešiť. Napríklad na kalkulačke máme tlačidlo sin, ktorý počíta sínus, ale málokoho zaujíma, ako vnútorne funguje. Vyššie uvedený príklad sa dá využiť v prípade, keď sa nám pokazí tlačidlo kosínus.