XÂY DỰNG MÔ HÌNH
.I.1.Tín ht ns xu thi ûn cua các kí hi ûu íê
.I.1.Tính tần số xuất hiện của các kí hiệu
tính t n s cho các kí hi ûu ta s dụng m üt ma ng
Để ầ ố ê ử ô í cumfreq du ngì
đ ch ïa đ ûng vi ûc tích lũy t n s cu a các kí hi ûu s đ üc g i t mể ư ư ê ầ ố í ê ươ ử ừ ô hình đ mã hóa va hoa n tha nh vi ûc chuy n đ i m ùi kí hi ûu. T ch ïcể ì ì ì ê ể ổ ô ê ổ ư m üt c y ng m định cho vi ûc c t gi î ma ng ch ïa bi n đ m tích lũy t nô â ầ ê ấ ư í ư ế ế ầ s cu a các kí hi ûu ma v ùn gi î đ üc th ï t û cu a các kí hi ûu va chỉố í ê ì â ư ươ ư ư í ê ì c n n t cho ba ng có n kí hi ûu. Ph ng pháp đ y la tính toán va c ûpầ ừ í ê ươ ở â ì ì â nh ût lại các giá trị lâ s ,hs nh sau: ư
∑ ∑ = − = = = s 1 i s s 1 s 1 i s s f h f l
Trong đó: ls la m ïc th p, hì ư ấ s la m ïc cao cu a cu a bi n đ m tr ïc khiì ư í í ế ế ươ tích luy t n s trong ng î ca nh cu a các kí hi ûu t ng ïng, fầ ố ư í í ê ươ ư s la bi nì ế ch ïa t n s cu a kí hi ûu s.ư ầ ố í ê
Vi ûc đ m tích lũy d n có th đ üc c ûp nh ût trong logarith th iê ế ầ ể ươ â â ờ gian trong c u trúc bă ng cách du ng theo s û đi u khi n đ trao đ i c uấ ò ì ư ề ể ể ổ ấ trúc c y ng m định trong ma ng đó. Gia s ră ng s la s kí hi ûu trongâ ầ í í ử ò ì ố ê khoa ng t 1 đ n n. Ta định nghĩa ha m backward(s) đ ch ïa đ ûng giá trịí ừ ế ì ể ư ư t s bă ng cách tr đi 1đ i v ïi các bit 1 b n pha i nh t cu a s bi u di ùnừ ò ừ ố ơ ở ê í ấ í ể ê bă ng giá trị nhị ph n. Ví dụ: s 13 có dãy bit nhị ph n la 1101 do đóò â ố â ì backward(13) = 1100 = 12, backward(12) = 1000 = 8, va backward(8) = 0000.ì
KHOA CNTT - TVTĐ Nguyễn Mậu Nghĩa – Lớp
T ng t û nh v ûy ta định nghĩa ha m forward(s) la s + 2ươ ư ư â ì ì I v ïi đi uơ ề ki ûn i la vị trí xu t hi ûn l n th ï m üt cu a bit 1 tính t b n pha i qua. Víê ì ấ ê ầ ư ô í ừ ê í dụ forward(13) = 13 + 20 = 14, forward(14) = 14+ 21 = 16, forward(16) = 16 + 24
= 32.
Ca backward(s) va forward(s) có th th ûc hi ûn bă ng cách du ng cácí ì ể ư ê ò ì thao tác đ i v ïi bit. ó la backward(i) la i - (i and - i) hoặc i and (i - 1),ố ơ Đ ì ì forward(i) la i+ (i and -i).ì
a ra ma ng F, tính h
Đư í s va tăng t n s cu a kí hi ûu s đ üc hoa nì ầ ố í ê ươ ì tha nh b i vo ng lặp. ì ở ì Để tính hs du ng F v ïi đi u ki ûn 1 ì ơ ề ê < s < n.
s 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Fs 1 1 1 4 3 5 2 3 6 5 4 1 1 9 F[s] 1 2 1 7 3 8 2 20 6 11 4 16 1 10 ∑ − = = 1 1 s i s s f l 0 1 2 3 7 10 15 17 20 26 31 35 36 37 ∑= = s i s s f h 1 1 2 3 7 10 15 17 20 26 31 35 36 37 46 Bảng 4: Ví dụ về cấu trúc cây ngầm định Ví dụ: h13 đ üc tính nh F[13] + F[12] | + F[8] đ y la hình th ïc rútươ ư â ì ư gọn cu a t ng (hí ổ 13 - h12 ) + (h12 - h8 ) + (h8 - h0 ). y chính la các b ïc 1Đâ ì ươ va b ïc 2 trong thu ût toán hình d ïi. Nó cũng h ïng thă ng đ n vi ûcì ươ â ở ươ ươ ó ế ê đ m tăng t n s du ng m üt qui trình c ûp nh ût đ n lũy th a b ûc haiế ầ ố ì ô â â ế ừ â cu a b n pha i F[s] đ y la các b ïc th ï 3 va th ï 4 cu a thu ût toán hìnhí ê í â ì ươ ư ì ư í â ở d ïi. Giá trị cu a bi n ươ í ế increment có th l y la 1, nh ng nh cách trình ba yể ấ ì ư ư ì hình d ïi có th la nó l ïn h n 1n u có m üt va i s û ép bu üc nh la
ở ươ ể ì ơ ơ ế ô ì ư ô ư ì
các t n s cu a b ü ph ûn đ üc th ng th ng hóa trong m üt vu ng va nóầ ố í ô â ươ ô ườ ô ì ì cũng đ üc duy trì. T lươ ừ s = hs - 1, dĩ nhi n la ta có th x lý t ng t û đê ì ể ử ươ ư ể tính ls ma kh ng c n các b ïc 3 va b ïc 4. ì ô ầ ươ ì ươ Get_frequecy(C,s) { 1- ặt i = s va hĐ ì s = 0 2- Trong khi i != 0 la mì ặt h Đ s = hs + F[i] i = backward(i) 3- ặt i = sĐ 4- Trong khi i < n la m ì
ặt F[i] = F[i] + increment Đ
i = forward(i) 5- return hs
Hình 8: Thuật toán lấy tần số theo cây ngầm định.
Ha m getì _frequency(C, s) tra v s û tích lũy t n s cu a các kí hi ûuí ề ư ầ ố í ê đ ïng tr ïc va bao g m ca s trong ba ng alphabet. Gia s ră ng ma ng Fư ươ ì ồ í ở í í ử ò í va kích th ïc cu a ba ng la n la tha nh ph n cu a ng î ca nh C, v ïi C laì ươ í í ì ì ì ầ í ư í ơ ì c u trúc d î li ûu đã du ng. Khi m üt kí hi ûu đ üc đọc va o thì hấ ư ê ì ô ê ươ ì s đ ücươ tính lại, bi n đ m t n s cu a kí hi ûu la ế ế ầ ố í ê ì increment cũng đ üc tăng. Bi nươ ế
increment cũng la m üt tha nh ph n cu a ng î ca nh C.ì ô ì ầ í ư í Bi n ng î ca nh C đ üc khai báo nh sau:ế ư í ươ ư Typedef struct {
Int initial_size;
Int max_length, length; Freq_value nSingletons; Int type;
Int nSmbols; Freq_value total; Freq_value *tree
Freq_value increment; Int most_freq_symbol;
Freq_value most_freq_count; Freq_value most_freq_pos; } context;
Trong đó các tr ng tha nh ph n cu a bi n context có ý nghĩa nhườ ì ầ í ế ư sau:
KHOA CNTT - TVTĐ Nguyễn Mậu Nghĩa – Lớp
- initial_size la đ ü da i g c cu a ng î ca nh.ì ô ì ố í ư í
- max_length, length đ ü da i t i đa cu a c y ng m định va đ ü da iô ì ố í â ầ ì ô ì hi ûn tại.ê
- nSingletons la s các kí hi ûu có t n s bă ng 1.ì ố ê ầ ố ò
- type la ki u cu a ng î ca nh đó, đ y có hai i u cu a type la STATICì ể í ư í ở â ể í ì va DYNAMICì
- nSymbol la s kí hi ûu đã đ üc mã hoá.ì ố ê ươ
- total la t ng cu a các t t ca các t n s cu a các kí hi ûu.ì ổ í ấ í ầ ố í ê
- *tree con tro cu a c y ng m định.í í â ầ
- increment bi n tăng du ng trong thu ût toán cu a c y ng m định.ế ì â í â ầ
- most_freq_symbol la kí hi ûu có t n s l ïn nh t.ì ê ầ ố ơ ấ
- most_freq_count la bi n đ m các kí hi ûu có t n s l ïn nh t.ì ế ế ê ầ ố ơ ấ
- most_freq_pos la vị trí cu a các bi n có t n s l ïn nh t.ì í ế ấ ố ơ ấ
Trong đó ki u freqể _value đ üc định nghĩa la s û chính xác cu a cácươ ì ư í bit l u gi î t n s cu a các kí hi ûu. Nó đ üc định nghĩa nh sau:ư ư ấ ố í ê ươ ư
Typedef insigned long freq_value
.I.2. Mô hình từ
V ïi m hính t ta xem đ u va o d ïi dạng các t va kh ng t xen kẽơ ô ừ ầ ì ươ ừ ì ô ừ l ùn nhau. Do đó các t va kh ng tr t tr tha nh các kí hi ûu đ üc nénâ ừ ì ô ở ừ ở ì ê ươ do v ûy chúng ta có nhi u cách đ nén chúng. Nhìn chung hi ûu quaâ ề ể ê í nh t la m hình b ûc kh ng cho các t va m hình b ûc khác kh ng choấ ì ô â ô ừ ì ô â ô các kh ng t . đ y nó cho ră ng n üi dung các văn ba n la s û xen ke gi îaô ừ Ở â ò ô í ì ư í ư các t va kh ng t . Do đó pha i có hai m hình khác nhau đ üc du ngừ ì ô ừ í ô ươ ì lu n phi n đ y cho m ùi loại kí hi ûu. Th ng th ng thì kí hi ûu thoátâ ê ở â ô ê ô ườ ê đ üc mã hoá tr ïc va ti p theo các t m ïi xu t hi ûn, va các t na yươ ươ ì ế ừ ơ ấ ê ì ừ ì đ üc c u tạo b i các kí t û li n ti p nhau. ươ ấ ở ư ê ế Đố ơi v ïi các kí t û ta có thư ể du ng m hình đ n gia n h n ví dụ nh m hình kí t û b ûc kh ng.ì ô ơ í ơ ư ô ư â ô
Các m hình nén t đặc bi ût thích h üp cho các loại văn ba n l ïn,ô ừ ê ơ í ơ b i vì các t th ng đ üc l u tr î v ïi mục đích đ la m chỉ mục, do đóở ừ ườ ươ ư ư ơ ể ì các chỉ mục na y có th đ üc du ng nh m üt ph n cu a m hình nén.ì ể ươ ì ư ô ầ í ô
La m th na o đ chia m üt văn ba n tha nh các t va kh ng t xen kẽì ế ì ể ô í ì ừ ì ô ừ nhau? M üt s đ đặc bi ût đó la coi s û ch m c u nh la m üt ph n cu aô ơ ồ ê ì ư ấ â ư ì ô ầ í
t . Cách chia na y kh ng mang lại hi ûu qua nén, nh ng nó mang lạiừ ì ô ê í ư k t qua la danh sách các t ti ûn l üi cho mục đích l ûp chỉ mục.ế í ì ừ ê ơ â
M üt v n đ khác c n chú ý đ y la vi ûc x lý các con s . N uô ấ ề ầ ở â ì ê ử ố ế các ch î s đ üc xem nh các kí t û thì m üt ha ng li n ti p các ch î sư ố ươ ư ư ô ì ê ế ư ố sẽ đ üc xem nh la m üt t . S û ph n ph i t n s cu a các s khác xaươ ư ì ô ừ ư â ố ầ ố í ố v ïi s û ph n ph i t n s cu a các t do đó n u ta s dụng cách x lýơ ư â ố ấ ố í ừ ế ử ử cu a các t đ x lý các s thì nó kh ng mang lại hi ûu qua nén cao.í ừ ể ử ố ô ê í Do đó ta sẽ chia các s da i h n tha nh các s ngă n bă ng cách ta gi ïiố ì ơ ì ố õ ò ơ hạn đ ü da i t i đa các ch î s trong m üt s . N u s na o da i quá thì taô ì ố ư ố ô ố ế ố ì ì sẽ tách s đó tha nh hai ph n.ố ì ầ
Thu ût toán du ng cho m hình t b ûc kh ng đ üc m ta nh hìnhâ ì ô ừ â ô ươ ô í ư ở d ïi. Du ng ha m getươ ì ì _word() đ đọc va o danh sách ca các t . R i nénể ì í ừ ồ danh sách t ng ïng đó, v ïi c u tạo cu a các t la dãy li n ti p các kíươ ư ơ ấ í ừ ì ê ế t û tại l n xu t hi ûn đ u ti n r i thi t l ûp m üt t mã đ du ng choư ầ ấ ê ầ ê ồ ế â ô ừ ể ì các l n xu t hi ûn sau đó. đ y s dụng ba c u trúc d î li ûu la cácầ ấ ê Ởí â ử ấ ư ê ì ng î ca nh g m: C, W va L. Trong đó: ư í ồ ì
−C: la t ûp h üp các kí t û có giá trị trong tha nh ph n cu a các t .ì â ơ ư ì ầ í ừ
−W: t ûp h üp các t có giá trị.â ơ ừ
−L: la t ûp h üp các đ ü da i cu a các t xác định.ì â ơ ô ì í ừ
C u trúc D la t đi n đ chuy n đ i m üt t trong s các t t ngấ ì ừ ể ể ể ổ ô ừ ố ừ ươ ïng v ïi s các t đã gán trong l n xu t hi ûn đ u ti n trong danh sách
ư ơ ố ừ ầ ấ ê ấ ê ở
đ u va o.ầ ì
KHOA CNTT - TVTĐ Nguyễn Mậu Nghĩa – Lớp
95T
Encode-file() {
1- ặt W = creatĐ _context()
Install_symbol(W, end_of_message) 2- ặt D = makeĐ _empty_dictionary() 3- ặt C = creatĐ _context() Trong khi kí t û c co n h üp l û la mư ì ơ ê ì Install_symbol(C, c) 4- ặt L = creatĐ _context() Trong khi đ ü da i l co n h üp l û la mô ì ì ơ ê ì Install_symbol(L, l) 5- start-encode() 6- Trong khi co n các t la mì ừ ì ặt word = read Đ _one_word() ặt w = lookup
Đ _word_number(D, word)
N u (encode(W, w) = escapeế _transmitted) thì Encode(L, length(word))
V ïi m ùi kí t û c trong t la mơ ô ư ừ ì Encode(C, c)
Insert_into_dictionary(D, word) Install_symbol(W, w)
7- encode(W, end_of_message) 8- finish_encode()
Hình 9: Thuật toán mã hóa file dùng mô hình từ bậckhông
đ y ha m cread
Ở â ì _context() du ng đ kh i tạo các giá trị cu a cácì ể ở í ha nh ph n m üt ng î ca nh th ng th ng nó đ üc kh i tạo nh sau:ì ầ ô ư í ô ườ ươ ở ư
Context *create_context(int length, int type) { context *pContext; int size = 1; . . .
pContext->initial_size = size; pContext->length = 1;
pContext->total = 0; pContext->nSymbols = 1; pContext->type = type;
pContext->max_length = size; pContext->most_freq_symbol = -1; pContext->most_freq_count = 0; pContext->most_freq_pos = 0; }
Ha m installì _symbol() du ng đ ca i đặt m üt kí t û va o trong m üt ng îì ể ì ô ư ì ô ư ca nh. T ïc la nó gán các giá trị cu a kí t û cho các tha nh ph n cu aí ư ì í ư ì ầ í bi n ng î ca nh có li n quan.ế ư í ê
.I.3.Mô hình kí tự .
V ïi m hình kí t û thì nó d ù th ûc hi ûn nh ng hi ûu qua nénơ ô ư ê ư ê ư ê í kh ng cao. Ch ng trình đọc va o l n l üt các kí t û r i n ha nh mãô ươ ì ầ ươ ư ồ ế ì hoá chũng d ûa va o xác su t xu t hi ûn cu a chúng. đ y ch ng trìnhư ì ấ ấ ê í Ở â ươ xét các kí t û trong ba ng mã ASCII m r üng, m ùi mã ASCII m r üng cóư í ở ô ô ở ô 8 bit.
Thu ût toán cu a du ng cho m hình kí t û b ûc kh ng đ üc m ta â í ì ô ư â ô ươ ô í ở các hình d ïi đ y:ươ â
KHOA CNTT - TVTĐ Nguyễn Mậu Nghĩa – Lớp
95T
Encode_file( ) {
1- Đặt C = creat_context( )
Install_symbol(C, end_of_message) 2 – Trong khi c != end_of_message la mì install_symbol(C, c)
3- start_encode()
4- Trong khi c != end_of_message la mì ặt c = readĐ _one_character() Encode(C, c)
5- encode(C, end_of_message) 6- finish_encode()