public static byte[] CompresionCompleta(byte[] ArchivoOriginal) { string NuevoCodigoDeCaracter; Dictionary <byte, int> Frecuencias = ObtenerFrecuencias(ArchivoOriginal); List <Nodo> ListadoLetras = ObtenerListaLetras(Frecuencias); colaDePrioridad <Nodo> colaLetraProridad = CrearColaPorPrioridad(ListadoLetras); Nodo NodoRaiz = ArbolCreacionHFF(colaLetraProridad); Dictionary <byte, string> CodigoCaracter = CreacionCodigoCaracter(NodoRaiz, out NuevoCodigoDeCaracter); MemoryStream EspacioMemoria = new MemoryStream(); BinaryWriter EscrituraBinaria = new BinaryWriter(EspacioMemoria); byte[] ArbolDeBytes = ConvertirArbolBytes(NodoRaiz); EscrituraBinaria.Write(ArbolDeBytes); byte[] ComprimirDatos = ObtenerArchivoComprimido(ArchivoOriginal, CodigoCaracter, NuevoCodigoDeCaracter); EscrituraBinaria.Write(ComprimirDatos); EscrituraBinaria.Flush(); return(EspacioMemoria.ToArray()); }
private static colaDePrioridad <Nodo> CrearColaPorPrioridad(List <Nodo> ListadoDeLetras) { colaDePrioridad <Nodo> ColaLetrasPrioridad = new colaDePrioridad <Nodo>(); foreach (Nodo Caracter in ListadoDeLetras) { ColaLetrasPrioridad.push(Caracter); } return(ColaLetrasPrioridad); }
private static Nodo ArbolCreacionHFF(colaDePrioridad <Nodo> colaletraPrioridad) { colaletraPrioridad.push(new Nodo(System.Byte.MinValue, 0, null, null, true)); while (colaletraPrioridad.contador != 1) { Nodo PrimerNodoCola = colaletraPrioridad.pop(); Nodo SegundoNodoCola = colaletraPrioridad.pop(); Nodo NuevoNodoArbol = new Nodo(System.Byte.MinValue, PrimerNodoCola.frecuencia + SegundoNodoCola.frecuencia, PrimerNodoCola, SegundoNodoCola, false); colaletraPrioridad.push(NuevoNodoArbol); } Nodo NodoRaizCola = colaletraPrioridad.pop(); return(NodoRaizCola); }