mirror of
https://github.com/kristoferssolo/Theory-of-Algorithms-Cheatsheet.git
synced 2025-10-21 20:10:39 +00:00
feat: add countables
This commit is contained in:
parent
bab28812d0
commit
bb63f218aa
BIN
assets/img/cantors-pairing-function.png
Normal file
BIN
assets/img/cantors-pairing-function.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 55 KiB |
102
layout.typ
102
layout.typ
@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
99
main.typ
99
main.typ
@ -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,9 +113,6 @@ 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(
|
|
||||||
2,
|
|
||||||
[
|
|
||||||
== Piemērs
|
== Piemērs
|
||||||
$ 2n^4 + 6n^2 + 17 =^? O(n^4) $
|
$ 2n^4 + 6n^2 + 17 =^? O(n^4) $
|
||||||
|
|
||||||
@ -152,5 +153,81 @@ Vai ieejas virkne $x \# x$, kur $x in {0,1}^*$
|
|||||||
$ 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.
|
||||||
|
|
||||||
|
|||||||
@ -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"
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user