Professional Documents
Culture Documents
MZK 05
MZK 05
Мазур В.В.
Конспект лекцій
Львів-2020
Методи оптимального кодування
Метод Хаффмана.
100
0
1
42
1 0
58
22 20
1
c e
32
1 0
26
16 16 1 0
h l
16 10
1 a
10 6
k 1 0
4 2
m b
Нижче приведений можливий варіант програми і результати її роботи
implicit integer*2(j),character*1(z)
dimension zmn(8),jmn(50),jm1(50),jm2(50),jmlk(50),zmk(50,10)
data zmn/'c','e','h','l','a','k','m','b'/
jn=8
jmn(1)=22
jmn(2)=20
jmn(3)=16
jmn(4)=16
jmn(5)=10
jmn(6)=10
jmn(7)=4
jmn(8)=2
do 1 j=1,jn
jm1(j)=j
jm2(j)=0
1 jmlk(j)=0
jp=1
jk=jn
jj=jk
4 if(jp.eq.jk) go to 5
jc=jk-2
jx=jmn(jk-1)+jmn(jk)
2 jj=jj+1
jmn(jj)=jx
jm1(jj)=jk-1
jm2(jj)=jk
jmlk(jj)=0
if(jp.gt.jc) go to 8
if(jmn(jp).lt.jx) go to 33
jmn(jj)=jmn(jp)
jm1(jj)=jm1(jp)
jm2(jj)=jm2(jp)
jp=jp+1
go to 2
3 if(jp.gt.jc) go to 8
jj=jj+1
jmn(jj)=jmn(jp)
jm1(jj)=jm1(jp)
jm2(jj)=jm2(jp)
jmlk(jj)=0
jp=jp+1
go to 3
8 jp=jk+1
jk=jj
go to 4
9 format(' ',i4,3x,a1,4i4,1x,10a1)
5 jjj=jj
17 j1=jm1(jj)
j2=jm2(jj)
jlk=jmlk(jj)
if(jmlk(j1).ne.0) go to 12
if(jlk.eq.0) go to 14
do 11 j=1,jlk
11 zmk(j1,j)=zmk(jj,j)
jmlk(j1)=jlk
14 if(j2.eq.0) go to 22
zmk(j1,jlk+1)='1'
jmlk(j1)=jmlk(j1)+1
12 if(j2.eq.0) go to 22
if(jmlk(j2).ne.0) go to 22
if(jlk.eq.0) go to 24
do 21 j=1,jlk
21 zmk(j2,j)=zmk(jj,j)
24 zmk(j2,jlk+1)='0'
jmlk(j2)=jlk+1
22 jj=jj-1
if(jj.gt.jn) go to 17
do 27 j=1,jjj
z=' '
if(j.le.8) z=zmn(j)
37 write(6,9) j,z,jmn(j),jm1(j),jm2(j),jml(j),(zmk(j,jk),jk=1,jml(j))
27 continue
stop
end
1 c 22 1 0 2 01
2 e 20 2 0 2 00
3 h 16 3 0 3 111
4 l 16 4 0 3 110
5 a 10 5 0 3 100
6 k 10 6 0 4 1011
7 m 4 7 0 5 10101
8 b 2 8 0 5 10100
9 22 1 0 0
10 20 2 0 0
11 16 3 0 0
12 16 4 0 0
13 10 5 0 0
14 10 6 0 4 1011
15 6 7 8 4 1010
16 22 1 0 0
17 20 2 0 0
18 16 3 0 0
19 16 4 0 0
20 16 14 15 3 101
21 10 5 0 3 100
22 26 20 21 0
23 22 1 0 0
24 20 2 0 0
25 16 3 0 3 111
26 16 4 0 3 110
27 32 25 26 0
28 26 20 21 0
29 22 1 0 2 01
30 20 2 0 2 00
31 42 29 30 0
32 32 25 26 2 11
33 26 20 21 2 10
34 58 32 33 1 1
35 42 29 30 1 0
36 100 34 35 0