SlideShare una empresa de Scribd logo
Instituto Politécnico Nacional
Introducción a los Sistemas de Comunicación Seguros
Unidad MISTI Culhuacan
Presentado a: Dr. Gualberto Aguilar Torres
Tarea
Sistemas Huffman
9
Por: Yango Alexander Colmenares
Fecha
Octubre de 2013
%% INSTITUTO POLITECNICO NACIONAL-MISTI CULHUACAN --- MEXICO DF 2013
%%Desarrollado por:Yango Colmenares
%Presentado a : Dr. Gualberto Aguilar Torres
%Programación en Matlab
%Codigo Huffman
clc;
clear all;
close all;
% Aqui se lee el archivo .txt
fileID = fopen('pruebaProba.txt');
% Se utiliza el comando fscanf para analizar el contenido del archivo
texto = fscanf(fileID,'%c');
% Se convierte el texto a minusculas
texto = lower(texto);
% En la siguiente variable obtenemos el total de letras del texto aunque
% se repitan, contanto espacios en blanco, simbolos, etc.
totalLetras = length(texto);
% Algoritmo para quitar acentos a vocales
for j=1:length(texto)
if strcmp(texto(j),'á')
texto(j)='a';
elseif strcmp(texto(j),'é')
texto(j)='e';
elseif strcmp(texto(j),'í')
texto(j)='i';
elseif strcmp(texto(j),'ó')
texto(j)='o';
elseif strcmp(texto(j),'ú')
texto(j)='u';
end
end
clear j;
% El comando control de flujo del texto 'ENTER' lo cambiamos por un
espacio
% en blanco
for j=1:length(texto)
if isstrprop(texto(j), 'cntrl')
texto(j)=' ';
end
end
clear j;
% Inicializamos la variable palabras Solas que contendra las palabra del
% texto sin repetirse
letrasSolas(1) = texto(1);
% Algoritmo que nos ayuda a encontrar las palabras sin repetirse del
texto
% para irlas guardando en el vector palabrasSolas
indicador = 0;
for j=1:length(texto)
for i=1:length(letrasSolas)
% Para comparar cadenas: strcmp(cadena1, cadena2);
if strcmp(letrasSolas(i),texto(j))
indicador = 1;
end
end
if indicador ~= 1
letrasSolas(i+1) = texto(j);
end
indicador = 0;
end
clear j i indicador;
% El siguiente algoritmo nos ayuda a contar el numero de palabras que se
% repiten dentro del texto cargado
contadorLetras = zeros(1,length(letrasSolas));
for j=1:length(letrasSolas)
for i=1:length(texto)
if strcmp(letrasSolas(j),texto(i))
contadorLetras(j) = contadorLetras(j) + 1;
end
end
end
clear j i;
% Histograma de las palabras encontradas dentro del texto mostrando la
% frecuencia de ellas
% bar(contadorLetras);
% El siguiente codigo obtiene la probabilidad de cada palabra
probaLetras = zeros(1,length(letrasSolas));
for j=1:length(letrasSolas)
probaLetras(j) = contadorLetras(j)/totalLetras;
end
clear j;
% Hasta aqui se termino de analizar el texto y se puede ahora proseguir
con
% la codificacion Huffman
%% Algoritmo de Huffman
% La variable letrasSolas las pasamos a celdas
for i=1:length(letrasSolas)
letrasSolasCell{i,1} = letrasSolas(i);
probaLetrasCell{i,1} = probaLetras(i);
codigosLetrasCell{i,1} = '';
end
clear i;
% Las siguientes variables nos ayudaran a realizar el algoritmo de
huffman
letrasSolasCellSort = letrasSolasCell;
probaLetrasCellSort = probaLetrasCell;
% Acomodamos las probabilidades de forma descendiente
for j=1:length(probaLetrasCellSort)
for i=1:length(probaLetrasCellSort)-1
if probaLetrasCellSort{i} < probaLetrasCellSort{i+1}
aux = probaLetrasCellSort{i};
aux1 = letrasSolasCellSort{i};
probaLetrasCellSort{i} = probaLetrasCellSort{i+1};
letrasSolasCellSort{i} = letrasSolasCellSort{i+1};
probaLetrasCellSort{i+1} = aux;
letrasSolasCellSort{i+1} = aux1;
end
end
end
clear j i aux aux1;
tope = length(letrasSolasCellSort);
for i=1:length(letrasSolasCellSort)-2
for j=1:tope-1
if j == tope-1
probaLetrasCellSort{j,i+1} =
probaLetrasCellSort{j,i}+probaLetrasCellSort{j+1,i};
sumasHuffman{i,1} = probaLetrasCellSort{j,i+1};
else
probaLetrasCellSort{j,i+1} = probaLetrasCellSort{j,i};
end
end
for k=1:tope-1
for l=1:tope-2
if probaLetrasCellSort{l,i+1} < probaLetrasCellSort{l+1,i+1}
aux = probaLetrasCellSort{l,i+1};
probaLetrasCellSort{l,i+1} =
probaLetrasCellSort{l+1,i+1};
probaLetrasCellSort{l+1,i+1} = aux;
end
end
end
tope = tope-1;
end
clear tope i j k l aux;
probaCopiaSort = probaLetrasCellSort;
tope = length(letrasSolasCellSort);
for i=1:length(letrasSolasCellSort)
indexLetrasSolas{i,1} = i;
end
clear i;
% Esta variable indicara hasta cuando se dejara de borrar las celdas para
una
% mejor busqueda del código
indicador = 0;
indPos = 0;
for j=1:length(letrasSolasCell)
for i=1:length(letrasSolasCell)-2
if j == 1
aux = indexLetrasSolas{j,i};
aux1 = probaLetrasCellSort{aux,i};
if (aux == tope) || (aux == tope-1)
for k=tope-1:-1:1
if sumasHuffman{i} == probaLetrasCellSort{k,i+1}
indexLetrasSolas{j,i+1} = k;
indicador = indicador + 1;
break;
end
end
else
for k=aux:tope-1
if indicador == 0
if aux1 == probaLetrasCellSort{k,i+1}
indexLetrasSolas{j,i+1} = k;
probaLetrasCellSort{aux,i} = 0;
break;
end
else
if aux1 == probaLetrasCellSort{k,i+1}
indexLetrasSolas{j,i+1} = k;
break;
end
end
end
end
tope = tope-1;
else
aux = indexLetrasSolas{j,i};
aux1 = probaLetrasCellSort{aux,i};
if (aux == tope) || (aux == tope-1)
for k=tope-1:-1:1
if sumasHuffman{i} == probaLetrasCellSort{k,i+1}
indexLetrasSolas{j,i+1} = k;
indicador = indicador + 1;
break;
end
end
else
for k=aux:tope-1
if indicador == 0
if aux1 == probaLetrasCellSort{k,i+1}
if k == indexLetrasSolas{j-1,i+1}
indexLetrasSolas{j,i+1} = k+1;
probaLetrasCellSort{aux,i} = 0;
break;
else
indexLetrasSolas{j,i+1} = k;
probaLetrasCellSort{aux,i} = 0;
break;
end
end
else
if aux1 == probaLetrasCellSort{k,i+1}
indexLetrasSolas{j,i+1} = k;
break;
end
end
end
end
tope = tope-1;
end
end
indicador = 0;
tope = length(letrasSolasCellSort);
end
tope = length(letrasSolasCellSort);
for j=1:length(letrasSolasCell)
for i=1:length(letrasSolasCell)-1
if indexLetrasSolas{j,i} == tope
codigosLetrasCell{j} = strcat(codigosLetrasCell{j},'1');
elseif indexLetrasSolas{j,i} == tope-1
codigosLetrasCell{j} = strcat(codigosLetrasCell{j},'0');
end
tope = tope - 1;
end
tope = length(letrasSolasCellSort);
end
% Creamos una tabla que servira de muestra para visualizar las
% codificaciones
for i=1:length(letrasSolasCell)
tabla{i,1} = letrasSolasCellSort{i,1};
end
for i=1:length(letrasSolasCell)
tabla{i,2} = probaCopiaSort{i,1};
end
for i=1:length(letrasSolasCell)
tabla{i,3} = codigosLetrasCell{i,1};
end
% Analisis del codigo y verificacion del sistema Huffman
% Crea la variable codificacion que contendra todo el texto codificado
for j=1:length(letrasSolasCellSort)
if strcmp(texto(1),letrasSolasCellSort{j})
codificacion = codigosLetrasCell{j};
end
end
% Codificar el texto analizado
for i=2:length(texto)
for j=1:length(letrasSolasCellSort)
if strcmp(texto(i),letrasSolasCellSort{j})
codificacion = strcat(codificacion,codigosLetrasCell{j});
end
end
end
% Copiamos la codificacion tal y como nos la entrega el algoritmo
anterior
% como copia segura
codificacion1 = codificacion;
% El siguiente algoritmo agrega '0's a la derecha para despues poderlo
% organizar en grupos de 8 tipo modulos
if mod(length(codificacion),8) ~= 0
for j=length(codificacion):length(codificacion)+7-
mod(length(codificacion),8)
codificacion(j+1) = '0';
end
end
% % Agrupar codificacion en grupos de 8 bits
i=1;
for j=1:floor(length(codificacion)/8)
grupos8Bits{j} = codificacion(i:i+7);
i=i+8;
end
% % Agrupar codificacion en grupos de 4 bits
i=1;
for j=1:floor(length(codificacion)/4)
grupos4Bits{j} = codificacion(i:i+3);
i=i+4;
end
% % Algoritmo que pasa la codificacion a Hexadecimal
if strcmp(grupos4Bits{1},'0000')
codificacionHex = '0';
elseif strcmp(grupos4Bits{1},'0001')
codificacionHex = '1';
elseif strcmp(grupos4Bits{1},'0010')
codificacionHex = '2';
elseif strcmp(grupos4Bits{1},'0011')
codificacionHex = '3';
elseif strcmp(grupos4Bits{1},'0100')
codificacionHex = '4';
elseif strcmp(grupos4Bits{1},'0101')
codificacionHex = '5';
elseif strcmp(grupos4Bits{1},'0110')
codificacionHex = '6';
elseif strcmp(grupos4Bits{1},'0111')
codificacionHex = '7';
elseif strcmp(grupos4Bits{1},'1000')
codificacionHex = '8';
elseif strcmp(grupos4Bits{1},'1001')
codificacionHex = '9';
elseif strcmp(grupos4Bits{1},'1010')
codificacionHex = 'A';
elseif strcmp(grupos4Bits{1},'1011')
codificacionHex = 'B';
elseif strcmp(grupos4Bits{1},'1100')
codificacionHex = 'C';
elseif strcmp(grupos4Bits{1},'1101')
codificacionHex = 'D';
elseif strcmp(grupos4Bits{1},'1110')
codificacionHex = 'E';
elseif strcmp(grupos4Bits{1},'1111')
codificacionHex = 'F';
end
for j=2:length(grupos4Bits)
if strcmp(grupos4Bits{j},'0000')
codificacionHex = strcat(codificacionHex,'0');
elseif strcmp(grupos4Bits{j},'0001')
codificacionHex = strcat(codificacionHex,'1');
elseif strcmp(grupos4Bits{j},'0010')
codificacionHex = strcat(codificacionHex,'2');
elseif strcmp(grupos4Bits{j},'0011')
codificacionHex = strcat(codificacionHex,'3');
elseif strcmp(grupos4Bits{j},'0100')
codificacionHex = strcat(codificacionHex,'4');
elseif strcmp(grupos4Bits{j},'0101')
codificacionHex = strcat(codificacionHex,'5');
elseif strcmp(grupos4Bits{j},'0110')
codificacionHex = strcat(codificacionHex,'6');
elseif strcmp(grupos4Bits{j},'0111')
codificacionHex = strcat(codificacionHex,'7');
elseif strcmp(grupos4Bits{j},'1000')
codificacionHex = strcat(codificacionHex,'8');
elseif strcmp(grupos4Bits{j},'1001')
codificacionHex = strcat(codificacionHex,'9');
elseif strcmp(grupos4Bits{j},'1010')
codificacionHex = strcat(codificacionHex,'A');
elseif strcmp(grupos4Bits{j},'1011')
codificacionHex = strcat(codificacionHex,'B');
elseif strcmp(grupos4Bits{j},'1100')
codificacionHex = strcat(codificacionHex,'C');
elseif strcmp(grupos4Bits{j},'1101')
codificacionHex = strcat(codificacionHex,'D');
elseif strcmp(grupos4Bits{j},'1110')
codificacionHex = strcat(codificacionHex,'E');
elseif strcmp(grupos4Bits{j},'1111')
codificacionHex = strcat(codificacionHex,'F');
end
end
%Se resuelve el codigo expresando la funcionalidad segun el texto marcado
fclose(fileID);
clear ans;

Más contenido relacionado

PPT
Clase lenguaje c
PDF
Ejercicios tema4 parte1_soluciones (2)
PDF
5.3 instruccion while
PPTX
Estructura mientras 'while'
PPTX
Estructura mientras 'while'
PPTX
Iteraciones y decisiones en c++
PDF
43 Php. La Instruccion Continue
PDF
Informe 21
Clase lenguaje c
Ejercicios tema4 parte1_soluciones (2)
5.3 instruccion while
Estructura mientras 'while'
Estructura mientras 'while'
Iteraciones y decisiones en c++
43 Php. La Instruccion Continue
Informe 21

La actualidad más candente (16)

PDF
Codigo detección y corrección de errores (yango colmenares)
PDF
Clase 6
PDF
Ejemplo C++
DOC
Sentencias condicionales y ciclos
PDF
Estructuras de control C++
DOCX
Estructuras de repetición en programacion
PPTX
Fundamentos de programación 1. diseño de algoritmos
PDF
Estructuras de control
PDF
Variables, expresiones y ejecución de condiciones les en PSeInt
PPTX
PPTX
Estructuras de seleccion
PDF
Instrucciones de control de salto
PPT
Tema vi guia de c 2
PDF
Escuela
PDF
Sentencias de control
PPT
Lenguaje Borland C - Estructuras de Control
Codigo detección y corrección de errores (yango colmenares)
Clase 6
Ejemplo C++
Sentencias condicionales y ciclos
Estructuras de control C++
Estructuras de repetición en programacion
Fundamentos de programación 1. diseño de algoritmos
Estructuras de control
Variables, expresiones y ejecución de condiciones les en PSeInt
Estructuras de seleccion
Instrucciones de control de salto
Tema vi guia de c 2
Escuela
Sentencias de control
Lenguaje Borland C - Estructuras de Control
Publicidad

Destacado (16)

PPTX
Ingeniero Véndete en el Mercado Global
PDF
Codigo entropía criptográfica (yango colmenares)
PDF
Codigo hill claves (yango colmenares)
PPT
רשימת רמת גן נקייה
DOCX
Jgbcfybt ghjub
PPTX
Overview of test process improvement frameworks
PPTX
ACC presentation for QA Club Kiev
PPTX
Software Testing Foundations Part 8 - Test Tools
PPTX
Fundamental Test Process New
PDF
código detección de errores (yango colmenares)
PPTX
Software Testing Foundations Part 2 - Testing in Software Lifecycle
PPTX
Software Testing Foundations Part 5 - White Box Testing
PPTX
Software Testing Foundations Part 4 - Black Box Testing
PPTX
Software Testing Foundations Part 7 - Basics of Test Management
PPTX
Software Testing Foundations Part 6 - Intuitive and Experience-based testing
Ingeniero Véndete en el Mercado Global
Codigo entropía criptográfica (yango colmenares)
Codigo hill claves (yango colmenares)
רשימת רמת גן נקייה
Jgbcfybt ghjub
Overview of test process improvement frameworks
ACC presentation for QA Club Kiev
Software Testing Foundations Part 8 - Test Tools
Fundamental Test Process New
código detección de errores (yango colmenares)
Software Testing Foundations Part 2 - Testing in Software Lifecycle
Software Testing Foundations Part 5 - White Box Testing
Software Testing Foundations Part 4 - Black Box Testing
Software Testing Foundations Part 7 - Basics of Test Management
Software Testing Foundations Part 6 - Intuitive and Experience-based testing
Publicidad

Similar a Codigo huffman (yango colmenares) (20)

PDF
Hpcs conf poster
PDF
Codificacion HUFFMAN en matlab
PDF
Presentacion Foro eulises brazon Josue Baez
PPTX
Algoritmos de compresión
PPTX
Algoritmo de compresión de huffman
PDF
Algoritmos
PDF
Codificación de Huffman
PDF
Algoritmos de compresion
PDF
Programas lpp sena 25 entregados
PPTX
Deber 01
PPTX
FUNDAMENTOS DE PROGRAMACIÓN
PDF
Programacion 1
DOCX
Ejercicios propuestos ejemplos de diagrama de flujo y algoritmos
PPTX
Problemas de algoritmo
DOCX
Ejemplos de pseudocodigos
DOCX
Practica calificada
PPT
Algoritmos
PDF
codigo comprensión(yango colmenares)
DOCX
Estructuras de control
DOC
Algoritmos 50 ejemplos
Hpcs conf poster
Codificacion HUFFMAN en matlab
Presentacion Foro eulises brazon Josue Baez
Algoritmos de compresión
Algoritmo de compresión de huffman
Algoritmos
Codificación de Huffman
Algoritmos de compresion
Programas lpp sena 25 entregados
Deber 01
FUNDAMENTOS DE PROGRAMACIÓN
Programacion 1
Ejercicios propuestos ejemplos de diagrama de flujo y algoritmos
Problemas de algoritmo
Ejemplos de pseudocodigos
Practica calificada
Algoritmos
codigo comprensión(yango colmenares)
Estructuras de control
Algoritmos 50 ejemplos

Más de Yango Alexander Colmenares (10)

PDF
Algoritmo comprensión dct(yango colmenares)
PDF
Algoritmo comprensión lsb(yango colmenares)
PDF
Algoritmo comprensión lzw(yango colmenares)
PDF
Actividad #7 codigo detección de errores (yango colmenares)
PDF
Codigo rsa manejo de llaves publicas y privadas (yango colmenares)
PPTX
Criterios de Excelencia en Redes de Internet
PDF
PPTX
PPTX
Valores corporativos
PPTX
Equidad y genero
Algoritmo comprensión dct(yango colmenares)
Algoritmo comprensión lsb(yango colmenares)
Algoritmo comprensión lzw(yango colmenares)
Actividad #7 codigo detección de errores (yango colmenares)
Codigo rsa manejo de llaves publicas y privadas (yango colmenares)
Criterios de Excelencia en Redes de Internet
Valores corporativos
Equidad y genero

Último (20)

PDF
RM2025 - FUNDAMENTOS TEÓRICOS - PEDIATRÍA.pdf
PDF
Esc. Sab. Lección 7. El pan y el agua de vida.pdf
PPTX
Presentación de la Cetoacidosis diabetica.pptx
PDF
Como Potenciar las Emociones Positivas y Afrontar las Negativas Ccesa007.pdf
PDF
Texto Digital Los Miserables - Victor Hugo Ccesa007.pdf
PPTX
T2 Desarrollo del SNC, envejecimiento y anatomia.pptx
PDF
Aqui No Hay Reglas Hastings-Meyer Ccesa007.pdf
PDF
informe tipos de Informatica perfiles profesionales _pdf
PDF
Modelo Educativo SUB 2023versión final.pdf
PDF
La Inteligencia Emocional - Fabian Goleman TE4 Ccesa007.pdf
PPTX
LAS MIGRACIONES E INVASIONES Y EL INICIO EDAD MEDIA
PDF
Nadie puede salvarte excepto Tú - Madame Rouge Ccesa007.pdf
PPTX
Clase 3 del silabo-gestion y control financiero
PDF
Los hombres son de Marte - Las mujeres de Venus Ccesa007.pdf
PDF
Mi Primer Millon - Poissant - Godefroy Ccesa007.pdf
PDF
Los10 Mandamientos de la Actitud Mental Positiva Ccesa007.pdf
PDF
MATERIAL DIDÁCTICO 2023 SELECCIÓN 1_REFORZAMIENTO 1° BIMESTRE.pdf
PDF
Escuelas Desarmando una mirada subjetiva a la educación
PDF
La Formacion Universitaria en Nuevos Escenarios Ccesa007.pdf
DOCX
Programa_Sintetico_Fase_4.docx 3° Y 4°..
RM2025 - FUNDAMENTOS TEÓRICOS - PEDIATRÍA.pdf
Esc. Sab. Lección 7. El pan y el agua de vida.pdf
Presentación de la Cetoacidosis diabetica.pptx
Como Potenciar las Emociones Positivas y Afrontar las Negativas Ccesa007.pdf
Texto Digital Los Miserables - Victor Hugo Ccesa007.pdf
T2 Desarrollo del SNC, envejecimiento y anatomia.pptx
Aqui No Hay Reglas Hastings-Meyer Ccesa007.pdf
informe tipos de Informatica perfiles profesionales _pdf
Modelo Educativo SUB 2023versión final.pdf
La Inteligencia Emocional - Fabian Goleman TE4 Ccesa007.pdf
LAS MIGRACIONES E INVASIONES Y EL INICIO EDAD MEDIA
Nadie puede salvarte excepto Tú - Madame Rouge Ccesa007.pdf
Clase 3 del silabo-gestion y control financiero
Los hombres son de Marte - Las mujeres de Venus Ccesa007.pdf
Mi Primer Millon - Poissant - Godefroy Ccesa007.pdf
Los10 Mandamientos de la Actitud Mental Positiva Ccesa007.pdf
MATERIAL DIDÁCTICO 2023 SELECCIÓN 1_REFORZAMIENTO 1° BIMESTRE.pdf
Escuelas Desarmando una mirada subjetiva a la educación
La Formacion Universitaria en Nuevos Escenarios Ccesa007.pdf
Programa_Sintetico_Fase_4.docx 3° Y 4°..

Codigo huffman (yango colmenares)

  • 1. Instituto Politécnico Nacional Introducción a los Sistemas de Comunicación Seguros Unidad MISTI Culhuacan Presentado a: Dr. Gualberto Aguilar Torres Tarea Sistemas Huffman 9 Por: Yango Alexander Colmenares Fecha Octubre de 2013 %% INSTITUTO POLITECNICO NACIONAL-MISTI CULHUACAN --- MEXICO DF 2013 %%Desarrollado por:Yango Colmenares %Presentado a : Dr. Gualberto Aguilar Torres %Programación en Matlab %Codigo Huffman clc; clear all; close all; % Aqui se lee el archivo .txt fileID = fopen('pruebaProba.txt'); % Se utiliza el comando fscanf para analizar el contenido del archivo texto = fscanf(fileID,'%c'); % Se convierte el texto a minusculas texto = lower(texto); % En la siguiente variable obtenemos el total de letras del texto aunque % se repitan, contanto espacios en blanco, simbolos, etc. totalLetras = length(texto); % Algoritmo para quitar acentos a vocales for j=1:length(texto) if strcmp(texto(j),'á') texto(j)='a'; elseif strcmp(texto(j),'é') texto(j)='e'; elseif strcmp(texto(j),'í') texto(j)='i'; elseif strcmp(texto(j),'ó') texto(j)='o'; elseif strcmp(texto(j),'ú') texto(j)='u'; end
  • 2. end clear j; % El comando control de flujo del texto 'ENTER' lo cambiamos por un espacio % en blanco for j=1:length(texto) if isstrprop(texto(j), 'cntrl') texto(j)=' '; end end clear j; % Inicializamos la variable palabras Solas que contendra las palabra del % texto sin repetirse letrasSolas(1) = texto(1); % Algoritmo que nos ayuda a encontrar las palabras sin repetirse del texto % para irlas guardando en el vector palabrasSolas indicador = 0; for j=1:length(texto) for i=1:length(letrasSolas) % Para comparar cadenas: strcmp(cadena1, cadena2); if strcmp(letrasSolas(i),texto(j)) indicador = 1; end end if indicador ~= 1 letrasSolas(i+1) = texto(j); end indicador = 0; end clear j i indicador; % El siguiente algoritmo nos ayuda a contar el numero de palabras que se % repiten dentro del texto cargado contadorLetras = zeros(1,length(letrasSolas)); for j=1:length(letrasSolas) for i=1:length(texto) if strcmp(letrasSolas(j),texto(i)) contadorLetras(j) = contadorLetras(j) + 1; end end end clear j i; % Histograma de las palabras encontradas dentro del texto mostrando la % frecuencia de ellas % bar(contadorLetras); % El siguiente codigo obtiene la probabilidad de cada palabra probaLetras = zeros(1,length(letrasSolas)); for j=1:length(letrasSolas) probaLetras(j) = contadorLetras(j)/totalLetras;
  • 3. end clear j; % Hasta aqui se termino de analizar el texto y se puede ahora proseguir con % la codificacion Huffman %% Algoritmo de Huffman % La variable letrasSolas las pasamos a celdas for i=1:length(letrasSolas) letrasSolasCell{i,1} = letrasSolas(i); probaLetrasCell{i,1} = probaLetras(i); codigosLetrasCell{i,1} = ''; end clear i; % Las siguientes variables nos ayudaran a realizar el algoritmo de huffman letrasSolasCellSort = letrasSolasCell; probaLetrasCellSort = probaLetrasCell; % Acomodamos las probabilidades de forma descendiente for j=1:length(probaLetrasCellSort) for i=1:length(probaLetrasCellSort)-1 if probaLetrasCellSort{i} < probaLetrasCellSort{i+1} aux = probaLetrasCellSort{i}; aux1 = letrasSolasCellSort{i}; probaLetrasCellSort{i} = probaLetrasCellSort{i+1}; letrasSolasCellSort{i} = letrasSolasCellSort{i+1}; probaLetrasCellSort{i+1} = aux; letrasSolasCellSort{i+1} = aux1; end end end clear j i aux aux1; tope = length(letrasSolasCellSort); for i=1:length(letrasSolasCellSort)-2 for j=1:tope-1 if j == tope-1 probaLetrasCellSort{j,i+1} = probaLetrasCellSort{j,i}+probaLetrasCellSort{j+1,i}; sumasHuffman{i,1} = probaLetrasCellSort{j,i+1}; else probaLetrasCellSort{j,i+1} = probaLetrasCellSort{j,i}; end end for k=1:tope-1 for l=1:tope-2
  • 4. if probaLetrasCellSort{l,i+1} < probaLetrasCellSort{l+1,i+1} aux = probaLetrasCellSort{l,i+1}; probaLetrasCellSort{l,i+1} = probaLetrasCellSort{l+1,i+1}; probaLetrasCellSort{l+1,i+1} = aux; end end end tope = tope-1; end clear tope i j k l aux; probaCopiaSort = probaLetrasCellSort; tope = length(letrasSolasCellSort); for i=1:length(letrasSolasCellSort) indexLetrasSolas{i,1} = i; end clear i; % Esta variable indicara hasta cuando se dejara de borrar las celdas para una % mejor busqueda del código indicador = 0; indPos = 0; for j=1:length(letrasSolasCell) for i=1:length(letrasSolasCell)-2 if j == 1 aux = indexLetrasSolas{j,i}; aux1 = probaLetrasCellSort{aux,i}; if (aux == tope) || (aux == tope-1) for k=tope-1:-1:1 if sumasHuffman{i} == probaLetrasCellSort{k,i+1} indexLetrasSolas{j,i+1} = k; indicador = indicador + 1; break; end end else for k=aux:tope-1 if indicador == 0 if aux1 == probaLetrasCellSort{k,i+1} indexLetrasSolas{j,i+1} = k; probaLetrasCellSort{aux,i} = 0; break;
  • 5. end else if aux1 == probaLetrasCellSort{k,i+1} indexLetrasSolas{j,i+1} = k; break; end end end end tope = tope-1; else aux = indexLetrasSolas{j,i}; aux1 = probaLetrasCellSort{aux,i}; if (aux == tope) || (aux == tope-1) for k=tope-1:-1:1 if sumasHuffman{i} == probaLetrasCellSort{k,i+1} indexLetrasSolas{j,i+1} = k; indicador = indicador + 1; break; end end else for k=aux:tope-1 if indicador == 0 if aux1 == probaLetrasCellSort{k,i+1} if k == indexLetrasSolas{j-1,i+1} indexLetrasSolas{j,i+1} = k+1; probaLetrasCellSort{aux,i} = 0; break; else indexLetrasSolas{j,i+1} = k; probaLetrasCellSort{aux,i} = 0; break; end end else if aux1 == probaLetrasCellSort{k,i+1} indexLetrasSolas{j,i+1} = k; break; end end
  • 6. end end tope = tope-1; end end indicador = 0; tope = length(letrasSolasCellSort); end tope = length(letrasSolasCellSort); for j=1:length(letrasSolasCell) for i=1:length(letrasSolasCell)-1 if indexLetrasSolas{j,i} == tope codigosLetrasCell{j} = strcat(codigosLetrasCell{j},'1'); elseif indexLetrasSolas{j,i} == tope-1 codigosLetrasCell{j} = strcat(codigosLetrasCell{j},'0'); end tope = tope - 1; end tope = length(letrasSolasCellSort); end % Creamos una tabla que servira de muestra para visualizar las % codificaciones for i=1:length(letrasSolasCell) tabla{i,1} = letrasSolasCellSort{i,1}; end for i=1:length(letrasSolasCell) tabla{i,2} = probaCopiaSort{i,1}; end for i=1:length(letrasSolasCell) tabla{i,3} = codigosLetrasCell{i,1}; end % Analisis del codigo y verificacion del sistema Huffman % Crea la variable codificacion que contendra todo el texto codificado for j=1:length(letrasSolasCellSort) if strcmp(texto(1),letrasSolasCellSort{j}) codificacion = codigosLetrasCell{j}; end end % Codificar el texto analizado for i=2:length(texto) for j=1:length(letrasSolasCellSort) if strcmp(texto(i),letrasSolasCellSort{j}) codificacion = strcat(codificacion,codigosLetrasCell{j});
  • 7. end end end % Copiamos la codificacion tal y como nos la entrega el algoritmo anterior % como copia segura codificacion1 = codificacion; % El siguiente algoritmo agrega '0's a la derecha para despues poderlo % organizar en grupos de 8 tipo modulos if mod(length(codificacion),8) ~= 0 for j=length(codificacion):length(codificacion)+7- mod(length(codificacion),8) codificacion(j+1) = '0'; end end % % Agrupar codificacion en grupos de 8 bits i=1; for j=1:floor(length(codificacion)/8) grupos8Bits{j} = codificacion(i:i+7); i=i+8; end % % Agrupar codificacion en grupos de 4 bits i=1; for j=1:floor(length(codificacion)/4) grupos4Bits{j} = codificacion(i:i+3); i=i+4; end % % Algoritmo que pasa la codificacion a Hexadecimal if strcmp(grupos4Bits{1},'0000') codificacionHex = '0'; elseif strcmp(grupos4Bits{1},'0001') codificacionHex = '1'; elseif strcmp(grupos4Bits{1},'0010') codificacionHex = '2'; elseif strcmp(grupos4Bits{1},'0011') codificacionHex = '3'; elseif strcmp(grupos4Bits{1},'0100') codificacionHex = '4'; elseif strcmp(grupos4Bits{1},'0101') codificacionHex = '5'; elseif strcmp(grupos4Bits{1},'0110') codificacionHex = '6'; elseif strcmp(grupos4Bits{1},'0111') codificacionHex = '7'; elseif strcmp(grupos4Bits{1},'1000') codificacionHex = '8'; elseif strcmp(grupos4Bits{1},'1001') codificacionHex = '9'; elseif strcmp(grupos4Bits{1},'1010') codificacionHex = 'A'; elseif strcmp(grupos4Bits{1},'1011')
  • 8. codificacionHex = 'B'; elseif strcmp(grupos4Bits{1},'1100') codificacionHex = 'C'; elseif strcmp(grupos4Bits{1},'1101') codificacionHex = 'D'; elseif strcmp(grupos4Bits{1},'1110') codificacionHex = 'E'; elseif strcmp(grupos4Bits{1},'1111') codificacionHex = 'F'; end for j=2:length(grupos4Bits) if strcmp(grupos4Bits{j},'0000') codificacionHex = strcat(codificacionHex,'0'); elseif strcmp(grupos4Bits{j},'0001') codificacionHex = strcat(codificacionHex,'1'); elseif strcmp(grupos4Bits{j},'0010') codificacionHex = strcat(codificacionHex,'2'); elseif strcmp(grupos4Bits{j},'0011') codificacionHex = strcat(codificacionHex,'3'); elseif strcmp(grupos4Bits{j},'0100') codificacionHex = strcat(codificacionHex,'4'); elseif strcmp(grupos4Bits{j},'0101') codificacionHex = strcat(codificacionHex,'5'); elseif strcmp(grupos4Bits{j},'0110') codificacionHex = strcat(codificacionHex,'6'); elseif strcmp(grupos4Bits{j},'0111') codificacionHex = strcat(codificacionHex,'7'); elseif strcmp(grupos4Bits{j},'1000') codificacionHex = strcat(codificacionHex,'8'); elseif strcmp(grupos4Bits{j},'1001') codificacionHex = strcat(codificacionHex,'9'); elseif strcmp(grupos4Bits{j},'1010') codificacionHex = strcat(codificacionHex,'A'); elseif strcmp(grupos4Bits{j},'1011') codificacionHex = strcat(codificacionHex,'B'); elseif strcmp(grupos4Bits{j},'1100') codificacionHex = strcat(codificacionHex,'C'); elseif strcmp(grupos4Bits{j},'1101') codificacionHex = strcat(codificacionHex,'D'); elseif strcmp(grupos4Bits{j},'1110') codificacionHex = strcat(codificacionHex,'E'); elseif strcmp(grupos4Bits{j},'1111') codificacionHex = strcat(codificacionHex,'F'); end end %Se resuelve el codigo expresando la funcionalidad segun el texto marcado fclose(fileID); clear ans;