Kỹ thuật nén số liệu mã hóa Số học

80 2.8K 12
 Kỹ thuật nén số liệu mã hóa Số học

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Kỹ thuật nén số liệu mã hóa Số học

K thût nẹn säú liãûu m hoạ Säú hc Trang TỌM TÀÕT LÛN VÀN TÄÚT NGHIÃÛP Näüi dung ca âäư ạn våïi âãư ti K thût nẹn säú liãûu m họa Säú hc âỉåüc triãøn khai thnh hai pháưn chờnh laỡ phỏửn thuyóỳt minh vaỡ phỏửn chổồng trỗnh: * Pháưn thuút minh gäưm chỉång âỉåüc täø chỉïc sau: Chỉång I: Giåïi thiãûu thỉûc trảng v sỉû cáưn thióỳt cuớa neùn sọỳ lióỷu Chổồng II: Trỗnh baỡy caùc kiãún thỉïc täøng quan, mäüt säú khại niãûm v cáúu truùc cuớa quaù trỗnh neùn sọỳ lióỷu Chổồng III: Trỗnh baỡy vóử caùc vỏỳn õóử lión quan cuớa quaù trỗnh m họa Triãøn khai cạc thût toạn våïi cáúu trục dỉỵ liãûu ph håüp âãø ci âàût trãn ngän ngỉỵ lỏỷp trỗnh bỏỷc cao Chổồng IV: Trỗnh baỡy vóử cỏỳu truùc dổợ lióỷu vaỡ thuỏỷt toaùn cuớa caùc mọ hỗnh tổỡ vaỡ mọ hỗnh kờ tổỷ Trỗnh baỡy vóử mọ hỗnh bỏỷc cao Chổồng V: Trỗnh baỡy vóử kóỳt quaớ thổỷc nghióỷm õaợ tióỳn haỡnh vồùi caùc mọ hỗnh õaợ triãøn khai So sạnh kãút qu våïi phỉång phạp nẹn khạc Chỉång VI: Kãút lûn, nãu nhỉỵng váún âãư âảt âỉåüc, váún âãư chỉa gii quút v hỉåïng phạt triãøn cuớa chổồng trỗnh * Phỏửn chổồng trỗnh gọửm caỡc file ngưn v tãûp thỉûc thi Cạc file ngưn viãút mäi trỉåìng C åí hãû âiãưu hnh Linux Dỉûa theo thuỏỷt toaùn trỗnh baỡy taỡi lióỷu [3] KHOA CNTT - ÂTVT 95T Nguùn Máûu Nghéa – Låïp K thût nẹn säú liãûu m hoạ Säú hc Trang MỦC LỦC TỌM TÀÕT LÛN VÀN TÄÚT NGHIÃÛP MUÛC LUÛC CHỈÅNG I MÅÍ ÂÁƯU TÄØNG QUAN VÃƯ NẸN SÄÚ LIÃÛU I GIÅÏI THIÃÛU II PHÁN LOẢI CẠC K THÛT NẸN II.1 Neïn täøn hao II.2 Neïn khäng täøn hao III CẠC KHẠI NIÃÛM LIÃN QUAN ÂÃÚN NẸN SÄÚ LIÃÛU III.1 Sỉû phán bäú ca kê tæû .9 III.2 Sỉû làûp lải ca nhỉỵng kê tỉû III.3 Âäü dỉ thỉìa vë trê .9 III.4 Âån vë âo thäng tin (Entropy) vaì âäü daìi trung bỗnh cuớa tổỡ maợ III.5 Tyớ sọỳ neùn 10 IV CÁÚU TRỤC CA QUẠ TRÇNH NẸN SÄÚ LIÃÛU .10 IV.1 Mọ hỗnh hoaù .11 IV.1.1 Khaïi niãûm 11 IV.1.2 Bỏỷc cuớa mọ hỗnh 11 IV.1.3 Phỏn loaỷi mọ hỗnh 12 IV.2 M hoạ 13 IV.2.1 Khaïi niãûm 13 IV.2.2 Cạc phỉång phạp m hoạ: 13 K THÛT M HỌA SÄÚ HOÜC 19 V CẠC VÁÚN ÂÃƯ CÁƯN GII QUÚT 19 V.1 M họa cạc kê tỉû lả 19 V.2 Quaín lyï bäü nhåï .20 VI M HỌA 21 VI.1 Ngun tàõc m họa 21 VI.2 Cáúu trục dỉỵ liãûu v gii thût .21 VII GII M 24 KHOA CNTT - ÂTVT 95T Nguyãùn Máûu Nghéa – Låïp K thût nẹn säú liãûu m hoạ Säú hc Trang VII.1 Ngun tàõc gii m 24 VII.2 Cáúu trục dỉỵ liãûu v gii thût 25 VIII NHặẻNG HAN CH 27 XÁY DỈÛNG MÄ HÇNH 29 I MÄ HÇNH BÁÛC KHÄNG .29 I.1 Tênh táön säú xút hiãûn ca cạc kê hiãûu 29 I.2 Mọ hỗnh tổỡ 32 I.3 Mọ hỗnh kê tæû .35 II MÄ HÇNH BÁÛC CAO 36 CHặNG TRầNH V THỈÛC NGHIÃÛM .39 I CAèI T CHặNG TRầNH 39 I.1 M hoïa .39 I.2 Mọ hỗnh 39 I.3 Caïc mä âun 40 I.4 Cạch dng 41 II THỈÛC NGHIÃÛM 41 II.1 Giåïi thiãûu 41 II.2 Kãút qu thỉûc nghiãûm .42 II.2.1 Kãút qu thỉûc nghiãûm våïi caïc file kiãøu *.txt 42 II.2.2 Kãút qu thỉûc nghiãûm våïi cạc file kiãøu *.cpp 44 III KÃÚT LÛN VÃƯ KÃÚT QU THỈÛC NGHIÃÛM 45 KÃÚT LUÁÛN .47 CHặNG TRầNH NGUÄÖN .49 I CẠC FILE NGƯN (*.C) 49 I.1 File arith.c 49 I.2 File bitio.c 54 I.3 File char.c 55 I.4 File hashtable.c 56 I.5 File main.c 60 I.6 File stats.c 67 I.7 File word.c 75 II CẠC FILE TIÃU ÂÃƯ (*.H) 79 II.1 File arith.h 79 KHOA CNTT - ÂTVT 95T Nguyãùn Máûu Nghéa – Låïp K thût nẹn säú liãûu m hoaï Säú hoüc Trang II.2 File bitio.h 80 II.3 File hashtable h 81 II.4 File main.h 83 II.5 File stats.h 83 II.6 unroll.i .84 CHỈÅNG I MÅ Í Â Á ƯU Ngy cng våïi sỉû phạt triãøn khäng ngỉìng ca nãưn khoa hc k thût thãú giåïi l sỉû phạt triãøn vỉåüt báûc ca ngnh Cäng nghãû Thäng tin nọi chung v ngnh Tin hc nọi riãng Cạc hãû thäúng Tin hc giụp êch ráút nhiãưu cäng viãûc hng ngy ca cạc cå quan, âån vë táûp thãø hay mäùi cạ nhán cọ liãn quan Cạc hãû thäúng Tin hc cn giụp ta lỉu trỉỵ cạc thäng tin cáưn thiãút cọ liãn quan âãún cäng viãûc v âåìi säúng hng ngy M ngy cng khäúi lỉåüng thäng tin cáưn lỉu trỉỵ tàng lãn gáúp bäüi chụng ta khäng cn khäng gian âãø lỉu giỉỵ chụng nỉỵa Mäüt u cáưu âàût l ta phi lm nh lải khäng gian dnh cho cạc thäng tin âọ Våïi xu thãú toaỡn cỏửu hoùa, thỗ maỷng Internet õaợ õồỡi ỏy l mäüt mảng ca cạc mảng trãn thãú giåïi Qua mảng Internet ta cọ thãø ngäưi åí nh liãn lảc våïi cạc cäng ty, cạc âäúi tạc lm àn hay våïi b åí trãn khàõp thãú giåïi Qua mảng ny ta cọ thãø gỉíi âi v nháûn vãư cạc thäng tin cáưn thiãút phủc vủ cho cüc säúng hng ngy Khi gỉíi cạc thäng tin âi m ta õóứ nguyón nhổ vỏỷy gổới õi thỗ tọỳn rỏỳt nhióửu thåìi gian km theo âọ l sỉû täún kẹm vãư tiãưn bảc Cng våïi sỉû ho nháûp ca Tin hc vaỡo caùc lộnh vổỷc õồỡi sọỳng thỗ vióỷc xổớ lyù cạc loải táûp tin våïi cạc kiãøu file khạc l âiãưu táút úu, v cạc táûp tin ny thỉåìng cọ kêch thỉåïc låïn nãn nhiãưu gáy khọ khn cho cọng taùc lổu trổợ vaỡ truyóửn gổới Vỗ váûy, lỉu trỉỵ hay truưn KHOA CNTT - ÂTVT 95T Nguùn Máûu Nghéa – Låïp K thût nẹn säú liãûu m hoạ Säú hc Trang gỉíi ngỉåìi ta mong mún gim âãún mỉïc tháúp nháút dung lỉåüng bäü nhåï m cạc táûp tin ny chiãúm dủng âãø dãù täø chỉïc, qun l v tiãút kiãûm vãư kinh phê Âãø âạp ỉïng cạc u cáưu nãu trãn ngỉåìi ta â nghé phỉång phạp lm cho cạc thäng tin âọ nh lải nhàịm chiãúm dủng bäü nhåï êt hån Ngỉåìi ta gi âọ l k thût nẹn säú liãûu Vỏỷy neùn sọỳ lióỷu laỡ gỗ? õỏy chuùng ta cọ thãø giåïi thiãûu så qua vãư nẹn säú liãûu Neùn sọỳ lióỷu laỡ quaù trỗnh giaớm dung lổồỹng nhồù cáưn thiãút dnh cho cạc táûp tin m váùn biãøu diãùn cng mäüt lỉåüng thäng tin trỉåïc Cọ nhiãưu phỉång phạp nẹn khạc v chụng âỉåüc thiãút kãú cho caùc loaỷi dổợ lióỷu khaùc nhổ hỗnh aớnh, ám thanh, vàn bn.v.v näüi dung âäư ạn ny chè bn âãún phỉång phạp dng cho nẹn vàn bn Nẹn vàn bn bao hm thay âäøi sỉû biãøu diãùn ca táûp tin so våïi khäng gian träúng láúy âỉåüc nh hån åí khäúi lỉåüng dỉû trỉỵ hồûc nh hån thåìi gian truưn tên hiãûu, nhiãn ngun bn chênh ca táûp tin phi âỉåüc khäi phủc chênh xạc sau gii nẹn  cọ ráút nhiãưu phỉång phạp nẹn âỉåüc phạt minh v sỉí dủng nhiãưu nàm qua Khi thỉûc hiãûn gii phạp nẹn säú liãûu chụng ta cáưn phi xem xẹt âãún hai váún âãư trại ngỉåüc nhau: cạc thût toạn nẹn säú liãûu thỉûc hiãûn trỉåïc hãút phi âm bo gim chi phê lỉu trỉỵ m lải khäng sỉí dủng quạ nhiãưìu thåìi gian Ngun tàõc chung ca cạc phỉång phạp m hoạ âãưu dỉûa trãn nháûn xẹt loải b viãûc lỉu lải cạc thäng tin trng làûp Cạc k thût nẹn khäng täøn hao thỉåìng õổồỹc aùp duỷng cho caùc tỏỷp tin baớn vỗ chỉïa cạc k tỉû xút hiãûn thỉåìng xun hån cạc k tỉû khạc, v cạc thût toạn nẹn täøn hao thổồỡng aùp duỷng cho caùc tỏỷp tin aớnh vỗ cọ thãø l cạc vng âäưng nháút, hay cho mä t säú ca ám v cạc k hiãûu tỉång tỉû khạc Âàûc âiãøm ca nẹn vàn bn l dỉỵ liãûu ca tãûp tin gäúc phi ln ln âỉåüc khäi phủc lải mäüt cạch chênh xạc sau gii nẹn Mäüt nhỉỵng phỉång phạp nẹn vàn bn âỉåüc biãút såïm v â thnh cäng l nẹn Huffman, láưn âáưu tiãn âỉåüc phäø biãún vo âáưu nhỉỵng nàm 1950 KHOA CNTT - ÂTVT 95T Nguyãùn Máûu Nghéa – Låïp K thût nẹn säú liãûu m hoạ Säú hc Trang Phỉång phạp ny tảo cạc tỉì m khạc cho cạc kê hiãûu âáưu vo M họa Huffman âỉåüc xem mäüt nhỉỵng phỉång phạp nẹn täút nhiãưu tháûp k, cho âãún cọ bỉåïc âäüt phạ vãư k thût nẹn vo cúi nhỉỵng nàm by mỉåi l sỉû xút hiãûn ca phỉång phạp nẹn M họa Säú hc M họa Säú hc âåìi vo thåìi gian ny v âỉåüc nghiãn cỉïu phạt triãøn båíi nhiãưu nh nghiãn cỉïu Trong mäüt thåìi gian di tỉì nhỉỵng nàm by mỉåi âãún âáưu nhỉỵng nàm tạm mỉåi, m họa Säú hc bë coi l phỉång phạp khọ thổỷc hióỷn bồới vỗ noù khọng taỷo tổỡng tổỡ m riãng l cho tỉìng k hiãûu m chè tảo mäüt tỉì m nháút cho ton bäü ngưn sọỳ lióỷu Vỗ vỏỷy noù khọng õoỡi hoới sọỳ nguyón cạc bêt âãø m họa k hiãûu Vê dủ,û k tổỷ s coù xaùc suỏỳt xuỏỳt hióỷn laỡ Pr[s] thỗ lỉåüng thäng tin chỉïa âỉûng l -logPr[s] bit (biãøu thỉïc ny âỉåüc âënh nghéa l entropy ca k tỉû), gi sỉí xạc sút xút hiãûn ca k tỉû naỡy laỡ 99% thỗ Maợ hoùa Sọỳ hoỹc chố cỏửn sỉí dủng 0,015 bit âãø m họa nhỉng m họa Huffman phi sỉí dủng êt nháút l bit âãø maợ hoùa kyù tổỷ naỡy vỗ vỏỷy ngổồỡi ta noùi m họa Säú hc gáưn våïi entropy Tỉì âáy ta cọ thãø nghé âãún mäüt tè säú nẹn cao hån cho nẹn vàn bn ạp dủng phỉång phạp m họa Säú hc Sỉû cäng bäú m ngưn cho viãûc m họa nhiãưu kê hiãûu âỉåüc viãút båíi Witten,Neal v Cleary táûp Communication of ACM (CACM ) Våïi caïc váún âãư nãu trãn v dỉûa vo ti liãûu [3], âäư ạn ny em âi sáu nghiãn cỉïu vãư phỉång phạp m họa Säú hc Âỉa cạc mä hỗnh khaùc vaỡ kóỳt quaớ thổỷc tóỳ cuớa tổỡng mọ hỗnh õóứ ngổồỡi õoỹc lổỷa choỹn Chi tióỳt cuớa caùc vỏỳn õóử seợ õổồỹc trỗnh baỡy caùc chổồng tiãúp theo ca âäư ạn CHỈÅNG II KHOA CNTT - ÂTVT 95T Nguùn Máûu Nghéa – Låïp K thût nẹn säú liãûu m hoạ Säú hc Trang TÄ Ø N G QUAN Và Ư NẸ N SÄ Ú LIà U IGIẽI THIU Neùn sọỳ lióỷu laỡ quaù trỗnh lm gim säú liãûu cáưn thiãút m váùn biãøu diãùn cng mäüt lỉåüng thäng tin trỉåïc ÅÍí âáy hai khại niãûm säú liãûu v thäng tin l khạc nhau, åí âáy säú liãûu l cại dng âãø truưn ti thäng tin Dỉỵ liãûu sau nẹn phi âỉåüc khäi phủc lải giäúng hon ton våïi lục âáưu Cå såí ca nẹn säú liãûu l dỉûa vo cạc âàûc trỉng sau: −Tênh hỉỵu hản ca táûp k hiãûu −Táưn säú xút hiãûn tỉång âäúi ca cạc k hiãûu −Ngỉỵ cnh xút hiãûn ca cạc k hiãûu Vê dủ 1: Âãø hiãøu r tạc dủng ca nẹn ta xẹt vê dủ sau: gi sỉí mäüt âoản vàn cọ 50 chỉỵ a, 30 chỉỵ b, 20 chỉỵ c, våïi mäùi kờ tổỷ laỡ bit thỗ ta tọỳn tọứng cọỹng laỡ 100 bit Khi õoù thay vỗ lổu 50 chổợ a, 30 chỉỵ b, 20 chỉỵ c ta chè lỉu 50a, 30b, 20c âoï ta chè täún bit âãø lỉu trỉỵ táút c chụng, váûy ta tiãút kiãûm âỉåüc 91 bit .IIPHÁN LOẢI CẠC K THÛT NẸN Dỉûa vo ngun tàõc nẹn ta cọ thãø chia cạc k thût nẹn thnh hai nhọm chênh l nẹn täøn hao v nẹn khäng täøn hao .II.1.Nẹn täøn hao Nẹn täøn hao l k thût nẹn cháúp nháûn máút mạt mäüt lỉåüng thäng tin nháút âënh âãø âảt âỉåüc hiãûu qu nẹn cao, nẹn täøn hao thêch håüp våïi cạc tỏỷp tin hỗnh aớnh, ỏm õaợ õổồỹc sọỳ hoaù Theo bn cháút viãûc biãøu diãùn thäng tin tỉång tỉû dỉåïi dảng säú tỉì âáưu â hm KHOA CNTT - ÂTVT 95T Nguùn Máûu Nghéa – Låïp K thût nẹn säú liãûu m hoạ Säú hc Trang chỉïa cạc sai säú Háưu hãút cạc k thût nẹn täøn hao âãưu cọ thãø âỉåüc âiãưu chènh âãø cán bàịng giỉỵa âäü chênh xạc v hiãûu qu nẹn Âäúi våïi cạc thäng tin bë máút mạt khäng phi l váún õóử quan troỹng bồới vỗ noù coù thóứ õổồỹc khọi phủc lải Do âọ åí âáy chụng ta chè quan tám âãún hiãûu qu nẹn m thäi Nẹn täøn hao thỉåìng âỉåüc thỉûc hiãûn qua hai bỉåïc : −Bỉåïc 1: Thỉûc hiãûn xỉí l säú liãûu trãn ton bäü ngưn säú liãûu, bao gäưm viãûc biãún âäøi säú liãûu tỉì miãưn thåìi gian sang miãưn táưn säú Sau âọ tiãún hnh “lm trån” säú liãûu bàịng cạch lm trn, viãûc máút mạt säú liãûu xy åí giai âoản lm trn ny −Bỉåïc 2: Tiãún hnh nẹn säú liãûu â âỉåüc biãún âäøi v lm trån bàịng cạc phỉång phạp nẹn khäng täøn hao quen thüc Vê dủ 2: Nãúu ta dng k thût nẹn täøn hao âãø nẹn cáu vàn “Trỉåìng Âải Hc K Thût  Nàơng” v nãúu sau gii nẹn ta thu âỉåüc “Trỉåìn aỷi Hoỹ Kyợ Thuỏỷt aỡ Nụn thỗ õióửu naỡy laỡ khäng thãø cháúp nháûn âỉåüc Do âọ ta khäng thãø ạp dủng k thût nẹn täøn hao âãø nẹn vàn bn .II.2.Nẹn khäng täøn hao Nẹn khäng täøn hao l phỉång phạp nẹn âm bo khäng máút mạt thäng tin sau quaù trỗnh maợ hoaù vaỡ giaới maợ Sau neùn vaỡ giaới neùn thỗ noù phaới taỷo mọỹt bn chênh xạc so våïi lục âáưu K thût ny sỉí dủng âãø lỉu trỉỵ v truưn cạc cå såí dỉỵ liãûu, cạc bng âiãûn tỉí, cạc vàn baớn vỗ vồùi caùc tỏỷp tin naỡy thỗ vióỷc mỏỳt mạt d chè mäüt bit thäng tin cng l âiãưu khäng thãø cháúp nháûn âỉåüc Vê dủ, ta dng k thût nẹn khäng täøn hao âãø nẹn cáu vàn “Trỉåìng Âải Hc K Thût  Nàơng” sau nẹn v gii nẹn ta phi thu âỉåüc “Trỉåìng Âải Hc K Thût  Nàơng” KHOA CNTT - ÂTVT 95T Nguùn Máûu Nghéa – Låïp K thût nẹn säú liãûu m hoạ Säú hoüc Trang IIICAÏC KHAÏI NIÃÛM LIÃN QUAN ÂÃÚN NẸN SÄÚ LIÃÛU III.1.Sỉû phán bäú ca kê tỉû Trong chuọựi kờ tổỷ xuỏỳt hióỷn thỗ vaỡi kờ tổỷ õổồỹc xuỏỳt hióỷn nhióửu lỏửn coỡn vaỡi kờ tổỷ thỗ xuỏỷt hióỷn ờt hồn Do õoù maợ hoaù thỗ caùc kê tỉû xút hiãûn nhiãưu ta s m hoạ bàịng tỉì m ngàõn cn kê tỉû xút hiãûn êt ta s m hoạ bàịng cạc tỉì m di hån .III.2.Sỉû lỷp laỷi cuớa nhổợng kờ tổỷ Khi xuỏỳt hióỷn thỗ cọ kê tỉû thỉåìng âỉåüc làûp âi làûp lải nhiãưu láưn Cọ kê tỉû lải ráút êt xút hiãûn váûy m hoạ ta cọ thãø m hoạ cä âäüng hån bàịng cạch chè lỉu cạc thüc kê tỉû nhỉ: säú láưn làûp lải ca kê tỉû, säú kê tỉû â xút hiãûn .III.3.Âäü dỉ thỉìa vë trê Nãúu nhỉỵng kê tỉû no âọ xút hiãûn åí mäüt vë trê m ta cọ thãø âoạn trỉåïc âỉåüc thỗ maợ hoaù ta coù thóứ seợ giổợ trờ maỡ kờ tổỷ õoù xuỏỳt hióỷn thay vỗ lổu trỉỵ cạc kê tỉû âọ .III.4.Âån vë âo thäng tin (Entropy) vaỡ õọỹ daỡi trung bỗnh cuớa tổỡ maợ Âån vë âo thäng tin (Entropy): lyï thuyãút thäng tin sỉí dủng thût ngỉỵ entropy l âån vë âo thäng tin âỉåüc m hoạ mäüt thäng âiãûp Entropy ca mọỹt thọng õióỷp caỡng cao thỗ thọng tin noù chổùa âỉûng cng nhiãưu Gi sỉí ràịng p l xạc sút xuỏỳt hióỷn cuớa kờ hióỷu thỗ entropy cuớa noù seợ l -log2p bit Entropy ca ton bäü thäng âiãûp l täøng entropy ca cạc kê hiãûu thnh pháưn Nhỉ váûy thỗ entropy seợ phuỷ thuọỹc vaỡo xaùc suỏỳt xuỏỳt hióỷn ca kê hiãûu Mäüt kê hiãûu cọ xạc sút xút hióỷn cao thỗ thọng tin chổùa õổỷng noù thỏỳp v cáưn êt bit hån âãø m hoạ  Âäü daỡi trung bỗnh cuớa tổỡ maợ: õọỹ daỡi trung bỗnh cuớa tổỡ maợ laỡ giaù trở trung bỗnh cuớa tỏỳt c cạc tỉì m mäüt bäü m Âäü di trung bỗnh cuớa tổỡ maợ khọng thóứ naỡo nhoớ hồn entropy ca ngưn säú liãûu KHOA CNTT - ÂTVT 95T Nguùn Máûu Nghéa – Låïp K thût nẹn säú liãûu m hoạ Säú hc Trang 10 âỉåüc m hoạ v âọ mäüt bäü m täúi ỉu l bäü m coù õọỹ daỡi trung bỗnh cuớa tổỡ maợ gỏửn vồùi entropy ca ngưn säú liãûu .III.5.T säú nẹn T säú nẹn l mäüt âải lỉåüng dng âãø âạnh giạ hiãûu qu ca mäüt phỉång phạp nẹn no âọ T säú nẹn l mäüt âải lỉåüng toạn hc ta cọ thãø bàịng cäng thỉïc Ngy täưn tải quan niãûm trại ngỉåüc vãư cạch t säú nẹn Quan niãûm thỉï nháút t säú nẹn theo cäng thỉïc: CN = N2 x 100 (%) N1 Trong âọ N1 kêch thỉåïc file vo trỉåïc nẹn, N2 l kêch thỉåïc ca file sau nẹn Âäúi våïi caùch tờnh naỡy: õóứ õaùnh giaù hióỷu quaớ neùn thỗ ta dỉûa vo CN : + Nãúu CN cng nh thỗ hióỷu quaớ neùn cuớa phổồng phaùp neùn õoù caỡng cao + Nóỳu CN caỡng lồùn thỗ hióỷu quaớ neùn ca phỉång phạp nẹn âọ cng tháúp Quan niãûm thỉï hai t säú nẹn theo cäng thỉïc:  N  CN = 1−  x 100 (%)  N1 ọỳi vồùi caùch tờnh naỡy thỗ CN cng låïn tỉïc l phỉång phạp nẹn âọ cọ hiãûu qu nẹn cao v ngỉåüc lải tỉïc l CN caỡng nhoớ thỗ hióỷu quaớ neùn caỡng thỏỳp Trong nọỹi dung âäư ạn ny em chn cạch theo quan niãûm thỉï nháút âãø t säú nẹn åí chổồng trỗnh .IVCU TRUẽC CUA QUAẽ TRầNH NEẽN S LIU Quaù trỗnh neùn sọỳ lióỷu bao gọửm hai quaù trỗnh laỡ mọ hỗnh hoaù vaỡ maợ hoaù Quaù trỗnh neùn âỉåüc minh hoả bàịng så âäư sau: KHOA CNTT - ÂTVT 95T Nguùn Máûu Nghéa – Låïp K thût nẹn säú liãûu m hoạ Säú hc Trang 66 fprintf(stderr,"So bit cua tan so : %10i\n", F_bits); } if (method >= && model[method].needs_mem) fprintf(stderr,"Gioi han bo nho : %10i Mb\n",mbytes); } static void print_results(int operation, int method) { int bytes_compressed, bytes_uncompressed; if (operation == ENCODE) { bytes_compressed = bitio_bytes_out(); bytes_uncompressed = bitio_bytes_in(); } else { bytes_compressed = bitio_bytes_in(); bytes_uncompressed = bitio_bytes_out(); } fprintf(stderr,"Kich thuoc chua nen:%10u bytes\n", bytes_uncompressed); fprintf(stderr,"Kich thuoc nen:%10u bytes\n", bytes_compressed); if (bytes_uncompressed > 0) fprintf(stderr, "Ty so nen : %10.2f%) \n", (float)bytes_compressed/bytes_uncompressed*100); #ifdef SYSV { struct tms cpu_usage; float cpu_used; times(&cpu_usage); cpu_used = ((float) cpu_usage.tms_utime) / sysconf(_SC_CLK_TCK); fprintf(stderr, "Thoi gian nen : %10.2f giay\n" cpu_used,); } #endif if (model[method].needs_mem) { if (model[method].purge_mem) { fprintf(stderr, "Memory purges : %10d time%s\n", purge_counter, (purge_counter == ? "" : "s") ); } if (peak_memory > total_memory) total_memory = peak_memory; fprintf(stderr, "Peak memory used : %10.1f Kbytes\n", total_memory*1.0/1024); } if (model[method].results != NULL) model[method].results(operation); } void *do_realloc(void *ptr, size_t size) { KHOA CNTT - ÂTVT 95T Nguyãùn Máûu Nghéa – Låïp K thût nẹn säú liãûu m hoạ Säú hc Trang 67 if (((total_memory+size) / MEGABYTE) >= mbytes) return NULL; total_memory += size; return (realloc(ptr, size)); } void *do_malloc(size_t size) { if (((total_memory+size) / MEGABYTE) >= mbytes) return NULL; total_memory += size; return (malloc(size)); } int get_memory(size_t size) { if (((total_memory+size) / MEGABYTE) >= mbytes) return NOMEMLEFT; total_memory += size; return total_memory; } void purge_memory(void) { if (total_memory > peak_memory) peak_memory = total_memory; total_memory = 0; purge_counter++; } I.6.File stats.c #include #include #include #include "arith.h" "stats.h" # define Max_frequency #define MOST_PROB_AT_END ((freq_value) tree; \ int i=symbol; \ KHOA CNTT - ÂTVT 95T Nguùn Máûu Nghéa – Låïp K thût nẹn säú liãûu m Trang 68 { _tree[i] += _inc; i = FORW(i); } while (imax_length); pContext->total += _inc; hoaï Säú hoüc \ \ \ \ #define INCR_SYMBOL_PROB_MPS(pContext, symbol) \ { \ if (symbol == pContext->most_freq_symbol) \ pContext->most_freq_count += _inc; \ else if (_high-_low+_inc > pContext->most_freq_count)\ { pContext->most_freq_symbol = symbol; \ pContext->most_freq_count = _high-_low+_inc; \ pContext->most_freq_pos = _low; \ } \ else if (symbol < pContext->most_freq_symbol) \ pContext->most_freq_pos += _inc; \ } #ifdef MOST_PROB_AT_END # define INCR_SYMBOL_PROB(pContext, symbol, low1, high1, inc1) \ { \ freq_value _low = low1; \ freq_value _high = high1; \ INCR_SYMBOL_PROB_ACTUAL(pContext, symbol, inc1) \ INCR_SYMBOL_PROB_MPS (pContext, symbol) \ } while (0) #else # define INCR_SYMBOL_PROB(pContext, symbol, low1, high1, inc1) \ { INCR_SYMBOL_PROB_ACTUAL(pContext, symbol, inc1)} while (0)\ #endif #define adjust_zero_freq(pContext) { freq_value diff; diff = ZERO_FREQ_PROB(pContext) - pContext->tree[1]; if (diff != 0) INCR_SYMBOL_PROB(pContext, 1, 0, pContext->tree[1], diff); } while (0) #define ZERO_FREQ_PROB(ctx) \ \ \ \ \ ((freq_value)ctx->nSingletons) void init_zero_freq(context *pContext) { if (pContext->type == DYNAMIC) pContext->nSingletons += pContext->incr; else pContext->nSingletons = 0; } context *create_context(int length, int type) { context *pContext; int i; int size = 1; KHOA CNTT - ÂTVT 95T Nguùn Máûu Nghéa – Låïp K thût nẹn säú liãûu m hoạ Säú hc Trang 69 Max_frequency = ((freq_value) 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; } for (i = 0; i < pContext->max_length; i++) pContext->tree[i] = 0; pContext->incr = (freq_value) nSingletons = 0; init_zero_freq(pContext); adjust_zero_freq(pContext); return pContext; int install_symbol(context *pContext, int symbol) { int i; freq_value low, high; symbol+=2; while (symbol >= pContext->max_length) { pContext->tree = (freq_value *) realloc(pContext->tree, pContext->max_length * * sizeof(freq_value)); if (pContext->tree == NULL) { fprintf(stderr, "stats: not enough memory to expand context\n"); return NO_MEMORY; } for (i=pContext->max_length; imax_length; i++) pContext->tree[i] = 0; pContext->tree[pContext->max_length] = pContext->total; pContext->max_length pContext->length) pContext->length = symbol; pContext->nSymbols++; KHOA CNTT - ÂTVT 95T Nguyãùn Máûu Nghéa – Låïp K thût nẹn säú liãûu m hoạ Säú hoüc Trang 70 get_interval(pContext, &low, &high, symbol); INCR_SYMBOL_PROB(pContext, symbol, low, high, pContext->incr); if (pContext->type == DYNAMIC) pContext->nSingletons += pContext->incr; adjust_zero_freq(pContext); while (pContext->total > Max_frequency) halve_context(pContext); return 0; } int encode(context *pContext, int symbol) { freq_value low, high, low_w, high_w; symbol+=2; if ((symbol > 0) && (symbol < pContext->max_length)) { if (pContext->most_freq_symbol == symbol) { low = pContext->most_freq_pos; high = low + pContext->most_freq_count; } else get_interval(pContext, &low, &high, symbol); } else low = high = 0; if (low == high) { if (ZERO_FREQ_PROB(pContext) == 0) { fprintf(stderr, "stats:cannot code zero-probability novel symbol"); abort(); exit(1); } symbol = 1; if (pContext->most_freq_symbol == 1) { low = pContext->most_freq_pos; high = low + pContext->most_freq_count; } else get_interval(pContext, &low, &high, symbol); } #ifdef MOST_PROB_AT_END if (symbol > pContext->most_freq_symbol) { low_w = low - pContext->most_freq_count; high_w = high - pContext->most_freq_count; } else if (symbol == pContext->most_freq_symbol) { low_w = pContext->total - pContext->most_freq_count; high_w = pContext->total; KHOA CNTT - ÂTVT 95T Nguùn Máûu Nghéa – Låïp K thût nẹn säú liãûu m hoạ Säú hc Trang 71 } else { low_w = low; high_w = high; } #else low_w = low; high_w = high; #endif arithmetic_encode(low_w, high_w, pContext->total); if (symbol != 1) { if (pContext->type == DYNAMIC && high-low == pContext->incr) pContext->nSingletons -= pContext->incr; INCR_SYMBOL_PROB(pContext, symbol, low, high, pContext->incr); } adjust_zero_freq(pContext); while (pContext->total > Max_frequency) halve_context(pContext); if (symbol == 1) return NOT_KNOWN; return 0; } int decode(context *pContext) { int symbol; freq_value low, high, mid, target; freq_value total = pContext->total; target = arithmetic_decode_target(total); #ifdef MOST_PROB_AT_END if (target >= total - pContext->most_freq_count) {arithmetic_decode(total - pContext->most_freq_count, total); symbol = pContext->most_freq_symbol; low = pContext->most_freq_pos; high = low + pContext->most_freq_count; } else { if (target >= pContext->most_freq_pos) target += pContext->most_freq_count; #endif symbol = 0; low = 0; mid = pContext->max_length >> 1; { freq_value *tree_pointer = &(pContext->tree[symbol]); while (mid > 0) { if (tree_pointer[mid] + low >= 1; } symbol = tree_pointer - pContext->tree; } symbol++; if (symbol & 1) high = low + pContext->tree[symbol]; else { int parent, sym_1; freq_value *tree = pContext->tree; parent = BACK(symbol); high = low; sym_1 = symbol - 1; { high -= tree[sym_1]; sym_1 = BACK(sym_1); } while (sym_1 != g3parent); high += tree[symbol]; } #ifdef MOST_PROB_AT_END if (low >= pContext->most_freq_pos) arithmetic_decode(low - pContext->most_freq_count, high - pContext->most_freq_count, total); else #endif arithmetic_decode(low, high, total); #ifdef MOST_PROB_AT_END } #endif } if (symbol != 1) { if (pContext->type == DYNAMIC && high-low == pContext->incr) pContext->nSingletons -= pContext->incr; INCR_SYMBOL_PROB(pContext, symbol, low, high, pContext->incr); } adjust_zero_freq(pContext); while (pContext->total > Max_frequency) halve_context(pContext); if (symbol == 1) return NOT_KNOWN; return symbol-2; static void get_interval(context *pContext, freq_value freq_value *pHigh, int symbol) { freq_value low, high, shared, parent; freq_value *tree = pContext->tree; high = tree[symbol]; parent = BACK(symbol); symbol ; low = 0; KHOA CNTT - ÂTVT 95T *pLow, Nguyãùn Máûu Nghéa – Låïp K thût nẹn säú liãûu m hoaï Säú hoüc Trang 73 while (symbol != parent) { low += tree[symbol]; symbol = BACK(symbol); } shared = 0; while (symbol > 0) { shared += tree[symbol]; symbol = BACK(symbol); } *pLow = shared+low; *pHigh = shared+high; } static void halve_context(context *pContext) { int i, zero_count, temp; freq_value old_values[MAX_F_BITS], new_values[MAX_F_BITS]; freq_value sum_old, sum_new; freq_value *tree = pContext->tree; freq_value incr; pContext->incr = (pContext->incr + MIN_INCR) >> 1; if (pContext->incr < MIN_INCR) pContext->incr = MIN_INCR; pContext->nSingletons = incr = pContext->incr; for (i = 1; i < pContext->max_length; i++) { zero_count = 0; for (temp = i; !(temp&1); temp >>= 1) zero_count++; old_values[zero_count] = tree[i]; sum_old = 0; sum_new = 0; for (temp = zero_count-1; temp >=0; temp ) { sum_old += old_values[temp]; sum_new += new_values[temp]; } tree[i] -= sum_old; pContext->total -= (tree[i]>>1); tree[i] -= (tree[i]>>1); if (tree[i] == incr && i != 1) pContext->nSingletons += incr; tree[i] += sum_new; new_values[zero_count] = tree[i]; } if (pContext->type == STATIC) pContext->nSingletons = 0; if (pContext->most_freq_symbol!=-1) { freq_value low, high; get_interval(pContext,&low,&high,pContext-most_freq_symbol); pContext->most_freq_count = high-low; pContext->most_freq_pos = low; KHOA CNTT - ÂTVT 95T Nguyãùn Máûu Nghéa – Låïp K thût nẹn säú liãûu m hoạ Säú hoüc Trang 74 } adjust_zero_freq(pContext); } void purge_context(context *pContext) { int i; free(pContext->tree); if ((pContext->tree = (freq_value *) malloc((pContext->initial_size + 1)*sizeof(freq_value)))== NULL) { fprintf(stderr, "stats: not enough memory to create context\n"); exit(1); } pContext->length = 1; pContext->total = 0; pContext->nSymbols = 1; pContext->most_freq_symbol = -1; pContext->most_freq_count = 0; pContext->most_freq_pos = 0; pContext->max_length = pContext->initial_size; for (i = 0; i < pContext->initial_size; i++) pContext->tree[i] = 0; pContext->incr = (freq_value) nSingletons = 0; init_zero_freq(pContext); adjust_zero_freq(pContext); } binary_context *create_binary_context(void) { binary_context *pContext; Max_frequency = ((freq_value) incr = (freq_value) c0 = pContext->incr; pContext->c1 = pContext->incr; return pContext; } int binary_encode(binary_context *pContext, int bit) { binary_arithmetic_encode(pContext->c0, pContext->c1, bit); if (bit == 0) pContext->c0 += pContext->incr; else pContext->c1 += pContext->incr; if (pContext->c0 + pContext->c1 > Max_frequency) { pContext->c0 = (pContext->c0 + 1) >> 1; KHOA CNTT - ÂTVT 95T Nguùn Máûu Nghéa – Låïp K thût nẹn säú liãûu m hoạ Säú hc Trang 75 pContext->c1 = (pContext->c1 + 1) >> 1; pContext->incr = (pContext->incr + MIN_INCR) >> 1; } return 0; } int binary_decode(binary_context *pContext) { int bit; bit = binary_arithmetic_decode(pContext->c0, pContext->c1); if (bit == 0) pContext->c0 += pContext->incr; else pContext->c1 += pContext->incr; if (pContext->c0 + pContext->c1 > Max_frequency) { pContext->c0 = (pContext->c0 + 1) >> 1; pContext->c1 = (pContext->c1 + 1) >> 1; pContext->incr = (pContext->incr + MIN_INCR) >> 1; } return bit; } I.7.File word.c #include #include #include #include #include #include #include #include #define #define #define #define #define #define "bitio.h" "arith.h" "stats.h" "main.h" "hashtable.h" WORD NON_WORD INIT_CONTEXT 1023 CHAR_CONTEXT 256 BUFFER_SIZE 512 END_OF_MESSAGE #define ISWORD(c)(((c >='A')&&(c = 'a')&&(c = '0') && (c length] = buffer[*curr_pos]; pWord->length += 1; *curr_pos += 1; *buffer_length -= 1; } } } IICAÏC FILE TIÃU ÂÃÖ (*.H) II.1.File arith.h #ifndef CODER_H #define CODER_H #ifndef B_BITS #define B_BITS #endif 32 #ifndef F_BITS #define F_BITS #endif 27 typedef unsigned long code_value; typedef unsigned long freq_value; typedef unsigned long div_value; #define MAX_BITS_OUTSTANDING ((unsigned long)1

Ngày đăng: 02/11/2012, 14:35

Hình ảnh liên quan

Bảng 1: Xác suất xuất hiện của các kí hiệu -  Kỹ thuật nén số liệu mã hóa Số học

Bảng 1.

Xác suất xuất hiện của các kí hiệu Xem tại trang 14 của tài liệu.
Bảng 2: Bảng liệt kê các từ mã của các kí hiệu sau khi mã hóa -  Kỹ thuật nén số liệu mã hóa Số học

Bảng 2.

Bảng liệt kê các từ mã của các kí hiệu sau khi mã hóa Xem tại trang 16 của tài liệu.
Bảng 3: Bảng xác suất của các kí hiệu -  Kỹ thuật nén số liệu mã hóa Số học

Bảng 3.

Bảng xác suất của các kí hiệu Xem tại trang 17 của tài liệu.
Hình 4: Thuật toán mã hóa Số học -  Kỹ thuật nén số liệu mã hóa Số học

Hình 4.

Thuật toán mã hóa Số học Xem tại trang 22 của tài liệu.
Hình 7: Thuật toán chuẩn hóa lại của bộ giải mã Số học -  Kỹ thuật nén số liệu mã hóa Số học

Hình 7.

Thuật toán chuẩn hóa lại của bộ giải mã Số học Xem tại trang 27 của tài liệu.
Bảng 4: Ví dụ về cấu trúc cây ngầm định -  Kỹ thuật nén số liệu mã hóa Số học

Bảng 4.

Ví dụ về cấu trúc cây ngầm định Xem tại trang 30 của tài liệu.
Thu ût toán dung ch om hình tb ûc kh ng đ ü cm ta nh hình âô ươ ôí ưở d ïi. Du ng ha m     getươìì_ word() đ  đọc va o danh sách ca  các t  -  Kỹ thuật nén số liệu mã hóa Số học

hu.

ût toán dung ch om hình tb ûc kh ng đ ü cm ta nh hình âô ươ ôí ưở d ïi. Du ng ha m getươìì_ word() đ đọc va o danh sách ca các t Xem tại trang 33 của tài liệu.
.I.3.Mô hình kí tự. -  Kỹ thuật nén số liệu mã hóa Số học

3..

Mô hình kí tự Xem tại trang 35 của tài liệu.
Hình 10: Thuật toán mã hóa file dùng mô hình kí tự bậckhông -  Kỹ thuật nén số liệu mã hóa Số học

Hình 10.

Thuật toán mã hóa file dùng mô hình kí tự bậckhông Xem tại trang 36 của tài liệu.
dụng bi uđ hình c üt. V ïi trục đ ïng b iu thị t ys nén íố tính bằng %) đạt đ üc cu a các m  hình, trục nă m ngang bi u thị đ ü l ïn cu a cácươíôòểô ơí file (đơn vị là MB) thí nghi ûm.ê -  Kỹ thuật nén số liệu mã hóa Số học

d.

ụng bi uđ hình c üt. V ïi trục đ ïng b iu thị t ys nén íố tính bằng %) đạt đ üc cu a các m hình, trục nă m ngang bi u thị đ ü l ïn cu a cácươíôòểô ơí file (đơn vị là MB) thí nghi ûm.ê Xem tại trang 42 của tài liệu.
Hình 14: So sánh thời gian giải nén giữa mô hình từ, kí tự với giải nén bằng gunzip -  Kỹ thuật nén số liệu mã hóa Số học

Hình 14.

So sánh thời gian giải nén giữa mô hình từ, kí tự với giải nén bằng gunzip Xem tại trang 44 của tài liệu.
Hình 16: So sánh thời gian giải nén giữa mô hình từ, kí tự với giải nén bằng gunzip -  Kỹ thuật nén số liệu mã hóa Số học

Hình 16.

So sánh thời gian giải nén giữa mô hình từ, kí tự với giải nén bằng gunzip Xem tại trang 45 của tài liệu.

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan