diff --git a/layout.typ b/layout.typ index c0f8a3f..3c4c866 100644 --- a/layout.typ +++ b/layout.typ @@ -14,7 +14,7 @@ set document(author: authors) set page( - columns: 2, + columns: 1, margin: ( left: 10mm, right: 10mm, diff --git a/main.typ b/main.typ index 3c3cff0..50cf467 100644 --- a/main.typ +++ b/main.typ @@ -1,3 +1,4 @@ +#import "@preview/finite:0.5.0": automaton #import "@preview/fletcher:0.5.7" as fletcher: diagram, edge, node #import "@preview/gentle-clues:1.2.0": * #import "layout.typ": indent-par, project @@ -5,3 +6,87 @@ #show: project.with(title: [Theory of Algorithms Cheatsheet], authors: ( "Kristofers Solo", )) +#pagebreak() +#let TM = $T M$ +#let rej = $q_"rej"$ +#let acc = $q_"acc"$ + += Tjūringa Mašīnas +== Informācija +Var būt 3 veida uzdevumi: stāvokļu, tekstuāls, vairāklenšu. + +=== Viena lente +$(q, a) -> (q', a', d)$ -- stāvoklī $q$ redzot $a$, ieraksta $a'$ +un iet virzienā $d space (<- "vai" ->)$. + +=== Divas lentes +$(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. + +=== Stāvēšana uz vietas +Nosimulēt stāvēšanu uz vietas jeb $d=0$ var sādi: +- $(q, a) -> (q_"new", a', ->)$ +- $(q_"new", a slash b slash c slash * ) -> (q_"new", a slash b slash c slash *, <-)$ + +== Soļi ++ Izdomāt, kā aizstājot simbolus ar $*$ var pārbaudīt virknes derību. ++ Atcerēties par secību -- aiz $a$ var sekot tikai $b slash c$, aiz $b$ var sekot tikai $c$, utt. ++ Doties katrā no virzieniem var doties arī līdz galam jeb tukšumam $\_$. ++ Vairāklenšu $TM$ pārraksta pirmo daļu līdz $\#$ uz otras lentes un salīdzina. + +== Piemērs +Vai ieejas virknē $a^n b^n c^n$, kur $n>0$ +#columns(2, [ + $(q_1, a) -> (q_2, *, ->)$ \ + $(q_1, b slash c) -> rej$ \ + $(q_1, *) -> (q_1, *, ->)$ \ + $(q_1, \_) -> acc$ \ + + $(q_2, a) -> (q_2, a, ->)$ \ + $(q_2, b) -> (q_3, *, ->)$ \ + $(q_2, c) -> rej$ \ + $(q_2, *) -> (q_2, *, ->)$ \ + + $(q_3, a) -> rej$ \ + #colbreak() + $(q_3, b) -> (q_3, b, ->)$ \ + $(q_3, c) -> (q_4, *, ->)$ \ + $(q_3, *) -> (q_3, *, ->)$ \ + + $(q_4, a slash b) -> rej$ \ + $(q_4, c) -> (q_4, c, ->)$ \ + $(q_4, \_) -> (q_5, \_, <-)$ \ + + $(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 + $c$ var sekot tikai $c$). +- Ja kādu simbolu nevar atrast, noraida. + +== Piemērs +Vai ieejas virkne $x \# x$, kur $x in {0,1}^*$ + +#columns(2, [ + $(q_1, 0, \_) -> (q_1, 0, 0, ->, ->)$ \ + $(q_1, 1, \_) -> (q_1, 1, 1, ->, ->)$ \ + $(q_1, \#, \_) -> (q_2, \#, \_, 0, <-)$ \ + + $(q_2, 0, 0) -> (q_2, 0, 0, <-)$ \ + $(q_2, 1, 1) -> (q_2, 1, 0, <-)$ \ + $(q_2, \#, \_) -> (q_3, \#, \_, ->, ->)$ \ + + $(q_3, 0, 0) -> (q_3, 0, 0, ->, ->)$ \ + $(q_3, 0, 1) -> rej$ \ + $(q_3, 1, 0) -> rej$ \ + $(q_3, 1, 1) -> (q_3, 1, 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. diff --git a/requirements.typ b/requirements.typ index 5097169..5f093a5 100644 --- a/requirements.typ +++ b/requirements.typ @@ -1,5 +1,6 @@ +#import "@preview/finite:0.5.0" #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" -#import "@preview/headcount:0.1.0"