feat: add countables

This commit is contained in:
Kristofers Solo 2025-06-13 19:10:24 +03:00
parent bab28812d0
commit bb63f218aa
Signed by: kristoferssolo
GPG Key ID: 8687F2D3EEE6F0ED
4 changed files with 117 additions and 139 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

View File

@ -1,4 +1,3 @@
#import "@preview/i-figured:0.2.4"
#import "@preview/tablex:0.0.9": tablex #import "@preview/tablex:0.0.9": tablex
#import "@preview/headcount:0.1.0": * #import "@preview/headcount:0.1.0": *
@ -14,7 +13,7 @@
set document(author: authors) set document(author: authors)
set page( set page(
columns: 1, columns: 2,
margin: ( margin: (
left: 10mm, left: 10mm,
right: 10mm, right: 10mm,
@ -62,13 +61,9 @@
// WARNING: remove before sending // WARNING: remove before sending
// outline(title: "TODOs", target: figure.where(kind: "todo")) // outline(title: "TODOs", target: figure.where(kind: "todo"))
/* --- Figure/Table config start --- */ /* --- 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(numbering: dependent-numbering("1.1"))
set figure(placement: none) 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: "attachment"): set figure.caption(position: top)
show figure.where(kind: raw): 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.where(kind: image): set par(leading: 0.75em)
show figure.caption: set text(size: 11pt) 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 // disable default reference suppliments
set ref(supplement: it => { }) 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 --- */ /* --- Figure/Table config end --- */
set list(marker: ([•], [--], [\*], [·])) set list(marker: ([•], [--], [\*], [·]))
@ -184,6 +85,7 @@
outline(depth: 3, indent: indent, title: text(size: 14pt, "Saturs")) outline(depth: 3, indent: indent, title: text(size: 14pt, "Saturs"))
pagebreak()
body body
} }

153
main.typ
View File

@ -6,11 +6,14 @@
#show: project.with(title: [Theory of Algorithms Cheatsheet], authors: ( #show: project.with(title: [Theory of Algorithms Cheatsheet], authors: (
"Kristofers Solo", "Kristofers Solo",
)) ))
#pagebreak()
#let teo(title: "Teorēma", ..args) = memo(title: title, ..args)
#let TM = $T M$ #let TM = $T M$
#let rej = $q_"rej"$ #let rej = $q_"rej"$
#let acc = $q_"acc"$ #let acc = $q_"acc"$
= Tjūringa Mašīnas = Tjūringa Mašīnas
== Info == Info
Var būt 3 veida uzdevumi: stāvokļu, tekstuāls, vairāklenšu. 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 == Piemērs
Vai ieejas virknē $a^n b^n c^n$, kur $n>0$ Vai ieejas virknē $a^n b^n c^n$, kur $n>0$
#columns(2, [
#context [
$(q_1, a) -> (q_2, *, ->)$ \ $(q_1, a) -> (q_2, *, ->)$ \
$(q_1, b slash c) -> rej$ \ $(q_1, b slash c) -> rej$ \
$(q_1, *) -> (q_1, *, ->)$ \ $(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_2, *) -> (q_2, *, ->)$ \
$(q_3, a) -> rej$ \ $(q_3, a) -> rej$ \
#colbreak()
$(q_3, b) -> (q_3, b, ->)$ \ $(q_3, b) -> (q_3, b, ->)$ \
$(q_3, c) -> (q_4, *, ->)$ \ $(q_3, c) -> (q_4, *, ->)$ \
$(q_3, *) -> (q_3, *, ->)$ \ $(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, a slash b slash c slash *) -> (q_5, a slash b slash c slash *, <-)$ \
$(q_5, \_) -> (q_1, \_, ->)$ \ $(q_5, \_) -> (q_1, \_, ->)$ \
]) ]
- Aizstāj $a$ ar $*$, $b$ ar $*$, $c$ ar $*$. - 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 - 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 == Piemērs
Vai ieejas virkne $x \# x$, kur $x in {0,1}^*$ Vai ieejas virkne $x \# x$, kur $x in {0,1}^*$
#columns(2, [ #context [
$(q_1, 0, \_) -> (q_1, 0, 0, ->, ->)$ \ $(q_1, 0, \_) -> (q_1, 0, 0, ->, ->)$ \
$(q_1, 1, \_) -> (q_1, 1, 1, ->, ->)$ \ $(q_1, 1, \_) -> (q_1, 1, 1, ->, ->)$ \
$(q_1, \#, \_) -> (q_2, \#, \_, 0, <-)$ \ $(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, \_, 0 slash 1) -> rej$ \ $(q_3, \_, 0 slash 1) -> rej$ \
$(q_3, \_, \_) -> acc$ \ $(q_3, \_, \_) -> acc$ \
]) ]
- Nokopē simbolus līdz $\#$ uz otras lentes. - Nokopē simbolus līdz $\#$ uz otras lentes.
- 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.
= Lietais $O$ un mazais $o$ #set page(columns: 2)
= Lielais $O$ un mazais $o$
== Info == Info
- Tiek dota funkcija un jānosaka vai tā atrisināma dotajā lielā $O$ vai mazā $o$ - Tiek dota funkcija un jānosaka vai tā atrisināma dotajā lielā $O$ vai mazā $o$
laikā. 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 + Ja rezultāts sanāk tuvu $0$, tad vienādojums būs patiess, jo funkcija aug
lēnāk. lēnāk.
#columns( == Piemērs
2, $ 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 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$. ir $4$ un iekš $O$ tā arī ir $4$.
== Piemērs == Piemērs
$ 2n^4 + 6n^2 + 17 =^? O(n^3) $ $ 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 <small-o-example-3> == Piemērs <small-o-example-3>
$ n log^4 n =^? o(n^1.5) $ $ 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 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. 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 $ Ievietojot vērtības $ lim_(n->oo) (n log^4 n)/n^1.5=0 $
Tātad vienādojums ir Tātad vienādojums ir
patiess. patiess.
#colbreak() #colbreak()
== Piemērs == Piemērs
$ 2^n n^2 =^? o(n^3) $ $ 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 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 $ $ 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 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. vienādojums būs patiess.
== Piemērs == Piemērs
$ n^3 + 17n + 4 in^? O(n^3) $ $ 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 == Piemērs
$ n^4 + 17n + 4 in^? O(n^3) $ $ 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 <diagonalization>
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>
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.

View File

@ -2,5 +2,4 @@
#import "@preview/fletcher:0.5.7" #import "@preview/fletcher:0.5.7"
#import "@preview/gentle-clues:1.2.0" #import "@preview/gentle-clues:1.2.0"
#import "@preview/headcount:0.1.0" #import "@preview/headcount:0.1.0"
#import "@preview/i-figured:0.2.4"
#import "@preview/tablex:0.0.9" #import "@preview/tablex:0.0.9"