minor changes

This commit is contained in:
Kristofers Solo 2025-06-15 00:53:00 +03:00
parent 1681f7fe8e
commit 18dd44645a
Signed by: kristoferssolo
GPG Key ID: 8687F2D3EEE6F0ED
2 changed files with 110 additions and 115 deletions

View File

@ -55,6 +55,8 @@
// Headings // Headings
set heading(numbering: "1.1.") set heading(numbering: "1.1.")
set footnote(numbering: "*")
// Start page numbering // Start page numbering
set page(numbering: "1", number-align: center) set page(numbering: "1", number-align: center)

155
main.typ
View File

@ -5,10 +5,12 @@
#import "layout.typ": indent-par, project #import "layout.typ": indent-par, project
#show: project.with(title: [Theory of Algorithms Cheatsheet], authors: ( #show: project.with(title: [Theory of Algorithms Cheatsheet], authors: (
"Kristofers Solo", "jorenchik" "Kristofers Solo",
"jorenchik",
)) ))
#let teo(title: "Teorēma", ..args) = memo(title: title, ..args) #let teo(title: "Teorēma", ..args) = memo(title: title, ..args)
#let uzd(title: "Uzdevums", ..args) = question(title: title, ..args)
#let TM = $"TM"$ #let TM = $"TM"$
#let qrej = $q_"rej"$ #let qrej = $q_"rej"$
@ -16,7 +18,7 @@
#let halt = $"HALTING"$ #let halt = $"HALTING"$
#let halt2 = $"HALTING"_2$ #let halt2 = $"HALTING"_2$
#let NP = $"NP"$ #let NP = $"NP"$
#let hline = $\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_$ #let hline = line(length: 50%, stroke: 0.5pt)
= Tjūringa Mašīnas = Tjūringa Mašīnas
== Variācijas == Variācijas
@ -29,17 +31,16 @@ Var būt 3 veida uzdevumi: stāvokļu, tekstuāls, vairāklenšu.
šim nav atrasts pretpiemērs. šim nav atrasts pretpiemērs.
] ]
=== Viena lente<one_tape> === Viena lente <one_tape>
$(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 (vai vairākas fiksētas) 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.
vairlāklenšu TM papildus $<-$ un $->$ virzieniem ir $arrow.b$ (stāvēšana uz Svarīga atšķirība ir ka vairlāklenšu #TM papildus $<-$ un $->$ virzieniem ir
vietas). $arrow.b$ (stāvēšana uz vietas). #footnote[Derīgs ar uzdevumiem, kur palīdz
kopēšana/salīdzināšana.]
\* 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:
@ -49,12 +50,12 @@ Nosimulēt stāvēšanu uz vietas jeb $d=0$ var šādi:
=== Modelis, ko pamatā izmanto šajā kursā! === Modelis, ko pamatā izmanto šajā kursā!
Šajā kursā fokusējas uz TM, kas ir: Šajā kursā fokusējas uz TM, kas ir:
+ Vienas lentes (skat. @one_tape); + Vienas lentes (skat. @one_tape);
+ Bezgalīga vienā virzienā -- pa labi; + Bezgalīga vienā virzienā -- pa labi;
+ Pirmais simbols ir tukšais simbols (`_`); + Pirmais simbols ir tukšais simbols (`_`);
+ Pēc pirmā simbola ir ievade; + Pēc pirmā simbola ir ievade;
+ Pēc ievades ir bezgalīgs tukšu simbolu skaits; + Pēc ievades ir bezgalīgs tukšu simbolu skaits;
+ Sāk uz pirmā ievades simbola (viens pēc pirmā tukšuma). + Sāk uz pirmā ievades simbola (viens pēc pirmā tukšuma).
== Risinājuma shēma == Risinājuma shēma
+ Izdomāt, kā aizstājot simbolus ar $*$ var pārbaudīt virknes derību. + Izdomāt, kā aizstājot simbolus ar $*$ var pārbaudīt virknes derību.
@ -220,7 +221,7 @@ Surjekcija: katram $z in ZZ$ eksistē $n in NN$, ka $F(n) = z$.
== Definīcija == Definīcija
- $A <= B$, ja ir ar Tjūringa mašīnu izrēķināms pārveidojums - $A <= B$, ja ir ar Tjūringa mašīnu izrēķināms pārveidojums
- $R$: (ieejas dati $A$) -> (ieejas dati $B$), - $R$: (ieejas dati $A$) $->$ (ieejas dati $B$),
- $B(R(x)) = A(x)$. - $B(R(x)) = A(x)$.
Ja $A <= B$ -- ja var atrisināt $B$, tad var atrisināt $A$. $A$ ir reducējuma Ja $A <= B$ -- ja var atrisināt $B$, tad var atrisināt $A$. $A$ ir reducējuma
@ -233,7 +234,7 @@ Ja $A <= B and A >= B$, tad $A$ un $B$ ir ekvivalentas.
// Jorens: Originally šeit bija sajaukta secība, bet uzdevums ir kinda valīds // Jorens: Originally šeit bija sajaukta secība, bet uzdevums ir kinda valīds
// abās pusēs, kopumā risinājums ir nedaudz problemātisks. // abās pusēs, kopumā risinājums ir nedaudz problemātisks.
#quote[ #uzd[
Dota problēma $halt2(M, x, y) = 1$, kur Tjūringa mašīna $M$ apstājas vismaz uz Dota problēma $halt2(M, x, y) = 1$, kur Tjūringa mašīna $M$ apstājas vismaz uz
vienas no ievadēm $x$ vai $y$. Pierādīt, ka to var vai nevar reducēt uz vienas no ievadēm $x$ vai $y$. Pierādīt, ka to var vai nevar reducēt uz
$halt$, tas ir parādīt $(halt 2 <= halt)$. $halt$, tas ir parādīt $(halt 2 <= halt)$.
@ -369,7 +370,7 @@ nevar atrisināt.
#context [ #context [
#set par(justify: false) #set par(justify: false)
== Piemēri (prob. ir neatr) == Piemēri (prob. ir neatr)
=== #halt <= #acc === $halt <= acc$
- #underline("Teorēma"): Ja var atrisināt #acc, tad var atrisināt arī #halt - #underline("Teorēma"): Ja var atrisināt #acc, tad var atrisināt arī #halt
- #underline("Pierādījums"): Attēlojums $R:M->M'$ ar īpašību $halt(M\#x) = acc(M'\#x)$. - #underline("Pierādījums"): Attēlojums $R:M->M'$ ar īpašību $halt(M\#x) = acc(M'\#x)$.
- Tad $halt(M\#x)$ var atrisināt sekojoši: - Tad $halt(M\#x)$ var atrisināt sekojoši:
@ -378,7 +379,7 @@ nevar atrisināt.
- Ja $M$ akceptē/noraida, tad $M'$ akceptē (izdos $1$). - Ja $M$ akceptē/noraida, tad $M'$ akceptē (izdos $1$).
- Ja $M$ neapstājas, $M'$ arī neapstājas. - Ja $M$ neapstājas, $M'$ arī neapstājas.
=== #acc <= #eqans === $acc <= eqans$
- #underline("Zinām"): #acc nav atrisināma - #underline("Zinām"): #acc nav atrisināma
- #underline("Pierādām"): Ja var atrisināt #eqans, tad var atrisināt arī #acc. - #underline("Pierādām"): Ja var atrisināt #eqans, tad var atrisināt arī #acc.
- #underline("Secinām"): #eqans nevar atrisināt. - #underline("Secinām"): #eqans nevar atrisināt.
@ -389,21 +390,21 @@ nevar atrisināt.
- $M'(quote.angle.l.double s quote.angle.r.double)=1$, $M'(x)=M(x)$, ja $x$ nesatur $s$. - $M'(quote.angle.l.double s quote.angle.r.double)=1$, $M'(x)=M(x)$, ja $x$ nesatur $s$.
- $eqans(M'\# x \# quote.angle.l.double s quote.angle.r.double)=acc(M\#x)$. - $eqans(M'\# x \# quote.angle.l.double s quote.angle.r.double)=acc(M\#x)$.
=== #acc <= #one === $acc <= one$
- #underline("Pierādām"): Ja var atrisināt #one, tad var atrisināt arī #acc. - #underline("Pierādām"): Ja var atrisināt #one, tad var atrisināt arī #acc.
- Dots: $M, x$ - Dots: $M, x$
- Jādefinē: $M': one(M') = acc(M\# x)$. - Jādefinē: $M': one(M') = acc(M\# x)$.
- $M'$: nodzēš no lentes ieejas virkni $y$, uzraksta $x$, palaiž $M$ programmu. - $M'$: nodzēš no lentes ieejas virkni $y$, uzraksta $x$, palaiž $M$ programmu.
- Jebkurai $y, M'(y)=M(x)$. - Jebkurai $y, M'(y)=M(x)$.
=== #acc <= #infinite === $acc <= infinite$
- #underline("Pierādām"): Ja var atrisināt #infinite, tad var atrisināt arī #acc. - #underline("Pierādām"): Ja var atrisināt #infinite, tad var atrisināt arī #acc.
- Dots: $M, x$ - Dots: $M, x$
- Jādefinē: $M': infinite(M') = acc(M\# x)$. - Jādefinē: $M': infinite(M') = acc(M\# x)$.
- Jebkurai $y, M'(y)=M(x)$. - Jebkurai $y, M'(y)=M(x)$.
- Ja $M(x)=1$, tad $M'(y)=1$ jebkurai $y$. - Ja $M(x)=1$, tad $M'(y)=1$ jebkurai $y$.
=== #acc <= #equiv === $acc <= equiv$
- #underline("Pierādām"): Ja var atrisināt #equiv, tad var atrisināt arī #acc. - #underline("Pierādām"): Ja var atrisināt #equiv, tad var atrisināt arī #acc.
- Dots: $M, x$ - Dots: $M, x$
- Jādefinē: $M_1, M_2: equiv(M_1, M_2) = acc(M\# x)$. - Jādefinē: $M_1, M_2: equiv(M_1, M_2) = acc(M\# x)$.
@ -542,7 +543,7 @@ ievadi $y$.
Pēc nekustīgā punkta teorēmas eksistē $x$, ka Pēc nekustīgā punkta teorēmas eksistē $x$, ka
$ $
phi_(F(x)) = phi_x. phi_(F(x)) = phi_x.
$ $
+ Tātad eksistē tāds $x$, ka $x$ ir funkcionāli ekvivalenta $F(x)$. + Tātad eksistē tāds $x$, ka $x$ ir funkcionāli ekvivalenta $F(x)$.
@ -579,12 +580,12 @@ $17n^2 + 23n + 4 \leq 17n^2 + 23n^2 + 4n^2 = 44n^2$
tātad $C = 44$. tātad $C = 44$.
*/ */
=== Mazais-o (formālā definīcija) === Mazais-$o$ (formālā definīcija)
$f(n) in o(g(n))$, ja: $f(n) in o(g(n))$, ja:
$ $
lim_(i -> infinity) f(n) / g(n) = 0 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$ Tas nozīmē, ka funkcija $f(n)$ kļūst nenozīmīga attiecībā pret $g(n)$, $n$
@ -616,30 +617,30 @@ par lielo $O$.
+ Jāievieto dotais robežā $lim_(x->oo)f(x)/g(x)$; + Jāievieto dotais robežā $lim_(x->oo)f(x)/g(x)$;
+ Rezultāts ir 0, patiess, citādi -- nepatiess. + Rezultāts ir 0, patiess, citādi -- nepatiess.
=== Piemērs (lielais-O) === Piemērs (lielais-$O$)
$ 2n^4 + 6n^2 + 17 =^? O(n^4) $ $ 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 (lielais-O) === Piemērs (lielais-$O$)
$ 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 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)$. norādīta $3$, un $4$ pakāpes izteiksmi nevar izpildīt $O(n^3)$.
=== Piemērs (lielais-O) === Piemērs (lielais-$O$)
$ 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 (lielais-O) === Piemērs (lielais-$O$)
$ 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$
=== Piemērs (mazais-O) <small-o-example-3> === Piemērs (mazais-$o$) <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
@ -648,7 +649,7 @@ 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.
=== Piemērs (mazais-O) === Piemērs (mazais-$o$)
$ 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
@ -707,7 +708,7 @@ Lai atrastu koda izpildes laiku:
no $n$ (skat. @time_analysis_expressions). no $n$ (skat. @time_analysis_expressions).
+ Novērtē šīs funkcijas klasi izmantojot lielā-O notāciju. + Novērtē šīs funkcijas klasi izmantojot lielā-O notāciju.
===== Piemērs ($|a| = |b|"?"$) ===== Piemērs ($|a| =^? |b|$)
Vai ieejas virknē ir vienāds skaits $a$ un $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$; + Virzās no kreisās puses uz labo, aizstājot vienu $a$ un vienu $b$ ar $x$;
@ -729,33 +730,30 @@ Kopējais soļu skaits:
- $S(N) = max S(x_1, ..., x_N)$. - $S(N) = max S(x_1, ..., x_N)$.
$ $
"SPACE"(f(N)) = \ "SPACE"(f(N)) = \
= {L | L "var atrisināt ar Tjūringa" \ = {L | L "var atrisināt ar Tjūringa" \
"mašīnu, kurai" S(N) <= C f(N)}. \ "mašīnu, kurai" S(N) <= C f(N)}. \
$ $
==== NSPACE Definīcija ==== NSPACE Definīcija
$ $
"NSPACE"(f(N)) = \ "NSPACE"(f(N)) = \
= {L | L "ir determinēta" M, "visiem" x, L(x)=M(x), \ = {L | L "ir determinēta" M, "visiem" x, L(x)=M(x), \
"un" M "izmanto " <= c f(N) "šūnas uz darba lentes"}. \ "un" M "izmanto " <= c f(N) "šūnas uz darba lentes"}. \
$ $
#teo( #teo(title: "Savča teorēma", [$"NSPACE"(f(N)) subset.eq "SPACE" (f^2(N))$])
title: "Savča teorēma",
[$"NSPACE"(f(N)) subset.eq "SPACE" (f^2(N))$]
)
==== LOGSPACE Definīcija ==== LOGSPACE Definīcija
$ $
"LOGSPACE" = "SPACE" (log N). "LOGSPACE" = "SPACE" (log N).
$ $
$ $
"LOGSPACE" subset.eq U_c "TIME"(c^(log N)) = \ "LOGSPACE" subset.eq U_c "TIME"(c^(log N)) = \
U_c "TIME" (N^c) = P U_c "TIME" (N^c) = P
$ $
@ -775,10 +773,10 @@ Laiks $O(f(N)) ->$ atmiņa $O(f(N))$.
Sekojošas funkcijas pieaugums pie $x -> infinity$: Sekojošas funkcijas pieaugums pie $x -> infinity$:
$log(x) << x << x \cdot log(x) << x^k << a^x << x! << x^x$ $log(x) << x << x dot log(x) << x^k << a^x << x! << x^x$
- $x$: mainīgais (parasti $n$). - $x$: mainīgais (parasti $n$).
- $k$: jebkurš vesles pozitīvs skaitlis ($k in NN$). - $k$: jebkurš vesels pozitīvs skaitlis ($k in NN$).
- $a$: reāla konstante lielāka par $1$ ($a > 1$). - $a$: reāla konstante lielāka par $1$ ($a > 1$).
Šo hierarhiju var izmantot intuīcijai par to vai funkcija pieder klasei Šo hierarhiju var izmantot intuīcijai par to vai funkcija pieder klasei
@ -790,22 +788,20 @@ _Source; Mathematics for Computer Science, 2018, Eric Lehman, Google Inc._
= Klase P (TODO) = Klase P (TODO)
.
= Klase NP = Klase NP
== NP problēmas == NP problēmas
NP (nederminēti-polinomiālas) problēmas #NP (nederminēti-polinomiālas) problēmas
ir problēmas (2 ekvivalentas definīcijas): ir problēmas (2 ekvivalentas definīcijas):
+ $L in NP$, ja eksistē pārbaudes algoritms - $O(n^c)$ laika Tjūringa mašīna $M$: + $L in NP$, ja eksistē pārbaudes algoritms - $O(n^c)$ laika Tjūringa mašīna $M$:
+ Ja $L(x) = 1$, tad eksistē y: $M(x, y) = 1$. + Ja $L(x) = 1$, tad eksistē y: $M(x, y) = 1$.
+ Ja $L(x) = 0$, tad visiem y: $M(x, y) = 0$. + Ja $L(x) = 0$, tad visiem y: $M(x, y) = 0$.
+ NP = problēmas $L$, ko var atrisināt ar nedeterminētu mašīnu $O(n^c)$ laikā. + #NP = problēmas $L$, ko var atrisināt ar nedeterminētu mašīnu $O(n^c)$ laikā.
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.
un atpakaļ. #TM un atpakaļ.
== NP-pilnas probēmas un to redukcijas == NP-pilnas probēmas un to redukcijas
@ -867,35 +863,36 @@ Piemērs AND vārtiem. Nosaucam ievades kā x, y un izvadi kā z: $z = x and y$
#table( #table(
columns: 4, columns: 4,
[*$x$*],[*$y$*],[*$z$*],[*$z = x and z$?*], [*$x$*], [*$y$*], [*$z$*], [*$z = x and z$?*],
[$0$],[$0$],[$0$],[jā], $0$, $0$, $0$, [jā],
[$0$],[$0$],[$1$],[nē], $0$, $0$, $1$, [nē],
[$0$],[$1$],[$0$],[jā], $0$, $1$, $0$, [jā],
[$0$],[$1$],[$1$],[nē], $0$, $1$, $1$, [nē],
[$1$],[$0$],[$0$],[jā], $1$, $0$, $0$, [jā],
[$1$],[$0$],[$1$],[nē], $1$, $0$, $1$, [nē],
[$1$],[$1$],[$0$],[nē], $1$, $1$, $0$, [nē],
[$1$],[$1$],[$1$],[jā], $1$, $1$, $1$, [jā],
) )
Izveidojam pretrunas katrai rindai. Tas ir, konjunkciju katrai rindai ar "nē". Izveidojam pretrunas katrai rindai. Tas ir, konjunkciju katrai rindai ar "nē".
Piemēram, 2\. rindai (0, 0, 1): $x or y or not z$. Piemēram, 2. rindai $(0, 0, 1)$: $x or y or not z$.
Tad uzbūvējam konjunkciju vārtiem: Tad uzbūvējam konjunkciju vārtiem:
$ $
(x or y or not z) and (x or not y or not z) and \ (x or y or not z) and (x or not y or not z) and \
and (not x or y or not z) and (not x or not y or z) and (not x or y or not z) and (not x or not y or z)
$ $
Veido konjunkciju no visiem vārtiem shēmā. Tā kā 3-SAT sagaida 3 mainīgos katrā Veido konjunkciju no visiem vārtiem shēmā. Tā kā 3-SAT sagaida 3 mainīgos katrā
iekavā. Tiem, kas satur 1 vai 2 (identitātes vārti un not vārti attiecīgi), iekavā.
pārveido tos par 3-CNF konjunkciju pievienojot jaunu mainīgo, kas vienā Tiem, kas satur 1 vai 2 (identitātes vārti un not vārti attiecīgi), pārveido tos
formulā ir pozitīvs un otrā -- negācija. par 3-CNF konjunkciju pievienojot jaunu mainīgo, kas vienā formulā ir pozitīvs
un otrā -- negācija.
$ $
(x or not b) = (x or not b or a) and (x or not b or not a) (x or not b) = (x or not b or a) and (x or not b or not a)
$ $
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
@ -975,7 +972,8 @@ Ir spēkā sakarība $"INDSET"(G, k) = "CLIQUE"(G, k)$.
#table( #table(
columns: 3, columns: 3,
inset: (top: .8em, bottom: .9em), // vert. padding inset: (top: .8em, bottom: .9em),
// vert. padding
[*Funkcija*], [*Atvasinājums*], [*Piezīmes*], [*Funkcija*], [*Atvasinājums*], [*Piezīmes*],
[$x^n$], [$n x^(n-1)$], [], [$x^n$], [$n x^(n-1)$], [],
@ -995,19 +993,14 @@ Ir spēkā sakarība $"INDSET"(G, k) = "CLIQUE"(G, k)$.
== Noderīgas izteiksmes laika analīzē<time_analysis_expressions> == Noderīgas izteiksmes laika analīzē<time_analysis_expressions>
$ $
sum_(i=1)^(n) i = (n(n+1))/(2) \ sum_(i=1)^(n) i = (n(n+1))/(2) \
sum_(i=1)^(n) i^2 = (n(n+1)(2n+1))/(6)\
sum_(i=1)^(n) i^2 = (n(n+1)(2n+1))/(6)\ sum_(i=1)^(n) i^3 = ( (n(n+1))/(2))^2 \
// Geometric series (ratio r \neq 1)
sum_(i=1)^(n) i^3 = ( (n(n+1))/(2))^2 \ r > 1: sum_(i=0)^(n) a*r^i = a * (r^(n+1)-1)/(r-1) quad \
r < 1: sum_(i=0)^(infinity) a*r^i = (a)/(1-r) \
// Geometric series (ratio r \neq 1) // Logarithmic sum
r > 1: sum_(i=0)^(n) a*r^i = a * (r^(n+1)-1)/(r-1) quad \ sum_(i=1)^(n) log i = log(n!) approx n log n - n + O(log n) \
r < 1: sum_(i=0)^(infinity) a*r^i = (a)/(1-r) \ // Exponential sum (appears in brute-force algorithms)
sum_(i=0)^(n) 2^i = 2^(n+1) - 1 \
// Logarithmic sum
sum_(i=1)^(n) log i = log(n!) approx n log n - n + O(log n) \
// Exponential sum (appears in brute-force algorithms)
sum_(i=0)^(n) 2^i = 2^(n+1) - 1 \
$ $