Este documento trata sobre los tipos de datos abstractos (TDA). Explica que un TDA es un tipo de dato definido por el programador para manipular datos de manera similar a los tipos de datos del lenguaje. Menciona que las listas y pilas son aplicaciones tradicionales de los TDA y describe sus características. Concluye que un TDA es un elemento básico de abstracción de datos que puede verse como una caja negra cuyos detalles de implementación deben permanecer ocultos, e implican el uso de referencias.
Este documento describe un prototipo de analizador léxico para un lenguaje llamado MiniUGB. Define los componentes léxicos del lenguaje y proporciona el código C++ para un analizador léxico que identifica tokens en un archivo fuente MiniUGB y los envía al analizador sintáctico. El objetivo es mostrar un ejemplo básico de cómo funciona un analizador léxico.
El documento describe las características fundamentales del lenguaje de programación C. C es un lenguaje de nivel medio que permite un control de bajo nivel y características de alto nivel. Los programas en C se estructuran en funciones que contienen declaraciones de variables y sentencias. C admite tipos de datos como enteros, reales y caracteres, y operadores aritméticos, relacionales y lógicos.
Este documento describe diferentes algoritmos de búsqueda y ordenamiento. Explica los métodos de búsqueda lineal, binaria y mediante transformación de claves, así como formas de resolver colisiones cuando se usa el método de transformación de claves. También cubre conceptos como estructuras de datos, tipos de búsqueda y ordenamiento interno y externo.
El documento describe las listas doblemente enlazadas, una estructura de datos similar a las listas enlazadas simples pero donde cada nodo tiene punteros al nodo siguiente y anterior. Explica las operaciones básicas como declarar el tipo de lista, insertar y eliminar nodos, mostrar la lista, y destruirla. También incluye código C++ para implementar una lista doblemente enlazada con estas operaciones.
Las tablas hash son estructuras de datos que almacenan elementos clave-valor y permiten buscarlos en tiempo constante O(1). Usan una función hash para mapear las claves a posiciones de un vector. Pueden ocurrir colisiones cuando claves distintas mapean a la misma posición, lo que se resuelve mediante exploración lineal, cuadrática o direccionamiento enlazado. El documento analiza diferentes funciones hash, métodos para resolver colisiones y operaciones básicas en tablas hash enlazadas en Java.
La lista habla sobre diferentes tipos de listas enlazadas como listas doblemente enlazadas y simplemente enlazadas, y sus operaciones como recorrido, mezcla, búsqueda, inserción y eliminación. También menciona que las listas enlazadas son estructuras dinámicas que permiten agregar y eliminar nodos fácilmente.
Este documento describe varios métodos de ordenamiento interno como inserción directa, burbuja, quicksort, shellsort, ordenamiento por conteo y ordenamiento por distribución. Explica los pasos de cada algoritmo y provee ejemplos para ilustrar cómo funcionan.
Este documento trata sobre los tipos de datos abstractos (TDA). Explica que un TDA es un tipo de dato definido por el programador para manipular datos de manera similar a los tipos de datos del lenguaje. Menciona que las listas y pilas son aplicaciones tradicionales de los TDA y describe sus características. Concluye que un TDA es un elemento básico de abstracción de datos que puede verse como una caja negra cuyos detalles de implementación deben permanecer ocultos, e implican el uso de referencias.
Este documento describe un prototipo de analizador léxico para un lenguaje llamado MiniUGB. Define los componentes léxicos del lenguaje y proporciona el código C++ para un analizador léxico que identifica tokens en un archivo fuente MiniUGB y los envía al analizador sintáctico. El objetivo es mostrar un ejemplo básico de cómo funciona un analizador léxico.
El documento describe las características fundamentales del lenguaje de programación C. C es un lenguaje de nivel medio que permite un control de bajo nivel y características de alto nivel. Los programas en C se estructuran en funciones que contienen declaraciones de variables y sentencias. C admite tipos de datos como enteros, reales y caracteres, y operadores aritméticos, relacionales y lógicos.
Este documento describe diferentes algoritmos de búsqueda y ordenamiento. Explica los métodos de búsqueda lineal, binaria y mediante transformación de claves, así como formas de resolver colisiones cuando se usa el método de transformación de claves. También cubre conceptos como estructuras de datos, tipos de búsqueda y ordenamiento interno y externo.
El documento describe las listas doblemente enlazadas, una estructura de datos similar a las listas enlazadas simples pero donde cada nodo tiene punteros al nodo siguiente y anterior. Explica las operaciones básicas como declarar el tipo de lista, insertar y eliminar nodos, mostrar la lista, y destruirla. También incluye código C++ para implementar una lista doblemente enlazada con estas operaciones.
Las tablas hash son estructuras de datos que almacenan elementos clave-valor y permiten buscarlos en tiempo constante O(1). Usan una función hash para mapear las claves a posiciones de un vector. Pueden ocurrir colisiones cuando claves distintas mapean a la misma posición, lo que se resuelve mediante exploración lineal, cuadrática o direccionamiento enlazado. El documento analiza diferentes funciones hash, métodos para resolver colisiones y operaciones básicas en tablas hash enlazadas en Java.
La lista habla sobre diferentes tipos de listas enlazadas como listas doblemente enlazadas y simplemente enlazadas, y sus operaciones como recorrido, mezcla, búsqueda, inserción y eliminación. También menciona que las listas enlazadas son estructuras dinámicas que permiten agregar y eliminar nodos fácilmente.
Este documento describe varios métodos de ordenamiento interno como inserción directa, burbuja, quicksort, shellsort, ordenamiento por conteo y ordenamiento por distribución. Explica los pasos de cada algoritmo y provee ejemplos para ilustrar cómo funcionan.
El analizador sintáctico verifica el orden de los tokens obtenidos del analizador léxico de acuerdo con una gramática de contexto libre. Procesa los lexemas suministrados por el analizador léxico para comprobar que están bien ordenados y, de lo contrario, generar informes de error; y si están bien ordenados, genera un árbol sintáctico teórico.
Ejercicios resueltos en el Laboratorio de estructuras struct registrosrasave
Estructuras struct lenguaje C, declaración de estructuras struct, definición de estructuras struct, asignación de estructuras struct, acceso a los miembros de la estructura struct, operadores para el acceso a estructuras struct, operador punto, operador flecha
Este documento introduce las estructuras de datos no lineales, en particular los árboles. Explica que un árbol es una estructura dinámica y no lineal compuesta por nodos enlazados. Describe las operaciones básicas en árboles binarios como la inserción, eliminación y recorrido de nodos, así como la clasificación y balanceo de árboles. El objetivo es que los estudiantes aprendan sobre árboles y cómo implementarlos en un lenguaje de programación.
El documento describe las variables y constantes en C++. Las variables son zonas de almacenamiento cuyos valores pueden variar, mientras que las constantes mantienen el mismo valor durante todo el programa. Explica cómo declarar variables y constantes, las reglas para los identificadores, y cómo asignar valores. También clasifica las variables como globales u locales dependiendo de su alcance.
Este documento describe diferentes tipos de árboles como estructuras de datos no lineales, incluyendo árboles m-way, 2-3 y 2-3-4. Explica sus características, ventajas y desventajas, y cómo funcionan para almacenar y recuperar datos de manera ordenada y eficiente. También discute ejemplos y aplicaciones comunes como tablas de símbolos en compiladores y diccionarios. Concluye que estos árboles son útiles cuando se necesita acceder a datos de forma eficiente y eficaz sin
Este documento trata sobre estructuras de datos no lineales como árboles y grafos. Explica que los árboles son estructuras dinámicas donde cada nodo puede tener varios nodos posteriores pero solo un nodo anterior, y describe los diferentes tipos de recorridos en árboles como preorden, enorden y postorden. También define grafos como conjuntos de vértices y aristas que representan relaciones, y cubre conceptos como caminos, grado de nodos y si un grafo es dirigido o no.
Este documento compara y resume varios métodos de ordenamiento de datos, incluyendo ordenamiento por selección, burbuja, Shell, inserción, quicksort y mergesort. Explica la lógica de cada algoritmo, su complejidad computacional y ventajas/desventajas. Concluye que quicksort y mergesort son los más eficientes, aunque mergesort usa más memoria.
- Se define un árbol binario como una estructura de datos compuesta por nodos en la que cada nodo tiene como máximo dos hijos y en la que se puede tomar una decisión binaria en cada nodo.
- Los árboles binarios permiten representar de manera jerárquica objetos mediante la relación de padres e hijos entre los nodos.
- Existen diferentes tipos de recorridos en un árbol binario como preorden, en orden, postorden y por niveles para visitar todos los nodos de forma ordenada.
El documento explica el algoritmo de ordenamiento por distribución conocido como Radix Sort. Explica que ordena números enteros según el valor de sus dígitos de forma individual, de menor a mayor. Presenta un ejemplo ordenando el vector 11-34-90-30-37-82 primero por unidades y luego por decenas. Finalmente, detalla las etapas del algoritmo Radix Sort en C++.
Este documento explica los algoritmos de hash y cómo se utilizan para almacenar y recuperar datos de forma eficiente en O(1). El hashing involucra una función que mapea claves a posiciones de una tabla. Pueden ocurrir colisiones cuando claves diferentes mapean a la misma posición, y existen varios métodos para manejar esto como exploración lineal, cuadrática o doble hash.
Ejercicios de Java Básico. Listado 1 de Ejercicios.Programación.Isabel Gómez
Consiste en una serie de ejercicios para aprender correctamente el uso de las variables y sus rangos. Además de la problemática relacionada con ellas. Como por ejemplo el casting o convertir variables, o los rangos de éstas variables.
El documento describe diferentes métodos de intercalación para ordenar datos. La intercalación divide los datos en sublistas ordenadas y luego las combina de forma recursiva para crear una lista ordenada final. Específicamente, describe la intercalación simple, la intercalación binaria (una variante más rápida) y la intercalación merge, la cual aprovecha que las sublistas ya están ordenadas para una fusión más eficiente.
Esta presentación es parte del contenido del curso de Programación Avanzada impartido en la Universidad Rafael Landívar durante el año 2015.
Incluye los temas:
• Ordenamiento rápido
• Ordenamiento por mezcla
Creado por Ing. Alvaro Enrique Ruano
Este documento describe diferentes tipos de listas como estructura de datos, incluyendo listas enlazadas, listas doblemente enlazadas y listas circulares. Explica que las listas enlazadas permiten la inserción y eliminación de nodos en cualquier punto de la lista en tiempo constante. También describe operaciones básicas sobre listas enlazadas como creación, inserción y supresión de nodos. Finalmente, resume los usos comunes de diferentes tipos de listas como listas simples, listas enlazadas y listas circulares.
Este documento presenta información sobre arreglos. Explica que un arreglo es una estructura de datos que almacena una colección de elementos del mismo tipo. Describe los tipos de arreglos como unidimensionales, bidimensionales y multidimensionales. Luego detalla características, formatos de declaración, operaciones y manipulación de arreglos unidimensionales y bidimensionales.
El algoritmo de ordenamiento por inserción ordena una lista de elementos de forma iterativa. Compara cada elemento con los elementos anteriores y lo inserta en la posición correcta, moviendo los elementos mayores. Tiene un orden de complejidad cuadrático O(n2) y es más efectivo para listas pequeñas debido a su simplicidad y bajo uso de memoria, pero es más lento para listas grandes donde se requieren muchas comparaciones e intercambios.
Este documento trata sobre la ingeniería del software. Define la ingeniería del software como la rama de la ingeniería que crea y mantiene aplicaciones de software usando ciencias de la computación, gestión de proyectos e ingeniería. Explica conceptos clave como software, paradigmas de programación, métodos de desarrollo de software, modelado de sistemas y objetivos de la ingeniería del software. Finalmente, señala que la ingeniería del software permite mejorar la calidad del software mediante un proceso formal, y que los ingenieros de software trabajan
El documento describe diferentes métodos de búsqueda no informada como la búsqueda en anchura, búsqueda en profundidad y búsqueda bidireccional. También presenta ejemplos y ejercicios de cómo aplicar estos métodos a árboles y grafos. Luego, introduce conceptos de búsqueda informada utilizando heurísticas como la búsqueda voraz y el algoritmo A*, ilustrando su funcionamiento a través de ejemplos.
Radix sort es un algoritmo de ordenamiento que ordena enteros procesando sus dígitos de forma individual. Funciona ordenando los números por el valor de sus dígitos menos o más significativos de forma iterativa. Es rápido para ordenar conjuntos de números enteros y fácil de implementar, aunque requiere espacio adicional y no es adecuado si la entrada no son sólo números. Su complejidad temporal es O(kn) donde k es el número máximo de dígitos y n el tamaño de la entrada.
El documento describe el algoritmo de codificación Huffman, el cual asigna códigos binarios de longitud variable a símbolos basados en su frecuencia de aparición. Esto permite comprimir datos al representar símbolos comunes con códigos más cortos. El algoritmo construye un árbol binario agrupando los símbolos por frecuencia desde la más baja hasta formar el árbol, lo que garantiza códigos óptimos para la frecuencia dada.
Este documento presenta dos aplicaciones de los árboles: 1) los árboles binarios de búsqueda, que permiten almacenar y buscar elementos de una lista de manera eficiente, y 2) los códigos instantáneos, que permiten codificar caracteres usando cadenas de bits de longitud variable para comprimir datos. También describe el algoritmo de Huffman, el cual genera códigos instantáneos óptimos que minimizan la longitud total de bits requerida.
El analizador sintáctico verifica el orden de los tokens obtenidos del analizador léxico de acuerdo con una gramática de contexto libre. Procesa los lexemas suministrados por el analizador léxico para comprobar que están bien ordenados y, de lo contrario, generar informes de error; y si están bien ordenados, genera un árbol sintáctico teórico.
Ejercicios resueltos en el Laboratorio de estructuras struct registrosrasave
Estructuras struct lenguaje C, declaración de estructuras struct, definición de estructuras struct, asignación de estructuras struct, acceso a los miembros de la estructura struct, operadores para el acceso a estructuras struct, operador punto, operador flecha
Este documento introduce las estructuras de datos no lineales, en particular los árboles. Explica que un árbol es una estructura dinámica y no lineal compuesta por nodos enlazados. Describe las operaciones básicas en árboles binarios como la inserción, eliminación y recorrido de nodos, así como la clasificación y balanceo de árboles. El objetivo es que los estudiantes aprendan sobre árboles y cómo implementarlos en un lenguaje de programación.
El documento describe las variables y constantes en C++. Las variables son zonas de almacenamiento cuyos valores pueden variar, mientras que las constantes mantienen el mismo valor durante todo el programa. Explica cómo declarar variables y constantes, las reglas para los identificadores, y cómo asignar valores. También clasifica las variables como globales u locales dependiendo de su alcance.
Este documento describe diferentes tipos de árboles como estructuras de datos no lineales, incluyendo árboles m-way, 2-3 y 2-3-4. Explica sus características, ventajas y desventajas, y cómo funcionan para almacenar y recuperar datos de manera ordenada y eficiente. También discute ejemplos y aplicaciones comunes como tablas de símbolos en compiladores y diccionarios. Concluye que estos árboles son útiles cuando se necesita acceder a datos de forma eficiente y eficaz sin
Este documento trata sobre estructuras de datos no lineales como árboles y grafos. Explica que los árboles son estructuras dinámicas donde cada nodo puede tener varios nodos posteriores pero solo un nodo anterior, y describe los diferentes tipos de recorridos en árboles como preorden, enorden y postorden. También define grafos como conjuntos de vértices y aristas que representan relaciones, y cubre conceptos como caminos, grado de nodos y si un grafo es dirigido o no.
Este documento compara y resume varios métodos de ordenamiento de datos, incluyendo ordenamiento por selección, burbuja, Shell, inserción, quicksort y mergesort. Explica la lógica de cada algoritmo, su complejidad computacional y ventajas/desventajas. Concluye que quicksort y mergesort son los más eficientes, aunque mergesort usa más memoria.
- Se define un árbol binario como una estructura de datos compuesta por nodos en la que cada nodo tiene como máximo dos hijos y en la que se puede tomar una decisión binaria en cada nodo.
- Los árboles binarios permiten representar de manera jerárquica objetos mediante la relación de padres e hijos entre los nodos.
- Existen diferentes tipos de recorridos en un árbol binario como preorden, en orden, postorden y por niveles para visitar todos los nodos de forma ordenada.
El documento explica el algoritmo de ordenamiento por distribución conocido como Radix Sort. Explica que ordena números enteros según el valor de sus dígitos de forma individual, de menor a mayor. Presenta un ejemplo ordenando el vector 11-34-90-30-37-82 primero por unidades y luego por decenas. Finalmente, detalla las etapas del algoritmo Radix Sort en C++.
Este documento explica los algoritmos de hash y cómo se utilizan para almacenar y recuperar datos de forma eficiente en O(1). El hashing involucra una función que mapea claves a posiciones de una tabla. Pueden ocurrir colisiones cuando claves diferentes mapean a la misma posición, y existen varios métodos para manejar esto como exploración lineal, cuadrática o doble hash.
Ejercicios de Java Básico. Listado 1 de Ejercicios.Programación.Isabel Gómez
Consiste en una serie de ejercicios para aprender correctamente el uso de las variables y sus rangos. Además de la problemática relacionada con ellas. Como por ejemplo el casting o convertir variables, o los rangos de éstas variables.
El documento describe diferentes métodos de intercalación para ordenar datos. La intercalación divide los datos en sublistas ordenadas y luego las combina de forma recursiva para crear una lista ordenada final. Específicamente, describe la intercalación simple, la intercalación binaria (una variante más rápida) y la intercalación merge, la cual aprovecha que las sublistas ya están ordenadas para una fusión más eficiente.
Esta presentación es parte del contenido del curso de Programación Avanzada impartido en la Universidad Rafael Landívar durante el año 2015.
Incluye los temas:
• Ordenamiento rápido
• Ordenamiento por mezcla
Creado por Ing. Alvaro Enrique Ruano
Este documento describe diferentes tipos de listas como estructura de datos, incluyendo listas enlazadas, listas doblemente enlazadas y listas circulares. Explica que las listas enlazadas permiten la inserción y eliminación de nodos en cualquier punto de la lista en tiempo constante. También describe operaciones básicas sobre listas enlazadas como creación, inserción y supresión de nodos. Finalmente, resume los usos comunes de diferentes tipos de listas como listas simples, listas enlazadas y listas circulares.
Este documento presenta información sobre arreglos. Explica que un arreglo es una estructura de datos que almacena una colección de elementos del mismo tipo. Describe los tipos de arreglos como unidimensionales, bidimensionales y multidimensionales. Luego detalla características, formatos de declaración, operaciones y manipulación de arreglos unidimensionales y bidimensionales.
El algoritmo de ordenamiento por inserción ordena una lista de elementos de forma iterativa. Compara cada elemento con los elementos anteriores y lo inserta en la posición correcta, moviendo los elementos mayores. Tiene un orden de complejidad cuadrático O(n2) y es más efectivo para listas pequeñas debido a su simplicidad y bajo uso de memoria, pero es más lento para listas grandes donde se requieren muchas comparaciones e intercambios.
Este documento trata sobre la ingeniería del software. Define la ingeniería del software como la rama de la ingeniería que crea y mantiene aplicaciones de software usando ciencias de la computación, gestión de proyectos e ingeniería. Explica conceptos clave como software, paradigmas de programación, métodos de desarrollo de software, modelado de sistemas y objetivos de la ingeniería del software. Finalmente, señala que la ingeniería del software permite mejorar la calidad del software mediante un proceso formal, y que los ingenieros de software trabajan
El documento describe diferentes métodos de búsqueda no informada como la búsqueda en anchura, búsqueda en profundidad y búsqueda bidireccional. También presenta ejemplos y ejercicios de cómo aplicar estos métodos a árboles y grafos. Luego, introduce conceptos de búsqueda informada utilizando heurísticas como la búsqueda voraz y el algoritmo A*, ilustrando su funcionamiento a través de ejemplos.
Radix sort es un algoritmo de ordenamiento que ordena enteros procesando sus dígitos de forma individual. Funciona ordenando los números por el valor de sus dígitos menos o más significativos de forma iterativa. Es rápido para ordenar conjuntos de números enteros y fácil de implementar, aunque requiere espacio adicional y no es adecuado si la entrada no son sólo números. Su complejidad temporal es O(kn) donde k es el número máximo de dígitos y n el tamaño de la entrada.
El documento describe el algoritmo de codificación Huffman, el cual asigna códigos binarios de longitud variable a símbolos basados en su frecuencia de aparición. Esto permite comprimir datos al representar símbolos comunes con códigos más cortos. El algoritmo construye un árbol binario agrupando los símbolos por frecuencia desde la más baja hasta formar el árbol, lo que garantiza códigos óptimos para la frecuencia dada.
Este documento presenta dos aplicaciones de los árboles: 1) los árboles binarios de búsqueda, que permiten almacenar y buscar elementos de una lista de manera eficiente, y 2) los códigos instantáneos, que permiten codificar caracteres usando cadenas de bits de longitud variable para comprimir datos. También describe el algoritmo de Huffman, el cual genera códigos instantáneos óptimos que minimizan la longitud total de bits requerida.
El documento describe dos aplicaciones de los árboles: almacenar elementos en una lista de forma que puedan ser fácilmente localizados usando árboles binarios de búsqueda, y codificar eficientemente un conjunto de caracteres usando códigos de longitud variable como los códigos de Huffman. Los árboles binarios de búsqueda permiten encontrar elementos de una lista de forma eficiente almacenando las claves de cada nodo, mientras que los códigos de Huffman asignan códigos binarios más cortos a los caracteres más frecuentes para comprimir datos
Este documento describe dos aplicaciones de los árboles: 1) almacenar elementos en una lista de forma que puedan ser localizados fácilmente usando árboles binarios de búsqueda y 2) codificar eficientemente un conjunto de caracteres mediante cadenas de bits usando códigos instantáneos como los códigos de Huffman. También presenta ejemplos de cómo construir un árbol binario de búsqueda y cómo representar un código instantáneo usando un árbol binario.
Este documento resume la codificación de Huffman, un algoritmo de compresión de datos que asigna códigos binarios más cortos a los caracteres más frecuentes. Explica que crea un árbol ordenado según la frecuencia de los símbolos y asigna códigos prefijos basados en el camino desde la raíz al nodo de cada símbolo. También presenta ejemplos de cómo codificar cadenas de caracteres usando esta técnica.
Este documento describe los algoritmos de codificación de Huffman y compresión LZW. La codificación de Huffman asigna códigos binarios de longitud variable a símbolos basados en su frecuencia, resultando en una representación más compacta. El algoritmo LZW identifica secuencias repetitivas en los datos y las agrega a una tabla de códigos para lograr la compresión. El documento incluye ejemplos detallados de cómo aplicar ambos algoritmos para comprimir una cadena de caracteres.
La codificación de Huffman es una técnica de compresión de datos que asigna códigos binarios prefijos más cortos a los símbolos más frecuentes de un documento. Esto se logra mediante la construcción de un árbol binario donde los nodos finales representan los símbolos y sus frecuencias, y los caminos desde la raíz a cada nodo forman los códigos prefijos asignados.
Mac2WepKey
Es posible generar la WEP/WPA default de los módems Huawei modelos HG520 y HG530. El propósito de este post es explicar la forma en la que desarrollamos un generador para estos dispositivos. Los módems Huawei modelos HG520b y HG520c cuentan con un software para generar su contraseña WEP y SSID predeterminados a partir de su dirección MAC. El nombre de este software es mac2wepkey y se encuentra disponible en su interfaz de TELNET. Es posible cambiar la dirección MAC de nuestro módem para generar la WEP prederterminada de otro módem del cual conozcamos su dirección MAC.
Más información:
http://www.websec.mx/blog/ver/mac2wepkey_huawei
Este documento resume dos algoritmos de compresión sin pérdida: el algoritmo de Huffman y el algoritmo de Burrows-Wheeler. Explica que el algoritmo de Huffman construye códigos mediante un árbol de código, mientras que el algoritmo de Burrows-Wheeler trabaja en bloques y desorganiza la cadena de datos para comprimirla de manera más eficiente. Finalmente, concluye que estos algoritmos son útiles para comprimir archivos sin pérdida de información como texto, imágenes y audio.
Este documento describe los conceptos clave de la capa de enlace de datos en una red, incluyendo direccionamiento MAC, tramas, métodos para delimitar tramas como conteo de caracteres y relleno, y los campos comunes de una trama de enlace de datos como guión, dirección, control y redundancia. También menciona algunas tecnologías de red como Ethernet, Token Ring y FDDI.
Este documento resume diferentes códigos de codificación fuente como el código Huffman, código Lempel-Ziv y otros. Explica que la codificación fuente consiste en asignar códigos binarios a información como texto para su transmisión digital. Luego describe varios códigos comunes como Morse, Baudot, ASCII y más, explicando sus características. Finalmente, detalla los algoritmos de Huffman y Lempel-Ziv, incluyendo ejemplos de su funcionamiento.
Buscador de Eventos y Fiestas en España - Buscafiestaholabuscafiesta
Buscafiesta.es es el buscador líder en España para fiestas y eventos, diseñado para satisfacer las necesidades tanto de organizadores como de asistentes. Este innovador software ofrece una plataforma integral que permite a los organizadores de eventos añadir, gestionar y promocionar sus actividades de manera totalmente autónoma, facilitando la visibilidad y escalabilidad de sus eventos.
Buscafiesta.es no solo conecta a los organizadores con su público objetivo, sino que también ofrece herramientas de marketing y análisis que ayudan a maximizar el impacto de cada evento. Ya sea para una fiesta local, un concierto multitudinario o un evento corporativo, Buscafiesta.es es la solución definitiva para hacer de cada evento un éxito rotundo.
3. INTRODUCCIÓN
Los caracteres o símbolos se pueden representar en codificación en binario, lo
que nos permite realizar una comprensión de datos que facilita la transmisión
de los mismos y ahorra espacio de memoria. Es fundamental en la comprensión
de ficheros de video y audio.
Busca asociar las cadenas de código binario de los caracteres mas frecuentes a
cadenas de código binario de menor longitud, permitiendo ahorrar memoria.
4. ESPECIFICACIÓN DEL ALGORITMO
El algoritmo de Huffman, utiliza un código prefijo que es un conjunto de cadenas
binarias asociadas a un conjunto de símbolos.
Algo importante de recalcar es que una cadena binaria no debe ser parte del
comienzo de otra cadena binaria.
x 1100
x 01
y 10
* 101 Error
5. OBTENCIÓN DEL CÓDIGO PREFIJO
Un código prefijo se obtiene a partir de un árbol dirigido con raíz.
6. PASOS:
1. Se construye un árbol binario dirigido con raíz.
2. Se etiqueta el arco de salida izquierdo de cada vértice con 0, y el arco de
salida derecho con 1.
3. Los vértices finales o que tienen grado de salida 0, se les etiqueta con los
caracteres o símbolos.
0 10
7. 0 1
0 01 1
x * )
Grado de salida 0
0
0
1
1
(
y+
4. Recorro el árbol desde la raíz para obtener el código prefijo de cada carácter o símbolo.
x 01
( 001
y 0001
+ 0000
* 10
) 11
8. PROCESO DEL CÓDIGO HUFFMAN
1. Se obtiene las frecuencias de cada carácter o símbolo.
2. Se ordenan las frecuencias de menor a mayor en una lista.
3. Se localizan los dos valores más pequeños de la lista y estos forman un árbol donde la etiqueta de
la raíz será la suma de las frecuencias.
4. Se inserta en orden ascendente en la lista la suma de estos valores y se elimina los mismos.
(Repetir el paso 3 y 4 hasta solo quede un árbol).
5. Una vez obtenido el árbol, se procede a obtener los códigos prefijos.
9. EJEMPLO
Frecuencia de los caracteres:
Caracteres y j , * -
Frecuencia 5 10 25 3 20
Ordenar las Frecuencias:
3 5 10 20 25
Localizan los valores más pequeños de la lista:
3 5 10 20 25
15. PARA MÁS INFORMACIÓN
• Código del método Huffman:
• https://github.com/DavidValladarez/algoritmoHuffman
16. BIBLIOGRAFÍA
1. Jordan Lluch, C. (Dirección). (2013). Teoría de Grafos en la vida real. Árboles. Codificación de
Huffman [Video]. Link:
https://www.youtube.com/watch?v=W6WZT12ruGQ&feature=youtu.be
2. Salomon, D. (2014). Compresión de datos.