[ Розрахунок оптимального коду за методикою Шеннона-Фано ] |
Визначення кількості інформації на символ повідомлення, складеного з даного алфавіту.
Кількість інформації на символ повідомлення для символів даного алфавіту, що зустрічаються з рівними ймовірностями:
H max = log 24 лютого = ln 24 / ln 2 = 4,5850 біт / символ
Кількість інформації на символ повідомлення для символів даного алфавіту, що зустрічаються в сполученні з різними ймовірностями:
H = - (0,0417 * log 2 0,0417 + 0,0018 * log 2 0,0018 + 0,020 * log 2 0,0020 + 0,0022 * log 2 0,0022 + 0,0024 * log 2 0,0024 + 0,0026 * log 2 0,0026 + 0,0029 * log 2 0,0029 + 0,0033 * log 2 0,0033 + 0,0037 * log 2 0,0037 + 0,0042 * log 2 0,0042 + 0,0048 * log 2 0,0048 + 0,0055 * log 2 0,0055 + 0,0064 * log 2 0,0064 + 0,0076 * log 2 0,0076 + 0,0091 * log 2 0,0091 + 0,0111 * log 2 0,0111 + 0,0139 * log 2 0,0139 + 0,0179 * log 2 0,0179 + 0,0238 * log 2 0,0238 + 0,0333 * log 2 0,0333 + 0,0500 * log 2 0,0500 + 0,0833 * log 2 0,0833 + 0,1667 * log 2 0,1667 + 0,5000 * log 2 0,5000) =
= 2,6409 біт / символ
Недовантаження символів в даному випадку:
N = Н max - Н = 4,5850 - 2,6409 = 1,9441 біт / символ
Обчислення швидкості передачі інформації.
С = - (0,0417 * log 2 0,0417 + 0,0018 * log дві 0,0018 + 0,020 * log два 0,0020 + 0,0022 * log два 0,0022 + 0,0024 * log 2 0, 0024 + 0,0026 * log 2 0,0026 + 0,0029 * log 2 0,0029 + 0,0033 * log два 0,0033 + 0,0037 * log 2 0,0037 + 0,0042 * log 2 0, 0042 + 0,0048 * log 2 0,0048 + 0,0055 * log 2 0,0055 + 0,0064 * log два 0,0064 + 0,0076 * log 2 0,0076 + 0,0091 * log 2 0, 0091 + 0,0111 * log 2 0,0111 + 0,0139 * log 2 0,0139 + 0,0179 * log два 0,0179 + 0,0238 * log 2 0,0238 + 0,0333 * log 2 0, 0333 + 0,0500 * log 2 0,0500 + 0,0833 * log 2 0,0833 + 0,1667 * log два 0,1667 + 0,5000 * log 2 0,5000) /
(1 * 0,0417 + 2 * 0,0018 + 3 * 0,020 + 4 * 0,0022 + 5 * 0,0024 + 6 * 0,0026 + 7 * 0,0029 + 8 * 0,0033 + 9 * 0 , 0037 + 10 * 0,0042 + 11 * 0,0048 + 12 * 0,0055 + 13 * 0,0064 + 14 * 0,0076 + 15 * 0,0091 + 16 * 0,0111 + 17 * 0,0139 + 18 * 0,0179 + 19 * 0,0238 + 20 * 0,0333 + 21 * 0,0500 + 22 * 0,0833 + 23 * 0,1667 + 24 * 0,5000) = 0,1244 біт / сек
Надмірність повідомлень, складених з даного алфавіту.
D = 1 - (Н / Н max) = 1 - (2,6409 / 4,5850) = 0,4240
Побудова оптимального коду
1 | p24 = 0,5000 | 0,5 | 0 | 0 | ||||||||||||||||
2 | p23 = 0,1667 | 0,5 | 1 | 0,25 | 1 | 0,1666 | 1 | 111 | ||||||||||||
3 | p22 = 0,0833 | 1 | 1 | 0,0833 | 0 | 11 0 | ||||||||||||||
4 | p21 = 0,0500 | 1 | 0,25 | 0 | 0 | 0,05 | 1 0 | 1 0 00 | ||||||||||||
5 | p1 = 0,0417 | 1 | 0 | 0 | 0,0690 | 1 | 0,0357 | 1 | 1 0 0 11 | |||||||||||
6 | p20 = 0,0333 | 1 | 0 | 0,1190 | 0 | 1 | 0,0333 | 0 | 10010 | |||||||||||
7 | p19 = 0,0238 | 1 | 0 | 1 | 1 | 0,0428 | 1 | 0,0178 | 1 | 101111 | ||||||||||
8 | p18 = 0,0179 | 1 | 0 | 1 | 1 | 1 | 0,025 | 0 | 0,0138 | 0 | 1011100 | |||||||||
9 | p17 = 0,0139 | 1 | 0 | 1 | 1 | 0 | 0,025 | 1 | 1 01101 | |||||||||||
10 | p16 = 0,0111 | 1 | 0 | 1 | 0,0666 | 1 | 1 | 0 | 101110 | |||||||||||
11 | p15 = 0,0091 | 1 | 0 | 1 | 0,0642 | 0 | 0 | 1 | 0,0090 | 1 | 1010011 | |||||||||
12 | p14 = 0,0076 | 1 | 0 | 1 | 0 | 0 | 1 | 0,0102 | 0 | 0,0054 | 0 | 10100100 | ||||||||
13 | p13 = 0,0064 | 1 | 0 | 1 | 0 | 0 | 0,0166 | 0 | 0,0064 | 1 | 1 010001 | |||||||||
14 | p12 = 0,0055 | 1 | 0 | 1 | 0 | 0 | 0,0166 | 1 | 0,0064 | 1 | 1010011 | |||||||||
15 | p11 = 0,0048 | 1 | 0 | 1 | 0 | 0,0333 | 1 | 1 | 1 | 0,0047 | 1 | 10101111 | ||||||||
16 | p10 = 0,0042 | 1 | 0 | 1 | 0 | 1 | 1 | 0,0088 | 1 | 0 | 0,0032 | 0 | 101011100 | |||||||
17 | p9 = 0,0037 | 1 | 0 | 1 | 0 | 1 | 1 | 0,0078 | 0 | 0,0036 | 1 | 10101101 | ||||||||
18 | p8 = 0,0033 | 1 | 0 | 1 | 0 | 1 | 1 | 0,0078 | 1 | 0,0036 | 0 | 10101110 | ||||||||
19 | p7 = 0,0029 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 10101010 | ||||||||||
20 | p6 = 0,0026 | 1 | 0 | 1 | 0 | 1 | 0,0167 | 0 | 1 | 0,0026 | 1 | 0,002 6 | 1 | 1 01010111 | ||||||
21 | p5 = 0,0024 | 1 | 0 | 1 | 0 | 1 | 0,0147 | 0 | 1 | 1 | 0,002 4 | 0 | 101010110 | |||||||
22 | p4 = 0,0022 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0,00 22 | 0 | 10101000 | |||||||||
23 | p3 = 0,0020 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0,003 8 | 1 | 0,00 20 | 1 | 101010011 | |||||||
24 | p2 = 0,0018 | 1 | 0 | 1 | 0 | 1 | 0 | 0,0083 | 0 | 1 | 0,0018 | 0 | 101010010 |
Буква | Імовірність появи букви | Кодові слова | Кількість символів в кодовому слові | P i · l i |
A [1] (p24) | 0,5000 | 0 | 1 | 0,5 |
A [2] (p23) | 0,1667 | 111 | 3 | 0,50001 |
A [3] (p22) | 0,0833 | 110 | 3 | 0,2 500 |
A [4] (p21) | 0,0500 | 1000 | 4 | 0,2 000 |
A [5] (p 1) | 0,0417 | 10011 | 5 | 0, 2083 |
A [6] (p20) | 0,0333 | 10010 | 5 | 0,1 667 |
A [7] (p19) | 0,0238 | 101111 | 6 | 0,1 429 |
A [8] (p18) | 0,0179 | 1011100 | 7 | 0,1 250 |
A [9] (p17) | 0,0139 | 101101 | 6 | 0, 0833 |
A [10] (p16) | 0,0111 | 101110 | 6 | 0,0 667 |
A [11] (p15) | 0,0091 | 1010011 | 7 | 0,06 36 |
A [12] (p14) | 0,0076 | 10100100 | 8 | 0,0 6 06 |
A [13] (p13) | 0,0064 | 1010001 | 7 | 0,044 9 |
A [14] (p12) | 0,0055 | 1010011 | 7 | 0,0 385 |
A [15] (p11) | 0,0048 | 10101111 | 8 | 0,038 1 |
A [16] (p10) | 0,0042 | 101011100 | 9 | 0,03 75 |
A [17] (p9) | 0,0037 | 10101101 | 8 | 0,02 94 |
A [18] (p 8) | 0,0033 | 10101110 | 8 | 0,0 261 |
A [19] (p 7) | 0,0029 | 10101010 | 8 | 0,02 34 |
A [20] (p 6) | 0,0026 | 101010111 | 9 | 0,02 37 |
A [21] (p 5) | 0,0024 | 101010110 | 9 | 0,021 4 |
A [22] (p 4) | 0,0022 | 10101000 | 8 | 0,01 73 |
A [23] (p 3) | 0,0020 | 101010011 | 9 | 0,017 8 |
A [24] (p 2) | 0,0018 | 101010010 | 9 | 0,01 63 |
Визначення кількості інформації на символ повідомлення. Побудова оптимального коду.
З початок безліч з повідомлень розташуємо в порядку убування ймовірностей. Потім, розіб'ємо дане безліч на дві групи таким чином, щоб сумарні ймовірності повідомлень обох груп були по можливості рівні. Але оскільки рівність не досягається, то ми їх ділимо так, щоб у верхній частині залишалися символи, сумарна ймовірність яких менше сумарної ймовірності символів у нижній частині. Першій групі присвоюємо символ 0, а другої групи = символ 1. кожну з утворених підгруп ділимо на дві частини таким чином, щоб сумарні ймовірності новостворених підгруп були по можливості рівні. Першим групам кожної з підгруп знову присвоюємо 0, а другим 1. таким образам ми отримуємо ми отримуємо друга цифри коду. Потім кожну з чотирьох груп знову ділимо на рівні частини до тих пір, поки в кожній з підгруп не залишиться по одній букві.
Оптимальний код (вийшов результат):
Буква | Імовірність появи букви | Кодове слово | Кількість символів в кодовому слові | p i ∙ l i |
P 1 | 0,055 | 000 | 3 | 0,165 |
P2 | 0, 0 53 | 0010 | 4 | 0,212 |
P3 | 0,051 | 00110 | 5 | 0,255 |
P4 | 0,050 | 00111 | 5 | 0,250 |
P5 | 0,048 | 0100 | 4 | 0,192 |
P6 | 0,046 | 0101 | 4 | 0,176 |
P7 | 0,044 | 0110 | 4 | 0,114 |
P8 | 0,043 | 01110 | 5 | 0,215 |
P9 | 0,041 | 011110 | 6 | 0,246 |
P10 | 0,040 | 011111 | 6 | 0,240 |
P11 | 0,039 | 1000 | 4 | 0,156 |
P12 | 0,038 | 10010 | 5 | 0,190 |
P13 | 0,036 | 10011 | 5 | 0,180 |
P14 | 0,035 | 1010 | 4 | 0,140 |
P15 | 0,0 33 | 10110 | 5 | 0,165 |
P16 | 0, 032 | 101110 | 6 | 0, 192 |
P17 | 0, 030 | 101111 | 6 | 0,180 |
P18 | 0, 029 | 11000 | 5 | 0,145 |
P19 | 0,0 27 | 11001 | 5 | 0,135 |
P20 | 0,0 26 | 11010 | 5 | 0,130 |
P21 | 0,0 25 | 110110 | 6 | 0,150 |
P22 | 0,0 23 | 110111 | 6 | 0,138 |
P23 | 0,0 22 | 11100 | 5 | 0,110 |
P24 | 0,0 20 | 111010 | 6 | 0,120 |
P25 | 0,0 19 | 111011 | 6 | 0,114 |
P26 | 0,0 18 | 111100 | 6 | 0,108 |
P27 | 0,0 17 | 111101 | 6 | 0,102 |
P28 | 0,0 16 | 111110 | 6 | 0,096 |
P29 | 0,0 13 | 1111110 | 7 | 0,091 |
P30 | 0,0 12 | 11111110 | 8 | 0,096 |
P31 | 0,010 | 11111111 | 8 | 0,080 |
Ручне побудова ОНК за методикою Шеннона-Фано:
P1 | 0,010 | 11111111 | 0,520 | 0,277 | 0,147 | 0,086 | 0,051 | 0,035 | 0,022 | 0,010 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
P2 | 0,0 12 | 11111110 | 0,012 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
P3 | 0,0 13 | 1111110 | 0,013 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
P4 | 0,0 16 | 111110 | 0,016 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
P5 | 0,0 17 | 111101 | 0,035 | 0,017 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
P6 | 0,0 18 | 111100 | 0,018 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
P7 | 0,0 19 | 111011 | 0,061 | 0,039 | 0,019 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
P8 | 0,0 20 | 111010 | 0,020 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
P9 | 0,0 22 | 11100 | 0,022 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
P10 | 0,0 23 | 110111 | 0,130 | 0,074 | 0,048 | 0,023 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
P11 | 0,0 25 | 110110 | 0,025 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
P12 | 0,0 26 | 11010 | 0,026 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
P13 | 0,0 27 | 11001 | 0,056 | 0,027 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
P14 | 0, 029 | 11000 | 0,029 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
P15 | 0, 030 | 101111 | 0,243 | 0,130 | 0,095 | 0,062 | 0,030 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
P16 | 0, 032 | 101110 | 0,032 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
P17 | 0,0 33 | 10110 | 0,033 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
P18 | 0,035 | 1010 | 0,035 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
P19 | 0,036 | 10011 | 0,113 | 0,074 | 0,036 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
P20 | 0,038 | 10010 | 0,038 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
P21 | 0,039 | 1000 | 0,039 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
P22 | 0,040 | 011111 | 0,471 | 0,262 | 0,168 | 0,124 | 0,081 | 0,040 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
P23 | 0,041 | 011110
ТЕКСТ ПРОГРАМИ: uses Crt, Graph; const k = 24; type mass = array [1 .. k] of real; var i, x: integer; s, H, Hmax, deltaD, sum, C, sumTiPi, D: real; p, a: mass; code: array [1 .. k] of string [20]; {Процедура побудови оптимального коду за методикою Шеннона-Фано} procedure shannona (b: mass); procedure divide (var nS: integer; n1, n2: integer); var s, s1, s2: real; begin s: = 0; for i: = n1 to n2 do s: = s + a [i]; s1: = 0; s2: = 0; i: = n1-1; repeat inc (i); s1: = s1 + a [i]; s2: = s1 + a [i +1]; until abs (s/2-s1) <abs (s/2-s2); nS: = i; for x: = n1 to nS do if (s/2-s1)> = 0 then code [x]: = code [x] + "0" else code [x]: = code [x] + 1 "; for x: = nS +1 to n2 do if (s/2-s1) <0 then code [x]: = code [x] + "0" else code [x]: = code [x] + 1 "; end; var tmp: real; j, n1, n2, nS: integer; begin for i: = 1 to k do code [i ]:=''; for i: = 1 to k do a [i]: = b [i]; for i: = 1 to k do for j: = k downto (i +1) do if a [i] <a [j] then begin tmp: = a [i]; a [i]: = a [j]; a [j]: = tmp; end; j: = 1; repeat divide (nS, j, k); n1: = nS; while (nS-j)> 0 do divide (nS, j, nS); j: = nS +1; n2: = n1; while (n1-j)> 0 do divide (n1, j, n1); j: = n2 +1; until j> (k-1); end; procedure zastavka; var dr, reg, err: integer; begin dr: = detect; reg: = detect; initgraph (dr, reg, 'd: \ tp7 \ tpu \'); err: = graphresult; if err <> grok then begin writeln ('Помилка ініціалізації графічного модуля!'); halt; end; setcolor (19); settextstyle (3,0,4); outtextxy (150,40, 'Розрахунково-графічна робота'); outtextxy (240,65, 'на тему'); setcolor (14); settextstyle (4,0,4); outtextxy (50,125,'''Побудова оптимального коду методом Шеннона-Фано'''); settextstyle (6,0,2); setcolor (19); outtextxy (325,250, 'Виконав:'); settextstyle (6,0,2); setcolor (10); outtextxy (400,250, 'Калінін С. А. ПС -11'); outtextxy (200,450, 'Натисніть будь-яку клавішу'); readln; closegraph; end; procedure vivod; begin textcolor (lightgreen); writeln ('Оптимальний код:'); {висновок кінцевої таблиці} writeln ('Символ': 7, 'Імовірність': 13, 'Оптимальний код': 20, 'Кількість зн.': 15, 'Ймовірно .* Чісл.зн.': 20); for i: = 1 to k do begin write ('p [', i: 2, ']'); write (p [i]: 0:4, ''); write (code [i]: 20, ''); write (length (code [i]): 15, ''); write ((p [i] * length (code [i])): 0:4); if i <> k then writeln; end; end; begin zastavka; clrscr; {1.1 а) Кількість інформації на символ повідомлення, складеного з алфавіту рівноймовірно символів} Hmax: = ln (k) / ln (2); {1.1 б) Розрахунок ймовірностей для неравновероятних символів} p [1]: = 0.15; sum: = p [1]; for i: = 2 to k do begin p [i]: = sum / (k +1- i); sum: = sum + p [i]; end; clrscr; textcolor (11); writeln ('Проміжні значення ймовірностей:'); writeln; textcolor (10); for i: = 1 to 14 do writeln ('Імовірність p [', i: 2, '] =', p [i]: 4:4); readkey; clrscr; textcolor (11); writeln ('Проміжні значення ймовірностей:'); writeln; textcolor (10); for i: = 15 to k do writeln ('Імовірність p [', i: 2, '] =', p [i]: 4:4); writeln; textcolor (11); for i: = 1 to k do s: = s + p [i]; writeln ('Сума ймовірностей =', s: 4:2); readkey; H: = 0; sumTiPi: = 0; for i: = 1 to k do begin p [i]: = p [i] / sum; {1.1 б) Розрахунок ентропії для алфавіту неравновероятних символів} H: = H + p [i] * (ln (1 / p [i]) / ln (2)); sumTiPi: = sumTiPi + i * p [i]; end; clrscr; textcolor (11); writeln ('Остаточні значення:'); writeln; textcolor (10); for i: = 1 to 14 do writeln ('Імовірність p [', i: 2, '] =', p [i]: 4:4); readkey; clrscr; textcolor (11); writeln ('Остаточні значення:'); writeln; textcolor (10); for i: = 15 to k do writeln ('Імовірність p [', i: 2, '] =', p [i]: 4:4); writeln; textcolor (11); s: = 0; for i: = 1 to k do s: = s + p [i]; writeln ('Сума ймовірностей =', s: 4:2); readkey; {1.1 б) Визначення недовантаження символів} deltaD: = Hmax - H; {1.2 Розрахунок швидкості передачі повідомлення} C: = H / SumTiPi; {1.3 Розрахунок надмірності повідомлення} D: = 1 - H / Hmax; {Виклик процедури побудови оптимального коду} shannona (p); {Виведення результатів} clrscr; textcolor (11); {Writceln ('Кількість символів алфавіту =', k ,'.');} writeln ('1 .1 Кількість інформації на символ повідомлення: '); writeln ('a) для алфавіту рівноймовірно таблиця:'); textcolor (10); writeln ('Hmax =', Hmax: 7:4, 'біт / символ'); textcolor (11); writeln ('b) для алфавіту неравновероятних таблиця:'); textcolor (10); writeln ('H =', H: 7:4, 'біт / символ'); textcolor (11); write ('Недовантаження:'); textcolor (10); writeln ('дельта D =', deltaD: 7:4, 'біт / символ'); textcolor (11); writeln; Writeln ('1 .2 Швидкість передачі інформації: '); textcolor (10); writeln ('C =', C: 7:4, 'біт / сек'); textcolor (11); writeln; Writeln ('1 .3 Надмірність повідомлень: '); textcolor (10); writeln ('D =', D: 7:4); writeln; TextColor (11); write ('Натисніть будь-яку клавішу для виведення таблиці резултате побудови.'); readkey; clrScr; vivod; readkey; end. Висновок: У моїй роботі я використовував теоретичний матеріал і розроблену на мові (високого рівня) Turbo Pascal програму. Мною було розраховано кількість інформації на символ повідомлення, складеного з алфавіту, що складається з 24 символу, для двох випадків: 1] якщо символи алфавіту зустрічаються з рівними ймовірностями; 2] якщо ймовірності не рівні. Також я визначив кількість недовантаження символів у другому випадку, обчислив кількість інформації на символ повідомлення та швидкість передачі повідомлень, складених з таких символів, знайшов надмірність повідомлень, складених з даного алфавіту. Побудував оптимальний код повідомлення, застосовуючи методику Шеннона-Фано: за допомогою послідовного розподілу безлічі ймовірностей на групи за принципом рівності сум ймовірностей я склав у відповідність кожному символу найбільш оптимальну двійкову комбінацію. Таким чином, був отриманий оптимальний двійковий код для алфавіту з 31 символу. В результаті виконання роботи були отримані наступні результати:
Список використаної літератури: 1. Бауер Ф. Інформатика, М. 1992. 2. Колесник В.Д. Курс теорії інформації, М. 1982. 3. Фаронов В. В. Turbo Pascal 7.0. Навчальний посібник, М. 2000. 4. Цимбалу В.П. Задачник по теорії інформації та кодування, Київ. 1976. 5. Марченко А.І. Програмування в середовищі Turbo Pascal 7.0. Будь ласка, не зберігайте тестовий текст. |