Лабораторна робота №7

advertisement
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Інститут комп'ютерних наук та інформаційних технологій
Кафедра систем штучного інтелекту
Лабораторна робота №7
Звіт
з дисципліни:
«Теорія інформації»
Виконав:
студент групи КН-207
Букін Сергій
Викладач:
Косаревич Р. Я.
Львів – 2018
Завдання
1. Реалізувати програмно алгоритм кодування послідовностей символів
на основі методу LZ78.
2. Здійснити кодування:
а) власного прізвища записаного два рази без пропуску.
б) довільного фрагмента тексту довжиною від 20 до 30 слів.
в) випадково згенерованого набору символів у вигляді 20- 30 слів.
Код програми
import random
import string
def gen_dict(inp):
d = {}
i=0
while i < (len(inp)):
if inp[i] != ' ':
if inp[i] not in d.keys():
d[inp[i]] = f'(0 ,"{inp[i]}")'
i += 1
else:
if i != len(inp)-1:
d[inp[i:i+2]] = f'({list(d.keys()).index(inp[i])+1} ,"{inp[i+1]}")'
i += 2
else:
d[inp[i]+'(eof)'] = f'({list(d.keys()).index(inp[i])+1} ,"(eof)")'
i += 1
else:
i += 1
return d
print('*' * 50)
print('task 1')
print('*' * 50)
s = ''
with open("input.txt", "r+") as file:
for line in file:
s += line
print(s)
d = gen_dict(s)
for k, v in d.items():
print(f'{k} {v}')
print('*' * 50)
print('task 2')
print('*' * 50)
s = ''
with open("input1.txt", "r+") as file:
for line in file:
s += line
print(s)
d = gen_dict(s)
for k, v in d.items():
print(f'{k} {v}')
print('*' * 50)
print('task 3')
print('*' * 50)
s = ''
for _ in range(20):
s += ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(6))
print(s)
d = gen_dict(s)
for k, v in d.items():
print(f'{k} {v}')
Здійснити кодування:
а) власного прізвища записаного два рази без пропуску.
HetsyaninHetsyanin
№
1
2
3
4
5
Символ
B
u
k
i
n
Мітка
(0 ,"B")
(0 ,"u")
(0 ,"k")
(0 ,"i")
(0 ,"n")
6
Bu
(1 ,"Bu")
7
ki
(3 ,"ki")
8
n
(5 ,"n")
б) довільного фрагмента тексту довжиною від 20 до 30 слів.
Forbidden to return to his own country, and dodging the everyday dangers of
jail and deportation, Ravic manages to hang on.
1 F
(0
,"F")
12 tu
(9
,"u")
23 ,
(0
,",")
2 o
(0
,"o")
13 rn
(3
,"n")
24 a
(0
,"a")
3 r
(0
,"r")
14 to
(9
,"o")
25 nd
(8
,"d")
4 b
(0
,"b")
15 h
(0
,"h")
26 do
(6
,"o")
5 i
(0
,"i")
16 is
(5
,"s")
27 dg
(6
,"g")
6 d
(0
,"d")
17 ow
(2
,"w")
28 in
(5
,"n")
7 de
(6
,"e")
18 n
(8 ,"
")
29 g
(0
,"g")
8 n
(0
,"n")
19 c
(0
,"c")
30 th
(9
,"h")
9 t
(0
,"t")
20 ou
(2
,"u")
31 e
(0
,"e")
10 o
(2 ,"
")
21 nt
(8
,"t")
32 ev
(31
,"v")
11 re
(3
,"e")
22 ry
(3
,"y")
33 er
(31
,"r")
34 y
(0
,"y")
43 an
(24
,"n")
52 av
(24
,"v")
35 da
(6
,"a")
44 d
(6 ,"
")
53 ic
(5
,"c")
36 y
(34
," ")
45 p
(0
,"p")
54 m
(0
,"m")
37 ng
(8
,"g")
46 or
(2
,"r")
55 ag
(24
,"g")
38 s
(0
,"s")
47 ta
(9
,"a")
56 es
(31
,"s")
39 of
(2
,"f")
48 ti
(9
,"i")
57 ha
(15
,"a")
40 j
(0
,"j")
49 on
(2
,"n")
58 .
(0
,".")
41 ai
(24
,"i")
50 ,
(23
," ")
42 l
(0
,"l")
51 R
(0
,"R")
в) випадково згенерованого набору символів у вигляді 20- 30 слів
OS5FQMNJu4kkEekohmpEL0nHco77Y5g7x38doX8skvG6qCzxiqCLYcEl0KXaaw
mP6D82EMfsoCehd1H9nGJtH9fSn7HNFAGTsSYkVWF8nycjjwcOF1xfLF3V
1
2
O
(0
,"O")
S
(0
,"S")
5
3
4
F
(0
,"5")
(0
,"F")
5
6
7
8
Q
(0
,"Q")
M
(0
,"M")
N
(0
,"N")
J
(0
,"J")
9
4
10
11
12
(0
,"u")
u
(0
,"4")
k
(0
,"k")
kE
(11
,"E")
13
14
15
16
17
18
19
e
(0
,"e")
ko
(11
,"o")
h
(0
,"h")
22
23
24
27
(0
,"E")
E
(0
,"L")
L
0
(0
,"H")
H
(0
,"c")
c
(0
,"o")
o
7
7Y
5g
(0
,"0")
(0
,"n")
n
25
26
(0
,"p")
p
20
21
(0
,"m")
m
(0
,"7")
(25
,"Y")
(3
,"g")
28
29
30
31
32
33
34
35
38
39
40
41
42
3
(0
,"3")
8
(0
,"8")
(0
,"d")
d
(24
,"X")
oX
(30
,"s")
8s
(11
,"v")
kv
(0
,"G")
G
6
36
37
(25
,"x")
7x
q
C
z
x
(0
,"6")
(0
,"q")
(0
,"C")
(0
,"z")
(0
,"x")
i
(0 ,"i")
qC
(37
,"C")
43
44
45
46
47
48
49
50
51
LY
(19
,"Y")
cE
(23
,"E")
l
(0 ,"l")
0K
(20
,"K")
X
(0
,"X")
a
(0
,"a")
aw
(48
,"w")
mP
(16
,"P")
6D
(36
,"D")
82
52
53
54
55
56
57
(30
,"2")
EM
(18
,"M")
f
(0
,"f")
s
(0
,"s")
oC
(24
,"C")
eh
(13
,"h")
58
59
60
61
62
63
64
65
d1
H9
nG
Jt
fS
n7
(31
,"1")
(22
,"9")
(21
,"G")
(8
,"t")
(54
,"S")
(21
,"7")
HN
(22
,"N")
FA
(4
,"A")
66
67
68
69
70
71
72
73
GT
sS
Y
kV
W
F8
(35
,"T")
(55
,"S")
(0
,"Y")
(11
,"V")
(0
,"W")
(4
,"8")
ny
(21
,"y")
cj
(23
,"j")
74
75
76
77
78
79
80
j
(0 ,"j")
w
(0
,"w")
cO
(23
,"O")
F1
(4
,"1")
xf
(40
,"f")
LF
(19
,"F")
3V
(29
,"V")
Висновок: на даній лабораторній роботі я ознайомився з алгоритмом стиснення LZ78, навчився реалізовувати його програмно. Даний алгоритм доволі
оптимальний для послідовностей, в яких з’являються часті повтори підпослідовностей, для послідовностей без повторень даний алгоритм не несе користі.
Download