matlab的哈夫曼树的绘制文档格式.docx
- 文档编号:17009946
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:13
- 大小:17.04KB
matlab的哈夫曼树的绘制文档格式.docx
《matlab的哈夫曼树的绘制文档格式.docx》由会员分享,可在线阅读,更多相关《matlab的哈夫曼树的绘制文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
%LastModifiedbyGUIDEv2.519-Jul-201808:
21:
02
%Begininitializationcode-DONOTEDIT
gui_Singleton=1;
gui_State=struct('
gui_Name'
mfilename,...
'
gui_Singleton'
gui_Singleton,...
gui_OpeningFcn'
@gui_OpeningFcn,...
gui_OutputFcn'
@gui_OutputFcn,...
gui_LayoutFcn'
[],...
gui_Callback'
[]);
ifnargin&
&
ischar(varargin{1})
gui_State.gui_Callback=str2func(varargin{1});
end
ifnargout
[varargout{1:
nargout}]=gui_mainfcn(gui_State,varargin{:
});
else
gui_mainfcn(gui_State,varargin{:
%Endinitializationcode-DONOTEDIT
%---Executesjustbeforeguiismadevisible.
functiongui_OpeningFcn(hObject,eventdata,handles,varargin)
%Thisfunctionhasnooutputargs,seeOutputFcn.
%hObjecthandletofigure
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%varargincommandlineargumentstogui(seeVARARGIN)
%Choosedefaultcommandlineoutputforgui
handles.output=hObject;
%Updatehandlesstructure
guidata(hObject,handles);
%UIWAITmakesguiwaitforuserresponse(seeUIRESUME)
%uiwait(handles.figure1);
%---Outputsfromthisfunctionarereturnedtothecommandline.
functionvarargout=gui_OutputFcn(hObject,eventdata,handles)
%varargoutcellarrayforreturningoutputargs(seeVARARGOUT);
%Getdefaultcommandlineoutputfromhandlesstructure
varargout{1}=handles.output;
functionedit1_Callback(hObject,eventdata,handles)
%hObjecthandletoedit1(seeGCBO)
%Hints:
get(hObject,'
String'
)returnscontentsofedit1astext
%str2double(get(hObject,'
))returnscontentsofedit1asadouble
%---Executesduringobjectcreation,aftersettingallproperties.
functionedit1_CreateFcn(hObject,eventdata,handles)
%handlesempty-handlesnotcreateduntilafterallCreateFcnscalled
%Hint:
editcontrolsusuallyhaveawhitebackgroundonWindows.
%SeeISPCandCOMPUTER.
ifispc&
isequal(get(hObject,'
BackgroundColor'
),get(0,'
defaultUicontrolBackgroundColor'
))
set(hObject,'
white'
);
%---Executesonbuttonpressinpushbutton1.
functionpushbutton1_Callback(hObject,eventdata,handles)
%hObjecthandletopushbutton1(seeGCBO)
functionpushbutton1_CreateFcn(hObject,eventdata,handles)
%---IfEnable=='
on'
executesonmousepressin5pixelborder.
%---Otherwise,executesonmousepressin5pixelborderoroverpushbutton1.
functionpushbutton1_ButtonDownFcn(hObject,eventdata,handles)
%---Executesonbuttonpressinpushbutton2.
functionpushbutton2_Callback(hObject,eventdata,handles)
%hObjecthandletopushbutton2(seeGCBO)
a=get(handles.edit1,'
b=unique(a);
%计算有多少个不重复的字符串
s=length(a);
fori=1:
length(b)
num(i)=length(strfind(a,b(i)));
%统计字符的数目
p(i)=num(i)/s;
disp(p)
[A,k]=sort(p,'
descend'
%按降序排列
T=A;
[~,n]=size(A);
B=zeros(n,n);
fori=1:
n
B(i,1)=T(i);
%生成编码表的第一列
end
r=B(i,1)+B(i-1,1);
%最后两个元素相加
T(n-1)=r;
T(n)=0;
T=sort(T,'
t=n-1;
forj=2:
n%生成编码表的其他各列
t
B(i,j)=T(i);
ift>
1
K=find(T==r);
B(n,j)=K(end);
r=(B(t-1,j)+B(t,j));
T(t-1)=r;
T(t)=0;
t=t-1;
else
B(n,j)=1;
%生成Huffman码字矩阵和排序后元素的码表向量
m=3;
s1=sym('
[2,1]'
s2=s1;
%码表
%从倒数第三列开始建表
fori=n-2:
-1:
1
p=B(n,i+1);
ifp==1
s2(1:
m-2)=s1(2:
m-1);
elseifp==m
m-2)=s1(1:
m-2);
elseifp==2
s2
(1)=s1
(1);
s2(2:
m-2)=s1(3:
p-1)=s1(1:
p-1);
s2(p+1:
m-2)=s1(p+1:
s2(m-1)=[char(s1(p)),'
2'
];
s2(m)=[char(s1(p)),'
1'
m=m+1;
s1=s2;
L=zeros(1,n);
[~,r]=size(char(s2(i)));
L(i)=r;
%将码表转换成0和1输出
arr=zeros(1,n);
arr(1:
n)=s2(1:
n);
str=[];
s=num2str(arr(i));
s=strrep(s,'
0'
ifi==1
str=s;
str=[str,'
s];
str=regexp(str,'
split'
set(handles.text1,'
string'
str);
%建立字符对应的哈夫曼编码cd(i)的编码是cd1(i)
forq=1:
cd(q)=b(k(q));
cd1(i)=str(i);
%对整个序列编码
length(a)
forj=1:
length(cd)
ifstrcmp(a(i),cd(j))
hfcd(i)=cd1(j)
end
set(handles.text3,'
cd'
set(handles.text4,'
hfcd'
functionedit2_Callback(hObject,eventdata,handles)
%hObjecthandletoedit2(seeGCBO)
)returnscontentsofedit2astext
))returnscontentsofedit2asadouble
functionedit2_CreateFcn(hObject,eventdata,handles)
functionaxes1_CreateFcn(hObject,eventdata,handles)
%hObjecthandletoaxes1(seeGCBO)
placecodeinOpeningFcntopopulateaxes1
%---Executesonbuttonpressinpushbutton3.
functionpushbutton3_Callback(hObject,eventdata,handles)
%hObjecthandletopushbutton3(seeGCBO)
clc;
num
%构造HuffTree
%定义HuffTree结构矩阵并初始化HuffTree
n=length(b);
tree(1,1:
2*n-1)=-1;
%初始化左子树序号
tree(2,1:
%初始化右子树序号
tree(3,1:
%初始化根节点序号
tree(4,1:
2*n-1)=0;
%初始化权重
tree(4,i)=num(i);
fori=n+1:
2*n-1
[min1,min2]=selectmin(tree,i-1);
%选择两个权值最小的结点
tree(3,min1)=i;
tree(3,min2)=i;
tree(1,i)=min1;
%权值最小的结点作为左子树
tree(2,i)=min2;
%权值次小的结点作为右子树
tree(4,i)=tree(4,min1)+tree(4,min2);
%合并成新的二叉树
disp('
NumWeightLchildRchildParent'
forp=1:
disp([p,tree(4,p),tree(1,p),tree(2,p),tree(3,p),]);
tree(3,2*n-1)=0;
nodes(i)=tree(3,i);
axis(handles.axes1);
treeplot(nodes);
count=size(nodes,2);
[x,y]=treelayout(nodes);
x=x'
;
y=y'
name1=cellstr(num2str((1:
count)'
));
text(x(:
1),y(:
1),name1,'
VerticalAlignment'
bottom'
HorizontalAlignment'
right'
functionedit3_Callback(hObject,eventdata,handles)
%hObjecthandletoedit3(seeGCBO)
)returnscontentsofedit3astext
))returnscontentsofedit3asadouble
functionedit3_CreateFcn(hObject,eventdata,handles)
%---Executesonbuttonpressinpushbutton4.
functionpushbutton4_Callb
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab 哈夫曼树 绘制