Ejemplo n.º 1
0
        public string Comprimir(FileStream archivo, FileStream archivoGuardar)
        {
            StreamWriter documento = new StreamWriter(archivoGuardar);

            colaPrioridad = cola.insert(archivo);
            string codigoBinario = BynaryEncode(cola.arregloBytes, colaPrioridad);

            devolverASCII(codigoBinario);
            lineaArchivo = escribirArchivo(datosParaArchivo());
            documento.WriteLine(lineaArchivo);
            documento.Close();
            codigosBytePrefijo  = new Dictionary <byte, string>();
            cogdigosPrefijoByte = new Dictionary <string, byte>();
            return(lineaArchivo);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Este método recive un arreglo de bytes y por medio del algorítmo de Huffman
        /// comprime estos bytes a su correlativo en un prefijo de ceros y unos más peuqueño
        /// que el valor original.
        /// </summary>
        /// <param name="cadena">Arreglo de bytes, con el contenido del archivo, a ser comprimido</param>
        /// <returns> Retorna una cadena con el mensaje comprimido en ceros y unos </returns>
        public string BynaryEncode(List <byte> cadena, ColaED1 <NodoHuff <byte> > cola)
        {
            CrearArbol(cola);
            string resultado = "";

            foreach (var item in cadena)
            {
                resultado += codigosBytePrefijo[item];
            }


            /*int byteFaltante = resultado.Length % 8;
             * if (!(byteFaltante == 0))
             * {
             *  int caracteres = 8 - byteFaltante;
             *  for (int i = caracteres; i > 0; i--) resultado += "0";
             * }*/

            return(resultado);
        }
Ejemplo n.º 3
0
        private void CrearArbol(ColaED1 <NodoHuff <byte> > cola)
        {
            NodoHuff <byte> auxIzqu  = new NodoHuff <byte>();
            NodoHuff <byte> auxDer   = new NodoHuff <byte>();
            NodoHuff <byte> auxPadre = new NodoHuff <byte>();

            try
            {
                auxDer  = cola.Delete();
                auxIzqu = cola.Delete();

                //Esta validación o validar si el elemento de la cola auxDer es auxDer.FrePrio = 1
                if (auxIzqu == null)
                {
                    Raiz            = auxDer;
                    Raiz.Frecuencia = 1;
                    GenerarPrefijos();
                }
                else
                {
                    auxPadre.Frecuencia = auxDer.Frecuencia + auxIzqu.Frecuencia;
                    auxPadre.Derecho    = auxDer;
                    auxPadre.Inzquierdo = auxIzqu;

                    cola.Insert(auxPadre.Frecuencia, auxPadre);

                    CrearArbol(cola);
                }
            }
            catch (System.NullReferenceException ex)
            {
                Raiz            = auxDer;
                Raiz.Frecuencia = 1;
                GenerarPrefijos();
            }
        }