⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 generadordealfabeto.asv

📁 code to compress data usin huffman algorithm
💻 ASV
字号:

s=sum(prob(:));%Suma probabilidades
s=roundn(s,-4);
lp=length(prob);
if (s==1);
         entropia=prob.*log2(prob);%Calculo de la Entropia   
         entropia=-sum(entropia(:));%Calculo de la Entropia
         pos=1:lp;
         [prs idx]=sort(prob,'descend');%Se ordenan la probabilidades de mayor a menor
         npos=pos(idx);%Se crea la variable "npos" con las posiciones con el orden anterior
         idx=find(prs==min(prs(:)));%Se buscan las probabilidades mas peque馻s
         tp=npos(idx);
         tp=sort(tp,'descend');
         npos(idx)=tp;
         CodigoGenerado(1:lp)={''};%Variable donde se almacenan las palabras codigo
         ps=npos;
         np=lp;
         cb=zeros([lp-1 3]);%Matriz que tiene el objetivo de lamacenar la historia del calculo de probabilidades
         cnt=lp+1;
         prb=prs;
         for i=1:lp-1;
              fst=ps(np-1);%Se toma la penultima posicion del vector posiciones
              sec=ps(np);%Se toma al ultima posicion del vector de posiciones
                if fst<=lp;%Si se cumple la condicion que fst sea menor que la longitud del vector de probabilidades se concatena un cero
                   CodigoGenerado(fst)=strcat('0',CodigoGenerado(fst));%Concatenacion de un cero la variable codigoGenerado en la posicion que apunta "fst"
                else%Si no cumple la condicion se manda llamar la funcion "encod" que se encarga de decidir en que posicion se concatenara el 0
                  CodigoGenerado=encod(fst,cb,CodigoGenerado,'0',lp);
                end
              
                if sec<=lp%Si se cumple la condicion que fst sea menor que la longuitud del vector de probabilidades se concatena un uno
                    CodigoGenerado(sec)=strcat('1',CodigoGenerado(sec));
                else%Si no cumple la condicion se manda llamar la funcion "encod" que se encarga de decidir en que posicion se concatenara el 0
                   CodigoGenerado=encod(sec,cb,CodigoGenerado,'1',lp);
                end
              cb(i,1)=cnt;%Se almacena el valor de contador que representa el calculo de las probabilidades mas peque馻s en el valor i del for actual
              cb(i,2)=fst;%Se almacena la primer posicion con la que se calculo la nueva probabilidad que representa cnt
              cb(i,3)=sec;%Se almacena la segunda posicion con la que se calculo la nueva probabilidad que representa cnt
              if np>2%En esta zona se reaiza ajusta el nuevo vector
                  ps=ps(1:np-2);%Se redimenciona el vector de posiciones a su longuitud menos las dos probabilidades mas peque馻s
                  ps(np-1)=cnt;%Se almacena el contador de la nueva porbabilidad calculada
                  cnt=cnt+1;
                  prbt=prb(1:np-2);%Se retiran las dos probabilidades mas peque馻s
                  prbt(np-1)=prb(np-1)+prb(np);%Se adiere la nueva probabilidad al vector de probabilidades
                  prb=prbt;%Se copia el nuevo vector de probabilidades
                  [prb idx]=sort(prb,'descend');%Se reoderna las probabilidad de mayor a menor
                  ps=ps(idx);
                  idx=find(prb==prbt(np-1));%Se busca los siguientes valores mas peque駉s
                  tp=ps(idx);
                  tp=sort(tp,'descend');
                  ps(idx)=tp;
                  np=np-1;
              end  
         end
           redundancia=0;
           for i=1:lp;
               redundancia=redundancia+prob(i)*length(cell2mat(CodigoGenerado(i)));%Calculo de la redundancia
           end
           eficiencia=(entropia/redundancia)*100;%Calculo de la eficiencia
end



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -