some reordering / corrections

This commit is contained in:
jorenchik 2025-06-14 16:00:35 +03:00
parent a5b5c5732d
commit e7abda0d1a

551
main.typ
View File

@ -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? \
@ -285,6 +217,8 @@ Lai pierādītu, ka naturālo skaitļu pāru $(k_1, k_2)$ kopa ir saskaitāma, m
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)$
ir atšķirīgi pāri no naturālo skaitļu kopas. ir atšķirīgi pāri no naturālo skaitļu kopas.
@ -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')$: