public ColaED1 <NodoHuff <byte> > leerArchivo(string fileArchivo)
        {
            fileArchivo = fileArchivo.Substring(0, fileArchivo.Length - 2);
            System.Text.ASCIIEncoding codificador = new System.Text.ASCIIEncoding();
            byte[] bytesLinea = codificador.GetBytes(fileArchivo);

            int noValores = bytesLinea[0];
            int noBytes   = bytesLinea[1];

            for (int i = 2; i <= (noValores * noBytes) + 1; i++)
            {
                contador = contador + bytesLinea[i + 1];
                i++;
            }

            for (int i = 2; i <= (noValores * noBytes) + 1; i++)
            {
                NodoHuff <byte> nodoH = new NodoHuff <byte>();
                nodoH.Value      = bytesLinea[i];
                nodoH.ProbPrio   = bytesLinea[i + 1];
                nodoH.Frecuencia = Decimal.Divide(nodoH.ProbPrio, contador);
                colaPrioridad.Insert(nodoH.Frecuencia, nodoH);
                i++;
            }

            for (int i = (noValores * noBytes) + 2; i < bytesLinea.Length; i++)
            {
                cadenaBytes.Add(bytesLinea[i]);
                cadenaB += Convert.ToChar(bytesLinea[i]);
            }

            colaPrioridad.ordenar();
            return(colaPrioridad);
        }
Exemple #2
0
        public ColaED1 <NodoHuff <byte> > insert(FileStream archivo)
        {
            archivo.Position = 0;
            using var reader = new BinaryReader(archivo);
            var buffer = new byte[2000000];

            while (archivo.Position < archivo.Length)
            {
                buffer = reader.ReadBytes(2000000);
                evaluarCadena(buffer);
                devolverBytes(buffer);
            }
            reader.Close();
            archivo.Close();

            for (int i = 0; i < colaPrioridad.Count; i++)
            {
                NodoHuff <byte> nodoHuffman = new NodoHuff <byte>();
                nodoHuffman.Value      = colaPrioridad[i].valor;
                nodoHuffman.Frecuencia = Decimal.Divide(colaPrioridad[i].prioridad, contador);
                nodoHuffman.ProbPrio   = colaPrioridad[i].prioridad;
                priorityQueue.Insert(nodoHuffman.Frecuencia, nodoHuffman);
            }
            priorityQueue.ordenar();
            return(priorityQueue);
        }
        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();
            }
        }