mirror of
https://github.com/kristoferssolo/Theory-of-Algorithms-Cheatsheet.git
synced 2025-10-21 20:10:39 +00:00
some reordering / corrections
This commit is contained in:
parent
a5b5c5732d
commit
e7abda0d1a
553
main.typ
553
main.typ
@ -32,12 +32,14 @@ Var būt 3 veida uzdevumi: stāvokļu, tekstuāls, vairāklenšu.
|
|||||||
$(q, a) -> (q', a', d)$ -- stāvoklī $q$ redzot $a$, ieraksta $a'$
|
$(q, a) -> (q', a', d)$ -- stāvoklī $q$ redzot $a$, ieraksta $a'$
|
||||||
un iet virzienā $d space (<- "vai" ->)$.
|
un iet virzienā $d space (<- "vai" ->)$.
|
||||||
|
|
||||||
=== Divas lentes
|
=== Divas (vai vairākas fiksētas) lentes
|
||||||
$(q, a_1, a_2) -> (q', b_1, b_2, d_1, d_2)$ -- $a_1$, $b_1$, $d_1$ pirmai
|
$(q, a_1, a_2) -> (q', b_1, b_2, d_1, d_2)$ -- $a_1$, $b_1$, $d_1$ pirmai
|
||||||
lentei un $a_2$, $b_2$, $d_2$ otrai lentei. Svarīga atšķirība ir ka
|
lentei un $a_2$, $b_2$, $d_2$ otrai lentei. Svarīga atšķirība ir ka
|
||||||
vairlāklenšu TM papildus $<-$ un $->$ virzieniem ir $arrow.b$ (stāvēšana uz
|
vairlāklenšu TM papildus $<-$ un $->$ virzieniem ir $arrow.b$ (stāvēšana uz
|
||||||
vietas).
|
vietas).
|
||||||
|
|
||||||
|
\* Derīgs ar uzdevumiem, kur palīdz kopēšana/salīdzināšana.
|
||||||
|
|
||||||
=== Stāvēšana uz vietas
|
=== Stāvēšana uz vietas
|
||||||
Nosimulēt stāvēšanu uz vietas jeb $d=0$ var šādi:
|
Nosimulēt stāvēšanu uz vietas jeb $d=0$ var šādi:
|
||||||
- $(q, a) -> (q_"new", a', ->)$
|
- $(q, a) -> (q_"new", a', ->)$
|
||||||
@ -118,109 +120,6 @@ Vai ieejas virkne $x \# x$, kur $x in {0,1}^*$
|
|||||||
- Sasniedzot $\#$, uz otras lentes iet atpakaļ līdz pirmajam simbolam.
|
- Sasniedzot $\#$, uz otras lentes iet atpakaļ līdz pirmajam simbolam.
|
||||||
- Salīdzina pirmās lentes simbolus pēc $\#$ ar otro lenti.
|
- Salīdzina pirmās lentes simbolus pēc $\#$ ar otro lenti.
|
||||||
|
|
||||||
= Lielais $O$ un mazais $o$
|
|
||||||
|
|
||||||
Notācija, kas tiek izmantota, lai raksturotu *funkciju* sarežģītību
|
|
||||||
asimptotiski.
|
|
||||||
|
|
||||||
== Lielais-O (formālā definīcija)
|
|
||||||
|
|
||||||
$f(n) in O(g(n))$, ja:
|
|
||||||
|
|
||||||
$exists C > 0, exists n_0 > 0:$ $(forall n >= n_0: f(n) <= c * g(n))$
|
|
||||||
|
|
||||||
Tas nozīmē, ka funkcija $f(n)$ asimptotiski nepārsniedz konstanti $c$ reizinātu
|
|
||||||
$g(n)$.
|
|
||||||
|
|
||||||
/*
|
|
||||||
=== Piemērs
|
|
||||||
|
|
||||||
$f(n) = 17n^2 + 23n + 4$
|
|
||||||
$g(n) = n^2$
|
|
||||||
|
|
||||||
Tad $f(n) in O(n^2)$, jo:
|
|
||||||
|
|
||||||
$17n^2 + 23n + 4 \leq 17n^2 + 23n^2 + 4n^2 = 44n^2$
|
|
||||||
tātad $C = 44$.
|
|
||||||
*/
|
|
||||||
|
|
||||||
== Mazais-o (formālā definīcija)
|
|
||||||
|
|
||||||
$f(n) in o(g(n))$, ja:
|
|
||||||
|
|
||||||
$
|
|
||||||
lim_(i -> infinity) f(n) / g(n) = 0
|
|
||||||
$
|
|
||||||
|
|
||||||
Tas nozīmē, ka funkcija $f(n)$ kļūst nenozīmīga attiecībā pret $g(n)$, $n$
|
|
||||||
tiecoties uz bezgalību.
|
|
||||||
|
|
||||||
/*
|
|
||||||
=== Piemērs
|
|
||||||
|
|
||||||
$log(n) \in o(n)$
|
|
||||||
jo jebkuram $epsilon > 0$ pietiekami lieliem $n$:
|
|
||||||
$log(n) <= epsilon * n$.
|
|
||||||
*/
|
|
||||||
|
|
||||||
== *$f(n) in O(g(n))$* pamatojuma triks
|
|
||||||
|
|
||||||
Ja ir pierādījums, ka $f(n) in o(g(n))$, tad automātiski var secināt, ka $f(n)
|
|
||||||
in O(g(n))$. *Tikai pozitīvajā gadījumā!* Jo mazais $o$ ir stingrāka prasība
|
|
||||||
par lielo $O$.
|
|
||||||
|
|
||||||
== Pamatojuma soļi
|
|
||||||
|
|
||||||
- Ja funkcija pielīdzināta lielajam $O$:
|
|
||||||
+ Salīdzina funkcijas augstāko pakāpi ar doto $O$ pakāpi.
|
|
||||||
+ Ja funkcijas pakāpe ir lielāka, tad vienādojums būs patiess, jo funkcija aug
|
|
||||||
straujāk.
|
|
||||||
+ Korektam risinājumam jāpamato kāpēc definīcijas nevienādība ir patiesa
|
|
||||||
visiem $n >= n_0$ un iespējams jāparāda piemēra $c$.
|
|
||||||
- Ja funkcija pielīdzināta mazajam $o$:
|
|
||||||
+ Jāievieto dotais robežā $lim_(x->oo)f(x)/g(x)$;
|
|
||||||
+ Rezultāts ir 0, patiess, citādi -- nepatiess.
|
|
||||||
|
|
||||||
== Piemērs (lielais-O)
|
|
||||||
|
|
||||||
$ 2n^4 + 6n^2 + 17 =^? O(n^4) $
|
|
||||||
|
|
||||||
Izteiksme ir patiesa, tā kā kreisās puses izteiksmes augstākā pakāpe jeb kārta
|
|
||||||
ir $4$ un iekš $O$ tā arī ir $4$.
|
|
||||||
|
|
||||||
== Piemērs (lielais-O)
|
|
||||||
$ 2n^4 + 6n^2 + 17 =^? O(n^3) $
|
|
||||||
|
|
||||||
Izteiksme ir aplama, jo kreisajā pusē augstākā pakāpe ir $4$, kamēr labajā ir
|
|
||||||
norādīta $3$, un $4$ pakāpes izteiksmi nevar izpildīt $O(n^3)$.
|
|
||||||
|
|
||||||
== Piemērs (lielais-O)
|
|
||||||
$ n^3 + 17n + 4 in^? O(n^3) $
|
|
||||||
|
|
||||||
Jā, $n^3 + 17n + 4 <= n^3 + 17n^3 + 4n^3 = 22n^3$.
|
|
||||||
|
|
||||||
== Piemērs (lielais-O)
|
|
||||||
$ n^4 + 17n + 4 in^? O(n^3) $
|
|
||||||
|
|
||||||
Nē $n^4 + 17n + 4 > n^4 = n dot n^3$
|
|
||||||
|
|
||||||
== Piemērs (mazais-O) <small-o-example-3>
|
|
||||||
$ n log^4 n =^? o(n^1.5) $
|
|
||||||
|
|
||||||
Ir zināms, ka mazajā $O$ notācijai, ja $lim_(x->oo)f(x)/g(x)$, kur $f(x)$ ir
|
|
||||||
funkcija un $g(x)$ ir $o$, tad vienādība izpildās.
|
|
||||||
Ievietojot vērtības $ lim_(n->oo) (n log^4 n)/n^1.5=0 $
|
|
||||||
Tātad vienādojums ir
|
|
||||||
patiess.
|
|
||||||
|
|
||||||
== Piemērs (mazais-O)
|
|
||||||
$ 2^n n^2 =^? o(n^3) $
|
|
||||||
|
|
||||||
Pēc tās pašas aprakstītās īpašības, kā @small-o-example-3, sanāktu
|
|
||||||
$ lim_(n->oo) (2^n n^2)/3^n $
|
|
||||||
un tā kā $3^n$ aug ātrāk kā $2^n$, šī robeža būs $0$ un sākotnējais
|
|
||||||
vienādojums būs patiess.
|
|
||||||
|
|
||||||
= Sanumurējamība
|
= Sanumurējamība
|
||||||
== Definīcija
|
== Definīcija
|
||||||
- Bezgalīgas kopas $A$, $B$ ir vienāda izmēra, ja ir bijekcija ($1:1$ attiecība)
|
- Bezgalīgas kopas $A$, $B$ ir vienāda izmēra, ja ir bijekcija ($1:1$ attiecība)
|
||||||
@ -230,17 +129,16 @@ vienādojums būs patiess.
|
|||||||
#teo[$A$ ir sanumurējama ar atkārtojumiem tad un tikai tad, ja $A$ ir sanumurējama.]
|
#teo[$A$ ir sanumurējama ar atkārtojumiem tad un tikai tad, ja $A$ ir sanumurējama.]
|
||||||
|
|
||||||
== Sanumerātības pierādījums
|
== Sanumerātības pierādījums
|
||||||
- Kopa ir sanumurējama, ja tajā eksistē viennozīmīga atbilstība (bijekcija)
|
- Kopa ir sanumurējama, ja tajā eksistē bijekcija starp kopas elementiem un
|
||||||
starp kopas elementiem un naturāliem skaitļiem.
|
naturāliem skaitļiem. Citos vārdos sakot, katram kopas elementam var piešķirt
|
||||||
Citos vārdos sakot, katram kopas elementam var piešķirt unikālu naturālu
|
unikālu naturālu skaitli.
|
||||||
skaitli.
|
|
||||||
- Ja kopa ir galīga, tā ir triviāli sanumurējama, jo katram elementam var
|
- Ja kopa ir galīga, tā ir triviāli sanumurējama, jo katram elementam var
|
||||||
piešķirt unikālu naturālu skaitli.
|
piešķirt unikālu naturālu skaitli.
|
||||||
- Ja kopa ir bezgalīga, jāņem vērā divi varianti:
|
- Ja kopa ir bezgalīga (ar ko bieži vien darbojamies), jāņem vērā divi varianti:
|
||||||
- Ja var izveidot bijekciju starp kopu un naturāliem skaitļiem, tad jāpierāda,
|
- Ja var izveidot bijekciju starp kopu un naturāliem skaitļiem, tad
|
||||||
ka bijekcija nepastāv.
|
jāpierāda, ka bijekcija pastāv -- Var skaidri definēt funkciju, kas katram
|
||||||
Var skaidri definēt funkciju, kas katram kopas elementam piešķir unikālu
|
kopas elementam piešķir unikālu naturālu skaitli un parādīt, ka tā apvieno
|
||||||
naturālu skaitli un parādīt, ka tā apvieno visus elementus bez dublēšanās.
|
visus elementus bez dublēšanās.
|
||||||
- Ja nevar atrast bijekciju starp kopu un naturāliem skaitļiem, tad jāpierāda,
|
- Ja nevar atrast bijekciju starp kopu un naturāliem skaitļiem, tad jāpierāda,
|
||||||
ka bijekcija nepastāv.
|
ka bijekcija nepastāv.
|
||||||
Parasti tas tiek darīts, izmantojot pierādīšanas tehnikas, piemēram,
|
Parasti tas tiek darīts, izmantojot pierādīšanas tehnikas, piemēram,
|
||||||
@ -248,16 +146,50 @@ vienādojums būs patiess.
|
|||||||
- Ja izdodas pierādīt, ka start kopu un naturāliem skaitļiem nav bijekcijas, tad
|
- Ja izdodas pierādīt, ka start kopu un naturāliem skaitļiem nav bijekcijas, tad
|
||||||
kopa ir nesaskaitāma.
|
kopa ir nesaskaitāma.
|
||||||
|
|
||||||
=== Diagonālinācija <diagonalization>
|
=== Algoritmiska sanumurētība (par sanumerātību)
|
||||||
Ietver paņēmienu, ka ir saraksts vai uzskaitījums ar visiem kopas elementiem un
|
|
||||||
tiek konstruēts jauns elementu, kas neatrodas šajā sarakstā.
|
|
||||||
Tas demonstrē, ka kopa ir nesaskaitāma, jo vienmēr var izveidot jaunu elementu,
|
|
||||||
kas nav iekļauts uzskaitē.
|
|
||||||
|
|
||||||
=== Pretruna <contradiction>
|
- Kopa $A$ ir sanumurējama, ja $A={x_1, x_2, ...}$
|
||||||
Pieņem, ka kopa ir saskaitāma un tad rodas pretruna.
|
- Kopa $A$ ir algoritmiski sanumurējama, ja ir Tjūringa mašīna, kas izdod virkni
|
||||||
To var izdarīt, parādot, ka kaut kādas kopas īpašības vai kardinalitāte ir
|
$x_1, x_2, ...$, kurai $A={x_1, x_2, ...}$
|
||||||
pretrunā ar sanumurējamības pieņēmumu.
|
#let DL = `DL`
|
||||||
|
#let IL = `IL`
|
||||||
|
Divu lenšu #TM, kur viena ir klasiska darba lente (#DL) un otra ir izvada
|
||||||
|
lente (#IL) (tikai rakstīšanai).
|
||||||
|
|
||||||
|
==== Piemērs $(a^k b^k mid(|) k>=0) "ir sanum.?"$
|
||||||
|
Pamatot, ka kopa ${a^k b^k mid(|) k>=0}$ ir algoritmiski sanumurējama.
|
||||||
|
|
||||||
|
+ Uzraksta uz izejas lentes tukšu vārdu.
|
||||||
|
+ Uzraksta vienu $a$ uz darba lentes.
|
||||||
|
+ Atkārto:
|
||||||
|
+ Uz ieejas lentes uzrakstām tikpat $a$, cik bija uz #DL;
|
||||||
|
+ Uz izejas lentes uzrakstām tikpat $b$, cik $a$ bija uz #DL;
|
||||||
|
+ Uz izejas lentes uzrakstām $\_$;
|
||||||
|
+ Uz darba lentes pierakstām klāt vienu $a$.
|
||||||
|
+ Izejas lente $=epsilon, a b, a a b b, a a a b b b,...$
|
||||||
|
|
||||||
|
==== Piemērs (atkārt. pēc \# ir sanum\.?)
|
||||||
|
Pamatot, ka kopa ${x \# x mid(|) x in {a, b}^* }$ ir algoritmiski sanumurējama.
|
||||||
|
|
||||||
|
+ Uz darba lentes iet cauri visiem $x$.
|
||||||
|
+ Katram $x$ uz izejas lentes uzraksta $x \# x$.
|
||||||
|
+ Uz izejas lentes uzraksta $\#\_$.
|
||||||
|
+ Uz darba lentes uzraksta $a$.
|
||||||
|
+ Atkārto:
|
||||||
|
+ Pārraksta darba lentes saturu $x$ uz izejas lenti;
|
||||||
|
+ Uzraksta $\#$ uz #IL, vēlreiz pārraksta $x$ uz #IL, uzrakstām $\_$ uz #IL.
|
||||||
|
+ Uz #DL nomaina $x$ pret nākošo vārdu.
|
||||||
|
|
||||||
|
=== Diagonālinācija (pret sanumurējāmību) <diagonalization>
|
||||||
|
Paņēmienu -- ir saraksts (pieņem, ka ir iegūts saraksts) vai uzskaitījums ar
|
||||||
|
visiem kopas elementiem un tiek konstruēts jauns elements, kas neatrodas šajā
|
||||||
|
sarakstā. Tas demonstrē, ka kopa ir nesanumurējama, jo vienmēr var izveidot
|
||||||
|
jaunu elementu, kas nav iekļauts uzskaitē (piemēram, reālos skaitļos).
|
||||||
|
|
||||||
|
=== Pretruna (pret sanumurējāmību) <contradiction>
|
||||||
|
Pieņem, ka kopa ir saskaitāma un tad rodas pretruna. To var izdarīt, parādot,
|
||||||
|
ka kaut kādas kopas īpašības vai kardinalitāte ir pretrunā ar sanumurējamības
|
||||||
|
pieņēmumu.
|
||||||
|
|
||||||
== Piemērs $(ZZ "sanumurētība")$
|
== Piemērs $(ZZ "sanumurētība")$
|
||||||
Vai visu veselo skaitļu kopa $ZZ={..., -1, 0, 1, ...}$ ir sanumurējama? \
|
Vai visu veselo skaitļu kopa $ZZ={..., -1, 0, 1, ...}$ ir sanumurējama? \
|
||||||
@ -283,7 +215,9 @@ visi iespējamie pāri bez atkārtojumiem.
|
|||||||
|
|
||||||
Lai pierādītu, ka naturālo skaitļu pāru $(k_1, k_2)$ kopa ir saskaitāma, mēs
|
Lai pierādītu, ka naturālo skaitļu pāru $(k_1, k_2)$ kopa ir saskaitāma, mēs
|
||||||
varam parādīt, ka funkcija $f(k_1, k_2)$ nodrošina bijekciju starp naturālo
|
varam parādīt, ka funkcija $f(k_1, k_2)$ nodrošina bijekciju starp naturālo
|
||||||
skaitļu pāru kopu un naturālo skaitļu kopu.
|
skaitļu pāru kopu un naturālo skaitļu kopu.
|
||||||
|
|
||||||
|
$"Injektivitāte" + "Surjektivitāte" = "Bijektivitāte"$
|
||||||
|
|
||||||
=== Injektivitāte
|
=== Injektivitāte
|
||||||
Pieņemsim, ka $f(k_1, k_2) = f(k_3, k_4)$, kur $(k_1, k_2)$ un $(k_3, k_4)$
|
Pieņemsim, ka $f(k_1, k_2) = f(k_3, k_4)$, kur $(k_1, k_2)$ un $(k_3, k_4)$
|
||||||
@ -359,130 +293,7 @@ Redukcijas analīze:
|
|||||||
|
|
||||||
Tādējādi #halt2 tiek reducēta uz #halt.
|
Tādējādi #halt2 tiek reducēta uz #halt.
|
||||||
|
|
||||||
= Daļēja atrisināmība
|
= Neatrisināmas (non-decidable) problēmas
|
||||||
== Definīcija
|
|
||||||
|
|
||||||
// Jorens: Tas teksta blāķis, kas šeit bija var apjucināt cilvēkus, viss kas
|
|
||||||
// vajadzīgs ir sarakstāms īsāk.
|
|
||||||
|
|
||||||
- $A$ –- daļēji atrisināma, ja ir Tjūringa mašīna $T$:
|
|
||||||
- Ja $A(x) = 1$, tad $T(x) = 1$.
|
|
||||||
- Ja $A(x) = 0$, tad $T(x) = 0$ vai $T(x)$ neapstājas.
|
|
||||||
|
|
||||||
Tas, ka problēma ir daļēji atrisināma, nozīmē, ka nav konkrēta un *vispārīga*
|
|
||||||
algoritma, kas vienmēr varētu sniegt pareizu "nē" atbildi gadījumiem ārpus
|
|
||||||
problēmas.
|
|
||||||
|
|
||||||
Var būt iespējams konstruēt Tjūringa mašīnu, kas apstājas un sniedz
|
|
||||||
"nē" atbildi noteiktiem gadījumiem ārpus problēmas, bet tas nav garantēts
|
|
||||||
visiem gadījumiem (_un īsti nav apskatīts šajā kursā_).
|
|
||||||
|
|
||||||
#teo[$A$ -- daļēji atrisināma tad un tikai tad, ja $A$ -- algoritmiski sanumurējama.]
|
|
||||||
|
|
||||||
Cits nosaukums daļējai atrisināmībai ir atpazīstamība (angl. recognizability).
|
|
||||||
|
|
||||||
= Algoritmiskā sanumurējamība
|
|
||||||
== Info
|
|
||||||
- Kopa $A$ ir sanumurējama, ja $A={x_1, x_2, ...}$
|
|
||||||
- Kopa $A$ ir algoritmiski sanumurējama, ja ir Tjūringa mašīna, kas izdod virkni
|
|
||||||
$x_1, x_2, ...$, kurai $A={x_1, x_2, ...}$
|
|
||||||
#let DL = `DL`
|
|
||||||
#let IL = `IL`
|
|
||||||
Divu lenšu #TM, kur viena ir klasiska darba lente (#DL) un otra ir izvada
|
|
||||||
lente (#IL) (tikai rakstīšanai).
|
|
||||||
|
|
||||||
== Piemērs $(a^k b^k mid(|) k>=0) "ir sanum.?"$
|
|
||||||
Pamatot, ka kopa ${a^k b^k mid(|) k>=0}$ ir algoritmiski sanumurējama.
|
|
||||||
|
|
||||||
+ Uzraksta uz izejas lentes tukšu vārdu.
|
|
||||||
+ Uzraksta vienu $a$ uz darba lentes.
|
|
||||||
+ Atkārto:
|
|
||||||
+ Uz ieejas lentes uzrakstām tikpat $a$, cik bija uz #DL;
|
|
||||||
+ Uz izejas lentes uzrakstām tikpat $b$, cik $a$ bija uz #DL;
|
|
||||||
+ Uz izejas lentes uzrakstām $\_$;
|
|
||||||
+ Uz darba lentes pierakstām klāt vienu $a$.
|
|
||||||
+ Izejas lente $=epsilon, a b, a a b b, a a a b b b,...$
|
|
||||||
|
|
||||||
== Piemērs (atkārt. pēc \# ir sanum\.?)
|
|
||||||
Pamatot, ka kopa ${x \# x mid(|) x in {a, b}^* }$ ir algoritmiski sanumurējama.
|
|
||||||
|
|
||||||
+ Uz darba lentes iet cauri visiem $x$.
|
|
||||||
+ Katram $x$ uz izejas lentes uzraksta $x \# x$.
|
|
||||||
+ Uz izejas lentes uzraksta $\#\_$.
|
|
||||||
+ Uz darba lentes uzraksta $a$.
|
|
||||||
+ Atkārto:
|
|
||||||
+ Pārraksta darba lentes saturu $x$ uz izejas lenti;
|
|
||||||
+ Uzraksta $\#$ uz #IL, vēlreiz pārraksta $x$ uz #IL, uzrakstām $\_$ uz #IL.
|
|
||||||
+ Uz #DL nomaina $x$ pret nākošo vārdu.
|
|
||||||
|
|
||||||
= #TM darbības laiks
|
|
||||||
== Info
|
|
||||||
- Laiks ir soļu skaits un ir atkarīgs no ieejas virknes $x_1, x_2, ..., x_n$.
|
|
||||||
- Ja ir algoritms ar sarežģītību $n^2$, tad bieži ir arī algoritms ar
|
|
||||||
sarežģītību $n^2/2, n^2/3,...$
|
|
||||||
|
|
||||||
== Soļi
|
|
||||||
+ Identify the key operations or steps performed by the Turing machine for each
|
|
||||||
input.
|
|
||||||
+ This could include reading symbols from the tape, writing symbols to the
|
|
||||||
tape, moving the tape head, performing computations, or making decisions
|
|
||||||
based on the current state and input symbol.
|
|
||||||
+ Determine the worst-case scenario.
|
|
||||||
+ Analyze the input or sequence of inputs that would require the maximum
|
|
||||||
number of steps for the Turing machine to complete its computation.
|
|
||||||
+ Consider inputs that maximize the number of iterations or force the machine
|
|
||||||
to explore all possible branches of computation.
|
|
||||||
+ Express the runtime in terms of the input size.
|
|
||||||
+ Define a function that represents the number of steps or transitions taken
|
|
||||||
by the Turing machine as a function of the input size.
|
|
||||||
+ For example, if the input size is $n$, the runtime function could be denoted
|
|
||||||
as $f(n)$.
|
|
||||||
+ Simplify the runtime function and express it using Big $O$ notation.
|
|
||||||
+ Big $O$ notation provides an upper bound on the growth rate of the runtime
|
|
||||||
function as the input size increases.
|
|
||||||
+ Remove constant factors and lower-order terms from the runtime function to
|
|
||||||
focus on the dominant term that represents the growth rate.
|
|
||||||
+ Express the simplified runtime function using the appropriate Big $O$ notation,
|
|
||||||
such as $O(n)$, $O(n log n)$, $O(n^2)$, $O(2^n)$, etc.
|
|
||||||
|
|
||||||
+ Identificēt galvenās operācijas vai soļus, ko Tjūringa mašīna veic katrai
|
|
||||||
ievadei.
|
|
||||||
+ Tas varētu ietvert simbolu lasīšanu no lentes, simbolu rakstīšanu lentē,
|
|
||||||
lentes galviņas pārvietošanu, aprēķinu veikšanu vai lēmumu pieņemšanu,
|
|
||||||
pamatojoties uz pašreizējo stāvokli un ievades simbolu.
|
|
||||||
+ Noteikt sliktākā gadījuma scenāriju.
|
|
||||||
+ Analizēt ievadi vai ievades secību, kas prasītu maksimālo soļu skaitu,
|
|
||||||
lai Tjūringa mašīna pabeigtu savu aprēķinu.
|
|
||||||
+ Apsvērt ievades, kas maksimizē iterāciju skaitu vai liek mašīnai izpētīt
|
|
||||||
visas iespējamās aprēķinu zaru versijas.
|
|
||||||
+ Izteikt darbības laiku atkarībā no ievades izmēra.
|
|
||||||
+ Definēt funkciju, kas attēlo Tjūringa mašīnas veikto soļu vai pāreju
|
|
||||||
skaitu kā funkciju no ievad izmēra.
|
|
||||||
+ Piemēram, ja ievades izmērs ir $n$, darbības laika funkciju varētu apzīmēt
|
|
||||||
kā $f(n)$.
|
|
||||||
+ Vienkāršot darbības laika funkciju un izsakot to, izmantojot lielā $O$
|
|
||||||
notāciju.
|
|
||||||
+ Lielā $O$ notācija nodrošina augšējo robežu darbības laika funkcijas
|
|
||||||
pieauguma ātrumam, palielinoties ievaddatu izmēram.
|
|
||||||
+ Noņemt konstantes faktorus un zemākas kārtas locekļus no darbības laika
|
|
||||||
funkcijas, lai koncentrētos uz dominējošo locekli, kas atspoguļo pieauguma
|
|
||||||
ātrumu.
|
|
||||||
+ Izteikt vienkāršoto darbības laika funkciju, izmantojot atbilstošo lielā $O$
|
|
||||||
notāciju, piemēram, $O(n)$, $O(n log n)$, $O(n^2)$, $O(2^n)$ utt.
|
|
||||||
|
|
||||||
== Piemērs ($|a| = |b|"?"$)
|
|
||||||
Vai ieejas virknē ir vienāds skaits $a$ un $b$?
|
|
||||||
|
|
||||||
+ Virzās no kreisās puses uz labo, aizstājot vienu $a$ un vienu $b$ ar $x$;
|
|
||||||
+ Ja neatrod nedz $a$, nedz $b$, akceptē;
|
|
||||||
+ Ja neatrod vienu no $a$ vai $b$, noraida;
|
|
||||||
+ Ja atrod gan $a$, gan $b$, virzās atpakaļ uz pirmo simbolu un atkārto.
|
|
||||||
|
|
||||||
Kopējais soļu skaits:
|
|
||||||
- Ne vairāk kā $(n/2+1) 2n = n^2 + 2n$ soļi.
|
|
||||||
- Ja $n$ nav ļoti mazs, $n^2$ būs vairāk nekā $2n$ un soļu skaits $O(n^2)$.
|
|
||||||
|
|
||||||
= Neatrisināmas prob. (non-decidable)
|
|
||||||
|
|
||||||
#let acc = `ACCEPTING`
|
#let acc = `ACCEPTING`
|
||||||
#let eqans = `EQUAL_ANSWERS`
|
#let eqans = `EQUAL_ANSWERS`
|
||||||
@ -500,6 +311,10 @@ Kopējais soļu skaits:
|
|||||||
Neatrisināma problēma ir problēma ir problēma, kurai neeksistē TM, kas
|
Neatrisināma problēma ir problēma ir problēma, kurai neeksistē TM, kas
|
||||||
atrisinātu šo problēmu.
|
atrisinātu šo problēmu.
|
||||||
|
|
||||||
|
== Funkcionālas un nefunkcionālas īpašības
|
||||||
|
|
||||||
|
TODO.
|
||||||
|
|
||||||
== Raisa teorēma
|
== Raisa teorēma
|
||||||
|
|
||||||
#teo(
|
#teo(
|
||||||
@ -516,9 +331,16 @@ parādīt kā redukciju no HALTING.
|
|||||||
- $one(M)=1$, ja eksistē ieejas virkne $x$, uz kuras $M$ izdod atbildi $1$.
|
- $one(M)=1$, ja eksistē ieejas virkne $x$, uz kuras $M$ izdod atbildi $1$.
|
||||||
- $infinite(M)=1$, ja eksistē bezgalīgi daudzas ieejas virknes $x$, uz kurām $M$ izdod atbildi $1$.
|
- $infinite(M)=1$, ja eksistē bezgalīgi daudzas ieejas virknes $x$, uz kurām $M$ izdod atbildi $1$.
|
||||||
- $equiv(M 1, M 2)=1$, ja $M1(x)=M2(x)$
|
- $equiv(M 1, M 2)=1$, ja $M1(x)=M2(x)$
|
||||||
- $hamcycle(G)=1$, ja grafā $G$ ir cikls (šķautņu virkne
|
|
||||||
$v_1 v_2,v_2 v_3, ..., v_n v_1$), kurā katra virsotne ir tieši $1$ reizi.
|
|
||||||
- $linineq(S)=1$, ja sistēmai ir atrisinājums $x_1, x_2, ..., x_n in {0,1}$
|
- $linineq(S)=1$, ja sistēmai ir atrisinājums $x_1, x_2, ..., x_n in {0,1}$
|
||||||
|
- $"pcp"(S)=1$ (Post-correspondance problem), ja divām galībām kopām $A = [a_1,
|
||||||
|
a_2, ..., a_n]$ un $B = [b_1, b_2, dots, b_n]$ var izvēlēties indeksu secības
|
||||||
|
$a_("i1") a_("i2") ... a_("ik")$ = $b_("i1") b_("i2") ... b_("ik")$ (tā lai
|
||||||
|
konkatenācijas būtu vienādas); domino kauliņi ar augšu un apakšu, ko saliekot
|
||||||
|
kopā, globālai augšai un apakšai jāsakrīt.
|
||||||
|
- $"mortal-matrix"(S)=1$, vai no matricām $M_1, M_2, ..., M_n$ var izveidot
|
||||||
|
secību (ar atkārtojumiem), ka matricu reizinājums būtu 0.
|
||||||
|
// LININEQ, HAMCYCLE are DECIDABLE!
|
||||||
|
// - $"hilbert's-10th"(S)=1$, ...?
|
||||||
|
|
||||||
#info[Ja var atrisināt #acc, tad var atrisināt arī #halt.]
|
#info[Ja var atrisināt #acc, tad var atrisināt arī #halt.]
|
||||||
#info[Ja var atrisināt #eqans / #one / #infinite / #equiv, tad var atrisināt arī #acc.]
|
#info[Ja var atrisināt #eqans / #one / #infinite / #equiv, tad var atrisināt arī #acc.]
|
||||||
@ -656,7 +478,31 @@ parādīt kā redukciju no HALTING.
|
|||||||
Pēc tās, lai pierādītu, ka cita problēma $L$ ir NP-pilna, pietiek parādīt,
|
Pēc tās, lai pierādītu, ka cita problēma $L$ ir NP-pilna, pietiek parādīt,
|
||||||
ka $L in NP$ un ka $SAT <_p L$ (vai jebkura cita zināma NP-pilna problēma).
|
ka $L in NP$ un ka $SAT <_p L$ (vai jebkura cita zināma NP-pilna problēma).
|
||||||
|
|
||||||
= Nekustīgā punkta teorēma
|
|
||||||
|
== Daļēja atrisināmība
|
||||||
|
|
||||||
|
// Jorens: Tas teksta blāķis, kas šeit bija var apjucināt cilvēkus, viss kas
|
||||||
|
// vajadzīgs ir sarakstāms īsāk.
|
||||||
|
|
||||||
|
- $A$ –- daļēji atrisināma, ja ir Tjūringa mašīna $T$:
|
||||||
|
- Ja $A(x) = 1$, tad $T(x) = 1$.
|
||||||
|
- Ja $A(x) = 0$, tad $T(x) = 0$ vai $T(x)$ neapstājas.
|
||||||
|
|
||||||
|
Tas, ka problēma ir daļēji atrisināma, nozīmē, ka nav konkrēta un *vispārīga*
|
||||||
|
algoritma, kas vienmēr varētu sniegt pareizu "nē" atbildi gadījumiem ārpus
|
||||||
|
problēmas.
|
||||||
|
|
||||||
|
Var būt iespējams konstruēt Tjūringa mašīnu, kas apstājas un sniedz
|
||||||
|
"nē" atbildi noteiktiem gadījumiem ārpus problēmas, bet tas nav garantēts
|
||||||
|
visiem gadījumiem (_un īsti nav apskatīts šajā kursā_).
|
||||||
|
|
||||||
|
#teo[$A$ -- daļēji atrisināma tad un tikai tad, ja $A$ -- algoritmiski sanumurējama.]
|
||||||
|
|
||||||
|
Cits nosaukums daļējai atrisināmībai ir atpazīstamība (angl. recognizability/recognizable).
|
||||||
|
|
||||||
|
= Nekustīgo punktu teorija
|
||||||
|
|
||||||
|
== Nekustīgā punkta teorēma
|
||||||
|
|
||||||
Lai $phi_x$ ir daļēji definēta funkcija, ko aprēķina Tjūringa mašīna ar
|
Lai $phi_x$ ir daļēji definēta funkcija, ko aprēķina Tjūringa mašīna ar
|
||||||
programmu $x$. Lai $F: Sigma^* -> Sigma^*$ ir jebkurš visur definēts
|
programmu $x$. Lai $F: Sigma^* -> Sigma^*$ ir jebkurš visur definēts
|
||||||
@ -668,19 +514,128 @@ Tad: $"eksistē"(x): phi_{F(x)} = phi_x$
|
|||||||
- $F$: jebkura visur definēta aprēķināma funkcija virknēm (programmām).
|
- $F$: jebkura visur definēta aprēķināma funkcija virknēm (programmām).
|
||||||
- $Sigma^*$: visu galīgo virkņu kopa pār alfabētu $Sigma$.
|
- $Sigma^*$: visu galīgo virkņu kopa pār alfabētu $Sigma$.
|
||||||
|
|
||||||
= Sarežģītības klases
|
== NPT pielietošanas piemērs
|
||||||
|
|
||||||
|
TODO.
|
||||||
|
|
||||||
|
= Sarežģītības teorija
|
||||||
|
|
||||||
|
== Lielais $O$ un mazais $o$
|
||||||
|
|
||||||
|
Notācija, kas tiek izmantota, lai raksturotu *funkciju* sarežģītību
|
||||||
|
asimptotiski.
|
||||||
|
|
||||||
|
=== Lielais-O (formālā definīcija)
|
||||||
|
|
||||||
|
$f(n) in O(g(n))$, ja:
|
||||||
|
|
||||||
|
$exists C > 0, exists n_0 > 0:$ $(forall n >= n_0: f(n) <= c * g(n))$
|
||||||
|
|
||||||
|
Tas nozīmē, ka funkcija $f(n)$ asimptotiski nepārsniedz konstanti $c$ reizinātu
|
||||||
|
$g(n)$.
|
||||||
|
|
||||||
|
/*
|
||||||
|
=== Piemērs
|
||||||
|
|
||||||
|
$f(n) = 17n^2 + 23n + 4$
|
||||||
|
$g(n) = n^2$
|
||||||
|
|
||||||
|
Tad $f(n) in O(n^2)$, jo:
|
||||||
|
|
||||||
|
$17n^2 + 23n + 4 \leq 17n^2 + 23n^2 + 4n^2 = 44n^2$
|
||||||
|
tātad $C = 44$.
|
||||||
|
*/
|
||||||
|
|
||||||
|
=== Mazais-o (formālā definīcija)
|
||||||
|
|
||||||
|
$f(n) in o(g(n))$, ja:
|
||||||
|
|
||||||
|
$
|
||||||
|
lim_(i -> infinity) f(n) / g(n) = 0
|
||||||
|
$
|
||||||
|
|
||||||
|
Tas nozīmē, ka funkcija $f(n)$ kļūst nenozīmīga attiecībā pret $g(n)$, $n$
|
||||||
|
tiecoties uz bezgalību.
|
||||||
|
|
||||||
|
/*
|
||||||
|
=== Piemērs
|
||||||
|
|
||||||
|
$log(n) \in o(n)$
|
||||||
|
jo jebkuram $epsilon > 0$ pietiekami lieliem $n$:
|
||||||
|
$log(n) <= epsilon * n$.
|
||||||
|
*/
|
||||||
|
|
||||||
|
=== $f(n) in O(g(n))$ pamatojuma triks
|
||||||
|
|
||||||
|
Ja ir pierādījums, ka $f(n) in o(g(n))$, tad automātiski var secināt, ka $f(n)
|
||||||
|
in O(g(n))$. *Tikai pozitīvajā gadījumā!* Jo mazais $o$ ir stingrāka prasība
|
||||||
|
par lielo $O$.
|
||||||
|
|
||||||
|
=== Pamatojuma soļi
|
||||||
|
|
||||||
|
- Ja funkcija pielīdzināta lielajam $O$:
|
||||||
|
+ Salīdzina funkcijas augstāko pakāpi ar doto $O$ pakāpi.
|
||||||
|
+ Ja funkcijas pakāpe ir lielāka, tad vienādojums būs patiess, jo funkcija aug
|
||||||
|
straujāk.
|
||||||
|
+ Korektam risinājumam jāpamato kāpēc definīcijas nevienādība ir patiesa
|
||||||
|
visiem $n >= n_0$ un iespējams jāparāda piemēra $c$.
|
||||||
|
- Ja funkcija pielīdzināta mazajam $o$:
|
||||||
|
+ Jāievieto dotais robežā $lim_(x->oo)f(x)/g(x)$;
|
||||||
|
+ Rezultāts ir 0, patiess, citādi -- nepatiess.
|
||||||
|
|
||||||
|
=== Piemērs (lielais-O)
|
||||||
|
|
||||||
|
$ 2n^4 + 6n^2 + 17 =^? O(n^4) $
|
||||||
|
|
||||||
|
Izteiksme ir patiesa, tā kā kreisās puses izteiksmes augstākā pakāpe jeb kārta
|
||||||
|
ir $4$ un iekš $O$ tā arī ir $4$.
|
||||||
|
|
||||||
|
=== Piemērs (lielais-O)
|
||||||
|
$ 2n^4 + 6n^2 + 17 =^? O(n^3) $
|
||||||
|
|
||||||
|
Izteiksme ir aplama, jo kreisajā pusē augstākā pakāpe ir $4$, kamēr labajā ir
|
||||||
|
norādīta $3$, un $4$ pakāpes izteiksmi nevar izpildīt $O(n^3)$.
|
||||||
|
|
||||||
|
=== Piemērs (lielais-O)
|
||||||
|
$ n^3 + 17n + 4 in^? O(n^3) $
|
||||||
|
|
||||||
|
Jā, $n^3 + 17n + 4 <= n^3 + 17n^3 + 4n^3 = 22n^3$.
|
||||||
|
|
||||||
|
=== Piemērs (lielais-O)
|
||||||
|
$ n^4 + 17n + 4 in^? O(n^3) $
|
||||||
|
|
||||||
|
Nē $n^4 + 17n + 4 > n^4 = n dot n^3$
|
||||||
|
|
||||||
|
=== Piemērs (mazais-O) <small-o-example-3>
|
||||||
|
$ n log^4 n =^? o(n^1.5) $
|
||||||
|
|
||||||
|
Ir zināms, ka mazajā $O$ notācijai, ja $lim_(x->oo)f(x)/g(x)$, kur $f(x)$ ir
|
||||||
|
funkcija un $g(x)$ ir $o$, tad vienādība izpildās.
|
||||||
|
Ievietojot vērtības $ lim_(n->oo) (n log^4 n)/n^1.5=0 $
|
||||||
|
Tātad vienādojums ir
|
||||||
|
patiess.
|
||||||
|
|
||||||
|
=== Piemērs (mazais-O)
|
||||||
|
$ 2^n n^2 =^? o(n^3) $
|
||||||
|
|
||||||
|
Pēc tās pašas aprakstītās īpašības, kā @small-o-example-3, sanāktu
|
||||||
|
$ lim_(n->oo) (2^n n^2)/3^n $
|
||||||
|
un tā kā $3^n$ aug ātrāk kā $2^n$, šī robeža būs $0$ un sākotnējais
|
||||||
|
vienādojums būs patiess.
|
||||||
|
|
||||||
|
|
||||||
|
== Sarežģītības klases
|
||||||
|
|
||||||
#let time = `TIME`
|
#let time = `TIME`
|
||||||
== Info
|
|
||||||
$n, n log n, n^2, n^3, 2^n$
|
=== Laiks (TIME)
|
||||||
|
|
||||||
$time(f(n))$ -- problēmas $L$, kurām eksistē Tjūringa mašīna $M$, kas pareizi
|
$time(f(n))$ -- problēmas $L$, kurām eksistē Tjūringa mašīna $M$, kas pareizi
|
||||||
risina $L$ un izmanto $O(f(n))$ soļus.
|
risina $L$ un izmanto $O(f(n))$ soļus.
|
||||||
|
|
||||||
#info(
|
/* random piemērs -> relocate? */
|
||||||
title: "Vispārīgāk",
|
|
||||||
)[Ja $a<b$, tad $n^3 in o(n^b)$, jo $n^a/n^b=1/n^(b-a)->0$.]
|
|
||||||
|
|
||||||
|
/*
|
||||||
$ lim n/2^n=lim (n)'/(2^n)'=lim 1/(2^n ln 2) $
|
$ lim n/2^n=lim (n)'/(2^n)'=lim 1/(2^n ln 2) $
|
||||||
|
|
||||||
Augot $n$, $2^n->oo$, tātad $1/n^2->0$.
|
Augot $n$, $2^n->oo$, tātad $1/n^2->0$.
|
||||||
@ -695,8 +650,62 @@ $ lim (log^17 n)/n = lim (m^17)/c^m = lim (m/c^(m slash 17))^17 -> 0 $
|
|||||||
- $time(n)$ -- `2x` lielākā laikā var atrisināt problēmu `2x` lielākam $n$.
|
- $time(n)$ -- `2x` lielākā laikā var atrisināt problēmu `2x` lielākam $n$.
|
||||||
- $time(n^2)$ -- `4x` lielākā laikā var atrisināt problēmu `2x` lielākam $n$.
|
- $time(n^2)$ -- `4x` lielākā laikā var atrisināt problēmu `2x` lielākam $n$.
|
||||||
- $time(n^3)$ -- `8x` lielākā laikā var atrisināt problēmu `2x` lielākam $n$.
|
- $time(n^3)$ -- `8x` lielākā laikā var atrisināt problēmu `2x` lielākam $n$.
|
||||||
|
*/
|
||||||
|
|
||||||
== Asimptotiskas augšanas hierarhija
|
==== #TM darbības laiks
|
||||||
|
|
||||||
|
/*
|
||||||
|
- Laiks ir soļu skaits un ir atkarīgs no ieejas virknes $x_1, x_2, ..., x_n$.
|
||||||
|
- Ja ir algoritms ar sarežģītību $n^2$, tad bieži ir arī algoritms ar
|
||||||
|
sarežģītību $n^2/2, n^2/3,...$
|
||||||
|
*/
|
||||||
|
|
||||||
|
+ Identificēt galvenās operācijas vai soļus, ko Tjūringa mašīna veic katrai
|
||||||
|
ievadei.
|
||||||
|
+ Tas varētu ietvert simbolu lasīšanu no lentes, simbolu rakstīšanu lentē,
|
||||||
|
lentes galviņas pārvietošanu, aprēķinu veikšanu vai lēmumu pieņemšanu,
|
||||||
|
pamatojoties uz pašreizējo stāvokli un ievades simbolu.
|
||||||
|
+ Noteikt sliktākā gadījuma scenāriju.
|
||||||
|
+ Analizēt ievadi vai ievades secību, kas prasītu maksimālo soļu skaitu,
|
||||||
|
lai Tjūringa mašīna pabeigtu savu aprēķinu.
|
||||||
|
+ Apsvērt ievades, kas maksimizē iterāciju skaitu vai liek mašīnai izpētīt
|
||||||
|
visas iespējamās aprēķinu zaru versijas.
|
||||||
|
+ Izteikt darbības laiku atkarībā no ievades izmēra.
|
||||||
|
+ Definēt funkciju, kas attēlo Tjūringa mašīnas veikto soļu vai pāreju
|
||||||
|
skaitu kā funkciju no ievad izmēra.
|
||||||
|
+ Piemēram, ja ievades izmērs ir $n$, darbības laika funkciju varētu apzīmēt
|
||||||
|
kā $f(n)$.
|
||||||
|
+ Vienkāršot darbības laika funkciju un izsakot to, izmantojot lielā $O$
|
||||||
|
notāciju.
|
||||||
|
+ Lielā $O$ notācija nodrošina augšējo robežu darbības laika funkcijas
|
||||||
|
pieauguma ātrumam, palielinoties ievaddatu izmēram.
|
||||||
|
+ Noņemt konstantes faktorus un zemākas kārtas locekļus no darbības laika
|
||||||
|
funkcijas, lai koncentrētos uz dominējošo locekli, kas atspoguļo pieauguma
|
||||||
|
ātrumu.
|
||||||
|
+ Izteikt vienkāršoto darbības laika funkciju, izmantojot atbilstošo lielā $O$
|
||||||
|
notāciju, piemēram, $O(n)$, $O(n log n)$, $O(n^2)$, $O(2^n)$ utt.
|
||||||
|
|
||||||
|
===== Piemērs ($|a| = |b|"?"$)
|
||||||
|
Vai ieejas virknē ir vienāds skaits $a$ un $b$?
|
||||||
|
|
||||||
|
+ Virzās no kreisās puses uz labo, aizstājot vienu $a$ un vienu $b$ ar $x$;
|
||||||
|
+ Ja neatrod nedz $a$, nedz $b$, akceptē;
|
||||||
|
+ Ja neatrod vienu no $a$ vai $b$, noraida;
|
||||||
|
+ Ja atrod gan $a$, gan $b$, virzās atpakaļ uz pirmo simbolu un atkārto.
|
||||||
|
|
||||||
|
Kopējais soļu skaits:
|
||||||
|
- Ne vairāk kā $(n/2+1) 2n = n^2 + 2n$ soļi.
|
||||||
|
- Ja $n$ nav ļoti mazs, $n^2$ būs vairāk nekā $2n$ un soļu skaits $O(n^2)$.
|
||||||
|
|
||||||
|
=== Vieta (SPACE)
|
||||||
|
|
||||||
|
TODO.
|
||||||
|
|
||||||
|
=== Laika-Vietas sakarības
|
||||||
|
|
||||||
|
TODO.
|
||||||
|
|
||||||
|
=== Asimptotiskas augšanas hierarhija
|
||||||
|
|
||||||
Sekojošas funkcijas pieaugums pie $x -> infinity$:
|
Sekojošas funkcijas pieaugums pie $x -> infinity$:
|
||||||
|
|
||||||
@ -709,9 +718,15 @@ $log(x) << x << x \cdot log(x) << x^k << a^x << x! << x^x$
|
|||||||
Šo hierarhiju var izmantot intuīcijai par to vai funkcija pieder klasei
|
Šo hierarhiju var izmantot intuīcijai par to vai funkcija pieder klasei
|
||||||
sarežģītības klasei, bet kā pamatojums tas nederētu.
|
sarežģītības klasei, bet kā pamatojums tas nederētu.
|
||||||
|
|
||||||
|
_$x^epsilon$ ir izņemts laukā, lai nejauktu galvu_
|
||||||
|
|
||||||
_Source; Mathematics for Computer Science, 2018, Eric Lehman, Google Inc._
|
_Source; Mathematics for Computer Science, 2018, Eric Lehman, Google Inc._
|
||||||
|
|
||||||
= NP-pilnas probēmas un to redukcijas
|
= Klase P (TODO)
|
||||||
|
|
||||||
|
.
|
||||||
|
|
||||||
|
= Klase NP
|
||||||
|
|
||||||
== NP problēmas
|
== NP problēmas
|
||||||
|
|
||||||
@ -726,25 +741,27 @@ ir problēmas (2 ekvivalentas definīcijas):
|
|||||||
Ekvivalence ir pierādīta ar abpusēju pārveidojumu no pārbaudītāja uz nedet. TM
|
Ekvivalence ir pierādīta ar abpusēju pārveidojumu no pārbaudītāja uz nedet. TM
|
||||||
un atpakaļ.
|
un atpakaļ.
|
||||||
|
|
||||||
== Polinomiāla redukcija $(<=_("poly"))$
|
== NP-pilnas probēmas un to redukcijas
|
||||||
|
|
||||||
|
=== Polinomiāla redukcija $(<=_("poly"))$
|
||||||
|
|
||||||
- $A <= B$ – A var atrisināt, noreducējot to uz B.
|
- $A <= B$ – A var atrisināt, noreducējot to uz B.
|
||||||
- $A <=_("poly") B$, ja ir $O(n^c)$ laika algoritms (Tjūringa mašīna) $P$:
|
- $A <=_("poly") B$, ja ir $O(n^c)$ laika algoritms (Tjūringa mašīna) $P$:
|
||||||
- $M$ pārveido $A$ ieejas datus par $B$ ieejas datiem;
|
- $M$ pārveido $A$ ieejas datus par $B$ ieejas datiem;
|
||||||
- $A(x) = B(M(x))$.
|
- $A(x) = B(M(x))$.
|
||||||
|
|
||||||
== NP-pilnīgums
|
=== NP-pilnīgums
|
||||||
|
|
||||||
- A – NP-pilna, ja:
|
- A – NP-pilna, ja:
|
||||||
- $A in "NP"$;
|
- $A in "NP"$;
|
||||||
- Ja $B in NP$, tad $B <=_("poly") A$.
|
- Ja $B in NP$, tad $B <=_("poly") A$.
|
||||||
|
|
||||||
== 3-SAT problēma
|
=== 3-SAT problēma
|
||||||
|
|
||||||
Vai formulai 3-CNF formā var piemeklēt katra mainīgā vērtības tā, lai formula
|
Vai formulai 3-CNF formā var piemeklēt katra mainīgā vērtības tā, lai formula
|
||||||
būtu 1 (patiess).
|
būtu 1 (patiess).
|
||||||
|
|
||||||
== CIRCUIT-SAT problēma
|
=== CIRCUIT-SAT problēma
|
||||||
|
|
||||||
Dota funkcija $F(x_1, ..., x_n)$, kas sastāv no vārtiem (AND, OR, NOT).
|
Dota funkcija $F(x_1, ..., x_n)$, kas sastāv no vārtiem (AND, OR, NOT).
|
||||||
|
|
||||||
@ -755,14 +772,14 @@ Dota funkcija $F(x_1, ..., x_n)$, kas sastāv no vārtiem (AND, OR, NOT).
|
|||||||
|
|
||||||
Vai var atrast mainīgo vērtības tā lai gala izvade būtu 1 (patiess).
|
Vai var atrast mainīgo vērtības tā lai gala izvade būtu 1 (patiess).
|
||||||
|
|
||||||
== CLIQUE problēma
|
=== CLIQUE problēma
|
||||||
|
|
||||||
$exists C subset.eq V: (|C| = k) and (forall (u, v in C): (u, v) in E)$
|
$exists C subset.eq V: (|C| = k) and (forall (u, v in C): (u, v) in E)$
|
||||||
|
|
||||||
Vārdiski. Vai eksistē virsotņu kopa $S$ lielumā $k$, kurā katra virsotne ir
|
Vārdiski. Vai eksistē virsotņu kopa $S$ lielumā $k$, kurā katra virsotne ir
|
||||||
savienota ar katru otro no kopas $S$.
|
savienota ar katru otro no kopas $S$.
|
||||||
|
|
||||||
== IND-SET problēma
|
=== IND-SET problēma
|
||||||
|
|
||||||
$exists S subset.eq V: (|S| = k) and (forall (u, v in S): (u, v) in.not E)$
|
$exists S subset.eq V: (|S| = k) and (forall (u, v in S): (u, v) in.not E)$
|
||||||
|
|
||||||
@ -770,11 +787,11 @@ Vārdiski. Vai grafā $G=(V, E)$ eksistē virsotņu kopa $S$ lielumā $k$, kurā
|
|||||||
katra no virsotnēm nav savienota ar nevienu citu virsotni no šīs
|
katra no virsotnēm nav savienota ar nevienu citu virsotni no šīs
|
||||||
kopas.
|
kopas.
|
||||||
|
|
||||||
== LIN-INEQ
|
=== LIN-INEQ problēma
|
||||||
|
|
||||||
Vai dotā lineāru nevienādību sistēma ar bināriem mainīgajiem ir atrisināma.
|
Vai dotā lineāru nevienādību sistēma ar bināriem mainīgajiem ir atrisināma.
|
||||||
|
|
||||||
== CIRCUIT-SAT ≤ₚ 3-SAT
|
=== CIRCUIT-SAT ≤ₚ 3-SAT
|
||||||
|
|
||||||
- Katram starprezultātam (kas nav pirmajā ievadē, i.e., $x_1$, $x_2$, $dots$,
|
- Katram starprezultātam (kas nav pirmajā ievadē, i.e., $x_1$, $x_2$, $dots$,
|
||||||
$x_n$) ievieš jaunus mainīgos $y_i$.
|
$x_n$) ievieš jaunus mainīgos $y_i$.
|
||||||
@ -818,7 +835,7 @@ $
|
|||||||
Analoģiski iekavām ar vienu elementu. Rezultātā ir 3-CNF formula, ko var
|
Analoģiski iekavām ar vienu elementu. Rezultātā ir 3-CNF formula, ko var
|
||||||
izmantot ar 3-SAT algoritmu.
|
izmantot ar 3-SAT algoritmu.
|
||||||
|
|
||||||
== 3-SAT ≤ₚ IND-SET
|
=== 3-SAT ≤ₚ IND-SET
|
||||||
|
|
||||||
Katrai iekavai no formulas veido $3$ virsotnes (grafa komponenti), kas apzīmē
|
Katrai iekavai no formulas veido $3$ virsotnes (grafa komponenti), kas apzīmē
|
||||||
mainīgo (ar NOT, ja ir negācija). Katra virsotne (literālis) no komponentes ir
|
mainīgo (ar NOT, ja ir negācija). Katra virsotne (literālis) no komponentes ir
|
||||||
@ -835,7 +852,7 @@ Piemērs formulai $(x or y or not z) and (not x or y or z)$:
|
|||||||
Tagad varam pielietot $"IND-SET"\(G, m\)$ ar izveidoto grafu un $m$ kā iekavu
|
Tagad varam pielietot $"IND-SET"\(G, m\)$ ar izveidoto grafu un $m$ kā iekavu
|
||||||
skaitu originālajā formulā.
|
skaitu originālajā formulā.
|
||||||
|
|
||||||
== IND-SET ≤ₚ CLIQUE
|
=== IND-SET ≤ₚ CLIQUE
|
||||||
|
|
||||||
- Veido grafa papildinājumu (komplementu) $G' = (V, E')$:
|
- Veido grafa papildinājumu (komplementu) $G' = (V, E')$:
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user