diff --git a/assets/img/cantors-pairing-function.png b/assets/img/cantors-pairing-function.png new file mode 100644 index 0000000..58571ed Binary files /dev/null and b/assets/img/cantors-pairing-function.png differ diff --git a/layout.typ b/layout.typ index 3c4c866..2764484 100644 --- a/layout.typ +++ b/layout.typ @@ -1,4 +1,3 @@ -#import "@preview/i-figured:0.2.4" #import "@preview/tablex:0.0.9": tablex #import "@preview/headcount:0.1.0": * @@ -14,7 +13,7 @@ set document(author: authors) set page( - columns: 1, + columns: 2, margin: ( left: 10mm, right: 10mm, @@ -62,13 +61,9 @@ // WARNING: remove before sending // outline(title: "TODOs", target: figure.where(kind: "todo")) /* --- Figure/Table config start --- */ - show heading: i-figured.reset-counters - show figure: i-figured.show-figure.with(numbering: "1.1.") set figure(numbering: dependent-numbering("1.1")) set figure(placement: none) - show figure.where(kind: "i-figured-table"): set block(breakable: true) - show figure.where(kind: "i-figured-table"): set figure.caption(position: top) show figure.where(kind: "attachment"): set figure.caption(position: top) show figure.where(kind: raw): set figure.caption(position: top) @@ -78,103 +73,9 @@ show figure.where(kind: image): set par(leading: 0.75em) show figure.caption: set text(size: 11pt) - show figure.caption: it => { - if it.kind == "i-figured-table" { - return align( - end, - emph(it.counter.display(it.numbering) + " tabula ") - + text(weight: "bold", it.body), - ) - } - if it.kind == "i-figured-image" { - return align( - start, - emph(it.counter.display(it.numbering) + " att. ") - + text(weight: "bold", it.body), - ) - } - if ( - it.kind - in ( - "i-figured-raw", - "i-figured-\"attachment\"", - ) - ) { - return align(end, it.counter.display() + ". pielikums. " + text(it.body)) - } - it - } - // disable default reference suppliments set ref(supplement: it => { }) - // Custom show rule for references - show ref: it => { - let el = it.element - - if el == none { - return it - } - - if el.func() == heading { - return link( - el.location(), - numbering(el.numbering, ..counter(heading).at(el.location())) - + " " - + el.body, - ) - } - - if el.func() == figure { - let kind = el.kind - - // Map for different kinds of supplements - let supplement_map = ( - i-figured-table: "tab.", - i-figured-image: "att.", - attachment: "pielikumu", - ) - - - // Get the supplement value properly - let supplement = if type(it.supplement) != function { - it.supplement - } else { - if kind in supplement_map { - supplement_map.at(kind) - } else { - "" - } - } - - let number = if kind == "attachment" { - ( - numbering(el.numbering, ..counter(figure.where(kind: kind)).at( - el.location(), - )) - + "." - ) // Only add dot for attachments - } else { - numbering(el.numbering, ..counter(figure.where(kind: kind)).at( - el.location(), - )) // No extra dot for tables and images - } - - // Create counter based on the kind - return link( - el.location(), - number - + if supplement != "" { - " " + supplement - } else { - "" - }, - ) - } - - // Default case for non-figure elements - it - } /* --- Figure/Table config end --- */ set list(marker: ([•], [--], [\*], [·])) @@ -184,6 +85,7 @@ outline(depth: 3, indent: indent, title: text(size: 14pt, "Saturs")) + pagebreak() body } diff --git a/main.typ b/main.typ index e62ba36..00f003d 100644 --- a/main.typ +++ b/main.typ @@ -6,11 +6,14 @@ #show: project.with(title: [Theory of Algorithms Cheatsheet], authors: ( "Kristofers Solo", )) -#pagebreak() + +#let teo(title: "Teorēma", ..args) = memo(title: title, ..args) + #let TM = $T M$ #let rej = $q_"rej"$ #let acc = $q_"acc"$ + = Tjūringa Mašīnas == Info Var būt 3 veida uzdevumi: stāvokļu, tekstuāls, vairāklenšu. @@ -36,7 +39,8 @@ Nosimulēt stāvēšanu uz vietas jeb $d=0$ var sādi: == Piemērs Vai ieejas virknē $a^n b^n c^n$, kur $n>0$ -#columns(2, [ + +#context [ $(q_1, a) -> (q_2, *, ->)$ \ $(q_1, b slash c) -> rej$ \ $(q_1, *) -> (q_1, *, ->)$ \ @@ -48,7 +52,6 @@ Vai ieejas virknē $a^n b^n c^n$, kur $n>0$ $(q_2, *) -> (q_2, *, ->)$ \ $(q_3, a) -> rej$ \ - #colbreak() $(q_3, b) -> (q_3, b, ->)$ \ $(q_3, c) -> (q_4, *, ->)$ \ $(q_3, *) -> (q_3, *, ->)$ \ @@ -59,7 +62,7 @@ Vai ieejas virknē $a^n b^n c^n$, kur $n>0$ $(q_5, a slash b slash c slash *) -> (q_5, a slash b slash c slash *, <-)$ \ $(q_5, \_) -> (q_1, \_, ->)$ \ -]) +] - Aizstāj $a$ ar $*$, $b$ ar $*$, $c$ ar $*$. - Kontrolē secību (pēc $a$ jāseko $a$ vai $b$, pēc $b$ jāseko $b$ vai $c$, pēc @@ -69,7 +72,7 @@ Vai ieejas virknē $a^n b^n c^n$, kur $n>0$ == Piemērs Vai ieejas virkne $x \# x$, kur $x in {0,1}^*$ -#columns(2, [ +#context [ $(q_1, 0, \_) -> (q_1, 0, 0, ->, ->)$ \ $(q_1, 1, \_) -> (q_1, 1, 1, ->, ->)$ \ $(q_1, \#, \_) -> (q_2, \#, \_, 0, <-)$ \ @@ -85,13 +88,14 @@ Vai ieejas virkne $x \# x$, kur $x in {0,1}^*$ $(q_3, 0 slash 1, \_) -> rej$ \ $(q_3, \_, 0 slash 1) -> rej$ \ $(q_3, \_, \_) -> acc$ \ -]) +] - Nokopē simbolus līdz $\#$ uz otras lentes. - Sasniedzot $\#$, uz otras lentes iet atpakaļ līdz pirmajam simbolam. - Salīdzina pirmās lentes simbolus pēc $\#$ ar otro lenti. -= Lietais $O$ un mazais $o$ +#set page(columns: 2) += Lielais $O$ un mazais $o$ == Info - Tiek dota funkcija un jānosaka vai tā atrisināma dotajā lielā $O$ vai mazā $o$ laikā. @@ -109,48 +113,121 @@ Vai ieejas virkne $x \# x$, kur $x in {0,1}^*$ + Ja rezultāts sanāk tuvu $0$, tad vienādojums būs patiess, jo funkcija aug lēnāk. -#columns( - 2, - [ - == Piemērs - $ 2n^4 + 6n^2 + 17 =^? O(n^4) $ +== Piemērs +$ 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$. +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 - $ 2n^4 + 6n^2 + 17 =^? O(n^3) $ +== Piemērs +$ 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)$. +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 - $ n log^4 n =^? o(n^1.5) $ +== Piemērs +$ 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. +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. - #colbreak() +#colbreak() - == Piemērs - $ 2^n n^2 =^? o(n^3) $ +== Piemērs +$ 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. +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. - == Piemērs - $ n^3 + 17n + 4 in^? O(n^3) $ +== Piemērs +$ n^3 + 17n + 4 in^? O(n^3) $ - Jā, $n^3 + 17n + 4 <= n^3 + 17n^3 + 4n^3 = 22n^3$. +Jā, $n^3 + 17n + 4 <= n^3 + 17n^3 + 4n^3 = 22n^3$. - == Piemērs - $ n^4 + 17n + 4 in^? O(n^3) $ +== Piemērs +$ n^4 + 17n + 4 in^? O(n^3) $ - Nē $n^4 + 17n + 4 > n^4 = n dot n^3$ - ], +Nē $n^4 + 17n + 4 > n^4 = n dot n^3$ + += Sanumurējamība +== Info +- Bezgalīgas kopas $A$, $B$ ir vienāda izmēra, ja ir bijekcija ($1:1$ attiecība) + $F: A->B$. +- $A$ ir sanumurējama ar atkārtojumiem, ja ir attēlojums $F:N->A$, kas par katru + $a$ $E$ $A$ attēlo vismaz vienu $x$ $E$ $N$. +#teo[$A$ ir sanumurējama ar atkārtojumiem tad un tikai tad, ja $A$ ir sanumurējama.] + +== Soļi +- Kopa ir sanumurējama, ja tajā eksistē viennozīmīga atbilstība (bijekcija) + starp kopas elementiem un naturāliem skaitļiem. + Citos vārdos sakot, katram kopas elementam var piešķirt unikālu naturālu + skaitli. +- Ja kopa ir galīga, tā ir triviāli sanumurējama, jo katram elementam var + piešķirt unikālu naturālu skaitli. +- Ja kopa ir bezgalīga, jāņem vērā divi varianti: + - Ja var izveidot bijekciju starp kopu un naturāliem skaitļiem, tad jāpierāda, + ka bijekcija nepastāv. + Var skaidri definēt funkciju, kas katram kopas elementam piešķir unikālu + naturālu skaitli un parādīt, ka tā apvieno visus elementus bez dublēšanās. + - Ja nevar atrast bijekciju starp kopu un naturāliem skaitļiem, tad jāpierāda, + ka bijekcija nepastāv. + Parasti tas tiek darīts, izmantojot pierādīšanas tehnikas, piemēram, + diagonālināciju vai pretrunu (sk. @diagonalization, @contradiction). +- Ja izdodas pierādīt, ka start kopu un naturāliem skaitļiem nav bijekcijas, tad + kopa ir nesaskaitāma. + +=== Diagonālinācija +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 +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 +Vai visu veselo skaitļu kopa $ZZ={..., -1, 0, 1, ...}$ ir sanumurējama? \ +Vai ir $F:{F(1), F(2), ..., F(n), ...}=ZZ$? \ + + +$ F(1)=0, F(2)=-1, F(3)=1, F(4)=-2, ... $ + +Viens no veidiem, kā izveidot bijekciju pāra kopai, ir izmantot metodi, ko sauc +par Kantoro pārošanas funkciju. +Kantora pārošanas funkcija ir definēta sekojoši: +$f(k_1, k_2) := 1/2(k_1 + k_2)(k_1 + k_2 + 1) + k_2$, kur $k_1,k_2 in NN$ + +#figure( + image("assets/img/cantors-pairing-function.png", width: 50%), + caption: "Cantor's pairing function", ) + +Šī funkcija kā ievadi pieņem naturālo skaitļu pāri $(k_1, k_2)$ un to attēlo +kā unikālu naturālo skaitli. +Tā nodrošina, ka katram pārim tiek piešķirts unikāls skaitlis un tiek aptverti +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 +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. + +=== 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)$ +ir atšķirīgi pāri no naturālo skaitļu kopas. +Vienkāršojot un nolīdzinot izteiksmes, varam parādīt, ka +$k_1 = k_3$ un $k_2 = k_4$. +Tātad funkcija $f$ ir injektīva. + +=== Surjektivitāte +Jebkuram naturālam skaitlim $n$ varam atrast pāri $(k_1, k_2)$, kas tiek +attēlots uz $n$, izmantojot Kantora pārošanas funkcijas apgriezto funkciju. +Pielietojot apgriezto funkciju uz $n$, varam atgūt sākotnējo pāri $(k_1, k_2)$. +Tādējādi funkcija $f$ ir surjektīva. + diff --git a/requirements.typ b/requirements.typ index 5f093a5..f662c51 100644 --- a/requirements.typ +++ b/requirements.typ @@ -2,5 +2,4 @@ #import "@preview/fletcher:0.5.7" #import "@preview/gentle-clues:1.2.0" #import "@preview/headcount:0.1.0" -#import "@preview/i-figured:0.2.4" #import "@preview/tablex:0.0.9"