algoritmo voraz: cómo lograr la compresión Huffman con el algoritmo codicioso?

algoritmo voraz: cómo lograr la compresión Huffman con el algoritmo codicioso?

algoritmo voraz (algoritmo voraz) Hay muchas aplicaciones clásicas, la codificación Huffman, Prim y Kruskal expansión mínima algoritmo de árbol, así como de una sola fuente más corto algoritmo del camino Dijkstra, cómo utilizar el algoritmo voraz para lograr la compresión de datos eficiente codificación de datos para ahorrar espacio en la memoria?

Cómo entender el "algoritmo voraz"?

Supongamos que tenemos una mochila puede contener 100 kg elementos, los siguientes cinco tipos de frijoles, y la cantidad total del valor total de cada uno de los diferentes granos, con el fin de hacer que el valor total de los bienes carga máxima mochila, cómo elegir y cuánto de él cargada?

artículo La cantidad total (kg) El valor total de la (Yuan)
haba de soja 100 100
ejotes 30 90
frijoles rojos 60 120
frijoles negros 20 80
ejotes 50 75

Sólo para calcular el precio por artículo, dispuestos en orden descendente de acuerdo con el precio unitario para ser instalado, frijoles negros, judías verdes, frijoles rojos, guisantes, habas de soja. Así es el frijol negro de 20 kg, 30 kg de judías verdes, judías rojas 50kg, esta idea es un algoritmo voraz

  • Cuando vea este tipo de problemas cuando se piensa en el algoritmo voraz: un conjunto de datos, definimos los límites y expectativas, con la esperanza de elegir el número de datos, mientras que el cumplimiento del valor límite, el valor máximo previsto. Valor no exceda el límite de peso es de 100 kg, el valor total de las expectativas es el más grande
  • Trate de tomar con el algoritmo voraz para resolver: cada selección en las actuales circunstancias, en el caso del valor límite igual a la cantidad de la contribución, la mayor contribución a los datos de valores esperados. Justo en el interior es del resto de los granos, seleccione el precio más alto, es decir, el mismo peso, la mayor contribución al valor de los granos
  • Los resultados dan algunos ejemplos para ver si el algoritmo codicioso produce óptima.

En un dibujo de la derecha, a partir de los s de vértice, encontrar el camino más corto hasta el ápice T de (el peso de los bordes y un valor mínimo), el algoritmo es Soluciones codiciosos: cada vez que una selección está conectada a la derecha con las actuales vértices de borde mínimo hasta encontrar el vértice. Pero no es el camino más corto, no porque el algoritmo voraz hace el trabajo está en frente de la elección influirá en la elección de este último, por lo que incluso el primer paso en la selección de los mejores movimientos (lado más corto) puede resultar perdido el óptimo global

análisis real algoritmo Greedy

1. A partir de caramelo

M y n tienen los niños de caramelo, si m <n, sólo se puede asignar a una parte de los dulces niño, tamaño caramelo de cada gama, el tamaño de la m caramelo son s1, s2, s3 ...... sm, cada pocillo la demanda de caramelo de tamaño infantil no es la misma, sólo el tamaño de los dulces es mayor que la demanda para el caramelo de tamaño infantil cuando los niños pueden reunirse, suponiendo que la demanda de dulces n niños tamaños son g1, g2 ...... gn

Cómo distribuir dulces para satisfacer el mayor número de niños posible?

N se abstrae de que el niño, el niño para extraer una parte del número de dispensar caramelo hacer que los niños Satisfacer (valor esperado) valor máximo límite es el número de caramelo m

Cada vez que encuentre por encima del resto de los niños en los requisitos de tamaño mínimo dulces, entonces lo envió a conocer al resto de los dulces de caramelo en su mínimo, máximo número de este tipo de programas para satisfacer los niños de

2. monedas dan cambio

Supongamos que tenemos 1 ¥, 2 ¥, 5 ¥, 10 ¥, 20 ¥, 50 ¥, 100 ¥, su número de hojas son c1, c2, c5, c10, c20, c50, c100, ahora utilizar ese dinero k ¥ pago, el número de cuentas están al menos lo ha tomado?

Al mismo contribución del valor esperado (el número de billetes), con la esperanza de multi-punto montos de las contribuciones, se puede hacer el menor número de cuentas

3. La cobertura de intervalo

Tiene N secciones, las secciones sobre los puntos finales punto y final de partida son [L1, R1], [L2, R2], [L3, R3], ...... [ln, rn], para seleccionar una porción de la n-ésima intervalo desde el intervalo esta parte de la gama para satisfacer mutuamente disjuntos (el punto final no es intersección se cruzan), el número de intervalos de hasta elegido?

区间:                     [6,8]   [2,4]  [3,5]  [1,5]   [5,9]  [8,10]
不相交区间:      [2,4]   [6,8]  [8,10]

La idea es resolver el problema: Se asume que el intervalo de punto de n más a la izquierda es l min, Rmax del punto más a la derecha, el problema es equivalente a seleccionar varios intervalos disjuntos, la de izquierda a derecha [Lmin, rmax] en la cubierta, desde pequeñas a grandes orden de estos intervalos n ordenadas según iniciar el punto final, cada vez que seleccione un punto con la izquierda ha estado cubriendo la sección frontal no se traslapan, y el punto extremo derecho tan pequeño como sea posible, lo que permitiría a los restantes sin cubrir gama lo más grande posible se puede colocar más rango

¿Cómo lograr la codificación Huffman con el algoritmo codicioso?

Hay un archivo de 1.000 caracteres que contiene 1 byte por carácter (1 byte = 8 bits), que almacenan un total de 1.000 caracteres necesita 8000bits, no hay manera más ahorro de espacio para almacenarlo?

Este 1000 caracteres contiene sólo seis caracteres diferentes, siempre que sean a, b, c, d, e, f y 3 bits (bits) puede representar ocho caracteres diferentes, con el fin de reducir el espacio de almacenamiento, cada utilizamos trozos de tres caracteres, dijo que la necesidad de almacenar este 1000 caracteres sólo pueden 3000bits

a(000) , b(001) , c(010) ,d(011) , e(100) , f(101)

La codificación de Huffman no sólo examinar el texto en el número de caracteres diferentes, sino también examinar la frecuencia de ocurrencia de cada personaje, en función de la frecuencia, seleccione la codificación de diferentes longitudes, cómo elegir la codificación de caracteres de diferentes longitudes a diferentes frecuencias? La mayor frecuencia de ocurrencia de caracteres con un poco más corto, que codifica un poco más largo se produce caracteres de uso menos frecuente

tiempo de descompresión, cada lectura del texto del código binario de 3 bits, entonces se puede traducir, pero la codificación de Huffman son de longitud desigual, cada uno debe tener uno, dos, o tres que? Para ambigüedad EVITAR, la codificación de Huffman requiere un código es otro código de prefijo no sucede entre cada codificación de caracteres

011  010  100  011  101  001
 d       c         e      d        f      b

Se supone que la frecuencia de aparición de los caracteres de seis orden descendente son a, b, c, d, e, f, que las codifican para parecerse a esto, cualquier código de caracteres no es un prefijo de otro, descompresor cuando leemos el mayor tiempo posible puede extraer la cadena binaria, después de esta codificación de compresión, 1000 caracteres sólo requieren 2100bits en él

carácter Frecuencia de ocurrencia codificación El número total de binario
un 450 1 450
si 350 01 700
C 90 001 270
re 60 0001 240
mi 30 00001 150
F 20 00000 100

Cómo codificarlo diferentes longitudes dependiendo de carácter diferente a la frecuencia de aparición de caracteres?

Cada carácter visto como un nodo, y entra en la frecuencia de la cola de prioridad, la frecuencia mínima extrajo dos nodos A, B de la cola, a continuación, un nuevo nodo C, la frecuencia se establece en dos frecuencias nodos y y el nodo C como el a, B del nodo padre, la C pone en la cola de prioridad, se repite hasta que no hay datos en la cola, y finalmente formar un carácter general. Videos a cada borde más un valor de peso, que apuntan al nodo hijo izquierdo todos los bordes están etiquetados 0, los números se refieren a la parte derecha de un nodo hijo, entonces el camino desde la raíz hasta el nodo de hoja de Huffman es un nodo hoja correspondiente al carácter codificación

p

ka (1)

ZB (01)

incluyendo (001)

xd (0001)

f (00.000) e (00001)

1. En unos números enteros no negativos a, k retirado de dígitos, por lo que el resto del valor digital de la mínima, cómo elegir qué números de K para eliminarlo?

Los números enteros a, por un número de dígitos, empezaron a ser retirado de la alta, retire el más grande que sus números altos dígito inferior: ciclos K, que significa a partir de más alto nivel, un número relativamente bajo, si cambio alto grande Además, pequeña altura, justo al lado de un bit para seguir comparando los tiempos de ciclo K

Por ejemplo, 4556847594546 -> Primera 455647594546 -> Segundo 45547594546 -> Tercera 4547594546 -> Cuarto 447594546-> Quinto 44594546

2. n esperando a ser un servicio personal, pero la ventana es diferente longitud de tiempo que cada persona necesita para ser atendidos, la forma de organizar el orden que se sirve, para hacer un total de n personal menor tiempo de espera?

El tiempo de espera más corto que empieza el servicio

Publicado 75 artículos originales · ganado elogios 9 · vistas 9184

Supongo que te gusta

Origin blog.csdn.net/ywangjiyl/article/details/104537624
Recomendado
Clasificación