Exemplo n.º 1
0
        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());
        }
Exemplo n.º 2
0
        private static colaDePrioridad <Nodo> CrearColaPorPrioridad(List <Nodo> ListadoDeLetras)
        {
            colaDePrioridad <Nodo> ColaLetrasPrioridad = new colaDePrioridad <Nodo>();

            foreach (Nodo Caracter in ListadoDeLetras)
            {
                ColaLetrasPrioridad.push(Caracter);
            }
            return(ColaLetrasPrioridad);
        }
Exemplo n.º 3
0
        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);
        }