clc
clear
format short g
keyword = input('INPUT KEYWORD : \n','s');
tic;
fprintf('\n %s \n\n\n',keyword);
symbols = sort(unique(keyword))
probabilities_calculation = zeros(size(symbols))';
for i = 1:length(symbols)
probabilities_calculation(i,1) = sum(keyword== symbols(i))/length(keyword);
probabilities_calculation(i,2) = symbols(i);
probabilities_calculation(i,3) = sum(keyword== symbols(i));
end
rank = sortrows(probabilities_calculation);
new_rank = zeros(size(rank));
for i = 1:length(symbols)
fprintf('\n %f || %s\n',rank(length(symbols) - i+1,1),char(rank(length(symbols) - i+1,2)));
new_rank(i,:) = rank(length(symbols) - i+1,:);
end
new1 = sort(unique(new_rank(:,1)),'descend');
iterasi = 1;
for i=1:length(new1)
for j = 1:length(symbols)
if new1(i) == new_rank(length(symbols) - j+1,1)
data_baru(iterasi,1) = pembulatan(new_rank(length(symbols)-j+1,1));
data_baru(iterasi,2) = new_rank(length(symbols)-j+1,2);
data_baru(iterasi,3) = new_rank(length(symbols)-j+1,3);
iterasi = iterasi +1;
end;
end;
end;
p = data_baru(:,1)';
sta=[];
ar=[];
coded=[];
other=[];
first=0;
final=length(p);
sta=[first final]
for f=1:length(p)
other=[];
ar=[];
for h=1:(length(sta)-1)
first=sta(h)+1
final=sta(h+1)
if(first>=final)
other=[other; 2];
continue;
end
asum=0;
difmat=[]
for i=first:final
asum=asum+p(i);
resum=0;
for j=i+1:final;
resum=resum+p(j);
end
dif=abs(asum-resum);
difmat=[difmat dif]
end
small=min(difmat);
k=1;
for i=first:final
if(small==difmat(k))
break;
end
k=k+1;
end
index=i
ar=[ar index]
ind=(index+1)-first
remind=final-index
other=[other; zeros(ind,1); ones(remind,1)]
end
sta=[ar sta]
sta=sort(sta)
coded=[coded other]
if(length(sta)>length(p))
break;
end
end
len=[];
for i=1:length(p)
word=[];
for(j=1:f)
if(coded(i,j)==2)
break;
end
word=[word coded(i,j)];
end
len=[len length(word)];
fprintf('\nSymbol %d code ==> ',i);
disp(word)
code_final{i} = concat_array(word);
fi_final(i) = data_baru(i,1);
char_final(i) = data_baru(i,2);
freq_final{i} = strcat(': ',num2str(data_baru(i,3)),'/',num2str(sum(data_baru(:,3))));
li_final(i) = size(word,2);
si_final{i} = char(data_baru(i,2));
end
for i=1:length(p)
expansi_binner_final{i} = expansi_binner(code_final{i},code_final);
end;
cum_pi_final(1)=0.000;
for j=2:length(si_final);
cum_pi_final(j)=cum_pi_final(j-1)+fi_final(j-1);
end
clc;
fprintf('\nKEYWORD = %s',keyword);
fprintf('\nKEYWORD LENGTH = %i ',length(char(keyword)));
fprintf('\nUNIQUE = %s ',symbols);
fprintf('\nUNIQUE LENGTH = %i \n\n',length(char(symbols)));
DataHead = {'Si', 'Pi','Li','kode'};
fprintf(1, ' \t %s\t\t\t\t %s\t\t\t %s\t\t \t%s\n', DataHead{:})
for i=1:length(si_final)
fprintf(1, '\t%s %s \t\t %.3f\t\t %d\t\t\t %s\n', si_final{i},freq_final{i},fi_final(i),li_final(i),code_final{i})
end;
ent=0;
avginfo=0;
for i=1:length(p)
ent=ent+(p(i)*log2(1/p(i)));
avginfo=avginfo+len(i)*p(i);
end
eff=(ent/avginfo)*100;
fprintf('\nENTROPY = %.3f',ent);
fprintf('\nAVERAGE CODEWORD LEGHT = %.3f',avginfo);
fprintf('\nCODING EFFICIENCY = %.3f%s \n',eff,'%');
disp(['Duration = ',num2str(toc),' second'])
Best Answer