Strängar Alfabet Strängar Språk

Alfabet
En ändlig mängd (ofta betecknad Σ) av ”primitiva” symboler.
Till exempel
Strängar
Bin = {0, 1}
Dec = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
Hex = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F }
Morse = {·, −}
Σ = {aa, ab, ba, bb}
75
76
Strängar
Språk
Definition Låt Σ vara ett alfabet, och n ∈ N. Då är w ∈ Σn
en sträng av längden n.
Definition En delmängd L av Σ∗ kallas ett språk (över Σ).
Exempel
Binära strängar av längden två {00, 01, 10, 11}
En sträng (a1 , a2 , . . . , an ) i Σn skrivs vanligen a1 a2 . . . an .
Jämna decimala talen {0, 2, 4, 6, 8, 10, 12, . . .}
Strängen () ∈ Σ0 skrivs ofta (eller λ).
Obs att Σ∗ = i≥0 Σi . . .
. . . och Σ+ = i≥1 Σi .
[Språk = Language]
[Sträng = String]
77
78
Sammansättning
Likhet
Definition Om w1 = a1 a2 . . . am och w2 = b1 b2 . . . bn är
strängar så kallas strängen a1 a2 . . . am b1 b2 . . . bn för
sammansättningen av w1 och w2 . (Skrivs ofta w1 .w2 eller
helt enkelt w1 w2 .)
Definition Två strängar a1 a2 . . . am och b1 b2 . . . bn är lika
omm m = n och ai = bi för alla 0 ≤ i ≤ n.
Observera att
.w = w. = w
w1 (w2 w3 ) = (w1 w2 )w3
[Sammansättning = Concatenation/Juxtaposition]
79
80
Monoid
Induktiv definition
Definition (Σ∗ , ., ) är ett exempel på en diskreta struktur
som kallas en monoid. En monoid består av en mängd med
en associativ operation
Att ”vända på” en sträng
= reverse(aw) = reverse(w).a
reverse()
w1 .(w2 .w3 ) = (w1 .w2 ).w3
och ett identitetselement
(a ∈ Σ, w ∈ Σ∗ )
Exempel
.w = w. = w.
reverse(abc) = reverse(bc).a
=
=
=
=
81
(reverse(c).b).a
((reverse().c).b).a
((.c).b).a
cba
82
Talsystem
Induktiv definition II
Strängar används t.ex. för att beteckna tal
Längden på en sträng
length()
= 0
length(aw) = length(w) + 1
Exempel
length(abc) = length(bc) + 1
=
=
=
=
(length(c) + 1) + 1
((length() + 1) + 1) + 1
((0 + 1) + 1) + 1
3
83
84
Decimaltal
Binära tal
Primitiver
Primitiver
Dec = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
Bin = {0, 1}
Sammansatta tal (i basen 10)
Sammansatta tal (i basen 2)
Tre - hundra - sex - tio - fem
3 ·
100
+ 6 · 10 + 5 · 1
2
3 ·
10
+ 6 · 101 + 5 · 100
(1101101)2 =
1 · 26 + 1 · 25 + 0 · 24 + 1 · 23 + 1 · 22 + 0 · 21 + 1 · 20 =
64 + 32 + 0 + 8 + 4 + 0 + 1 =
(109)10
85
86
Hexadecimala tal
Addition
Primitiver
1
2 7
+ 5 8
0 8 5
Hex = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F }
Sammansatta tal (i basen 16)
1
0
+ 0
0 1
1
0
1
0
1
1
1 1 0 1 1
1 1 0 1 0
1 0 1 0 1
(A40B3)16 =
10 · 164 + 4 · 163 + 0 · 162 + 11 · 161 + 3 · 160 =
655360 + 16384 + 0 + 176 + 3 =
(671923)10
87
88
Omvandling Bin till Dec
Heltalsdivision
För varje heltal x och positivt tal y finns två unika heltal q
och r som uppfyller att
Induktiv/rekursiv definition
bindec()
= 0
bindec(w.b) = 2 · bindec(w) + b
x = y · q + r och 0 ≤ r < y
Till exempel
Exempel
bindec(1011) =
=
=
=
=
=
om x = 14 och y = 4 så 14 = 4 · 3 + 2
om x = 21 och y = 7 så 21 = 7 · 3 + 0
2 · bindec(101) + 1
2 · (2 · bindec(10) + 1) + 1
2 · (2 · (2 · bindec(1) + 0) + 1) + 1
2 · (2 · (2 · (2 · bindec() + 1) + 0) + 1) + 1
2 · (2 · (2 · (2 · 0 + 1) + 0) + 1) + 1
11
q kallas kvoten och är antalet gånger y delar x;
r kallas resten och är det som blir över vid
heltalsdivision. Resten brukar skrivas x mod y
89
90
Omvandling Dec till Bin
Omvandling Dec till Bin
Varje naturligt tal x0 kan skrivas som
121
60
30
15
7
3
1
x0 = 2 · x1 + r1 där r1 ∈ {0, 1}
Talet x1 kan skrivas som
x1 = 2 · x2 + r2 där r2 ∈ {0, 1}
Dvs
x0 = 2 · (2 · x2 + r2 ) + r1 där r1 , r2 ∈ {0, 1}
= 2 · 60 + 1
= 2 · 30 + 0
= 2 · 15 + 0
= 2·7 + 1
= 2·3 + 1
= 2·1 + 1
= 2·0 + 1
(121)10 = (1111001)2
Eller ekvivalent
x0 = 22 · x2 + 21 · r2 + 20 · r1
91
92
Tvåkomplementet
Tvåkomplementet
Med 8 bitar kan vi skilja på 28 = 256 olika tal;
Med 8 bitar är tvåkomplementet av (−n)10 den binära
representationen av (28 − n) = 256 − n.
Hur hantera negativa tal?
Använd 1 bit som ”tecken”.
Representation av −128 ≤ n ≤ 127
Bättre lösning: använd tvåkomplementet för negtiva tal!
om 0 ≤ n ≤ 127, tag binära representationen av n;
om −128 ≤ n < 0, tag tvåkomplementet av n.
−128 = 10000000
−127 = 10000001
..
.
−1
93
= 11111111
0
1
= 00000000
= 00000001
..
.
127 = 01111111
94
Addition med tvåkomplementet
Vi vill addera 113 och −73 (dvs. beräkna 113 − 73)
1 1 3
− 7 3
4 0
1
0
+ 1
(1) 0
1
1
0
0
1
1 1
1 1 0 0
1 1 0 1
1 0 1 0
1
0 1
1 1
0 0
95