»ùÓÚmatlab¹¹Ôì×îÓŶþ²æÊ÷ ÁªÏµ¿Í·þ

·¢²¼Ê±¼ä : ÐÇÆÚÈý ÎÄÕ»ùÓÚmatlab¹¹Ôì×îÓŶþ²æÊ÷¸üÐÂÍê±Ï¿ªÊ¼ÔĶÁ0f0c7bc1d5bbfd0a795673c8

xxxx20xx½ì±¾¿ÆÉú±ÏÒµÉè¼Æ£¨ÂÛÎÄ£©

ͼ4-4 ×îÓŶþ²æÊ÷·ÂÕæͼ£¨4£©

17

xxxx20xx½ì±¾¿ÆÉú±ÏÒµÉè¼Æ£¨ÂÛÎÄ£©

ͼ4-5 ×îÓŶþ²æÊ÷×îÖÕÉú³Éͼ

4.3 ÓÃMatlab¹¹Ôì×îÓŶþ²æÊ÷Ëã·¨

ÔÚMATLABÖÐʵÏÖ¹þ·òÂüËã·¨£¬¿ÉÓÃÒ»¸ö5?(2n?1)µÄ¾ØÕóÀ´±íʾ¹þ·òÂüÊ÷£¬¸Ã¾ØÕóµÄº¬ÒåÈç±í6-3-3Ëùʾ¡£

18

xxxx20xx½ì±¾¿ÆÉú±ÏÒµÉè¼Æ£¨ÂÛÎÄ£©

±í4-1 ×îÓŶþ²æÊ÷Ëã·¨½á¹¹±í

×Ö·û 1 ÐòºÅ ¸ÅÂÊ ¸¸½áµã ÐòºÅ 2 3 4 5 ¡­¡­¡­ 2n-1 ×óÓÒ×Ó0±íʾ1±íʾÊ÷±êÖ¾ ×ó×ÓÊ÷ ÓÒ×ÓÊ÷ ÊÇ·ñÔÚ1ÔÚ¼¯0²»ÔÚ¼¯ºÏF ºÏF

¼¯ºÏF ÏÂÃæ¸ø³ö¹þ·òÂüÊ÷µÄÉú³ÉËã·¨£º function htree = HuffmanTree(pro) %¹¹Ôì¹þ·òÂüÊ÷ %proΪһ¸ÅÂÊÏòÁ¿

n=size(pro,2);%µÃµ½×Ö·û¸öÊý tree=ones(6,2*n-1);%¹¹ÔìÊ÷Êý¾Ý½á¹¹ tree(1,:)=1:(2*n-1);%Ìî³ä½áµãÐòºÅ tree(5,(n+1):end)=0;%ÉèÖýáµãÊÇ·ñÔÚ¼¯ºÏ tree(2,1:n)=pro;%ÉèÖøÅÂÊ

tree(6,1:end)=0;%¼Ç¼²éÕҵĽáµã¶Ô˳Ðò for i=(n+1):(2*n-1);%Ñ­»·¿ØÖÆ

[l,r]=findminval(tree);%ÕÒµ½¼¯ºÏÖÐÁ½¸ö×îСµÄÖµµÄÐòºÅ tree(2,i)=tree(2,l)+tree(2,r);%µÃµ½¸¸½áµã¸ÅÂÊÖµ tree(5,i)=1;%ÉèÖÃй¹Ôì½áµãÔÚ¼¯ºÏÖÐ

19

xxxx20xx½ì±¾¿ÆÉú±ÏÒµÉè¼Æ£¨ÂÛÎÄ£©

tree(3,l)=i;tree(3,r)=i;%ÉèÖø¸½áµãÐòºÅ tree(4,l)=0;tree(4,r)=1;%ÉèÖÃ×óÓÒ±êÖ¾ tree(5,l)=0;tree(5,r)=0;%ÉèÖò»ÔÚ¼¯ºÏÖÐ

tree(6,l)=i-n;tree(6,r)=i-n;%¼Ç¼¸Ã´Îɾ³ýµÄ½áµã¶Ô˳Ðò end

htree=tree;

function [l,r]=findminval(tree) s=find(tree(5,:)==1); if size(s,2)<2

error('Error input!'); end

firval=realmax;secval=realmax; for i=s;

if firval>tree(2,i) if secval>firval

second=first;secval=firval; end

first=i;firval=tree(2,i); elseif secval>tree(2,i)

second=i;secval=tree(2,i); end

20