Exemple #1
0
        public void Compresion(IFormFile file, string nombre)
        {
            ArbolHuffman.Comprimir(file, nombre);

            var newFile = new FileInfo(Path.Combine(Environment.CurrentDirectory, "compress", $"{nombre}.huff"));

            NodoArchivo.ManejarCompressions(
                new NodoArchivo
            {
                Algoritmo        = "Huffman",
                NombreOriginal   = file.FileName,
                Nombre           = $"{nombre}.huff",
                RutaArchivo      = Path.Combine(Environment.CurrentDirectory, "compress", $"{nombre}.huff"),
                RazonCompresion  = (double)newFile.Length / (double)file.Length,
                FactorCompresion = (double)file.Length / (double)newFile.Length,
                Porcentaje       = 100 - (((double)newFile.Length / (double)file.Length) * 100)
            });
        }
Exemple #2
0
        public void Desompresion(IFormFile file)
        {
            var Archivos = NodoArchivo.CargarHistorial();

            var Original = Archivos.Find(c => Path.GetFileNameWithoutExtension(c.Nombre) == Path.GetFileNameWithoutExtension(file.FileName));

            var path = ArbolHuffman.Descomprimir(file, Original.NombreOriginal);

            var newFile = new FileInfo(path);

            NodoArchivo.ManejarCompressions(
                new NodoArchivo
            {
                Algoritmo        = "Huffman",
                NombreOriginal   = Original.NombreOriginal,
                Nombre           = file.FileName,
                RutaArchivo      = path,
                RazonCompresion  = 0,
                FactorCompresion = 0,
                Porcentaje       = 0
            });
        }
Exemple #3
0
        public static void Main(string[] args)
        {
            Dictionary <char, int> TablaFrecuencia = new Dictionary <char, int>();
            List <Nodo>            ListaAOrdenar   = new List <Nodo>();
            Dictionary <char, int> TablaOrdenada   = new Dictionary <char, int>();
            Stack <Nodo>           PilaOrdenada    = new Stack <Nodo>();
            ArbolHuffman           arbol           = new ArbolHuffman();

            string[] Text = { "ABRACADABRA" };
            var      i    = 0;

            char[] Linea      = Text[i].ToCharArray();
            var    pos        = 0;
            var    TOTAL      = 0;
            double Caracteres = 0;

            //Llenar Diccionario
            while (pos < Linea.Length)
            {
                if (TablaFrecuencia.ContainsKey(Linea[pos]) == true)
                {
                    var Frecuencia = TablaFrecuencia[Linea[pos]] + 1;
                    TablaFrecuencia.Remove(Linea[pos]);
                    TablaFrecuencia.Add(Linea[pos], Frecuencia);
                }
                else
                {
                    TablaFrecuencia.Add(Linea[pos], 1);
                }
                pos++;
                Caracteres++;
            }

            //Insertando a Lista
            foreach (var item in TablaFrecuencia)
            {
                Nodo Temp = new Nodo();
                Temp.data.Caracter      = item.Key;
                Temp.data.Frecuencia    = item.Value;
                Temp.data.Probabilidad  = (Convert.ToDouble(item.Value) / Caracteres);
                Temp.data.CodigoPrefijo = "";
                ListaAOrdenar.Add(Temp);
            }

            //Ordenando Lista Probabilidad para recorrido
            IEnumerable <Nodo> OrdenarLista = ListaAOrdenar.OrderBy(Probabilidad => Probabilidad.data.Probabilidad);

            foreach (var item in OrdenarLista)
            {
                TablaOrdenada.Add(item.data.Caracter, item.data.Frecuencia);
            }

            //Ordenando Pila Crear ArbolHuffman
            PilaOrdenada = arbol.Ordenar(ListaAOrdenar);
            arbol.CrearArbol(PilaOrdenada);

            //Obtener caracter y CodigoPrefijo Compresion

            Nodo Temp1 = new Nodo();

            Temp1 = arbol.Retornar();

            arbol.InOrden(Temp1);



            //Retonar el total de caracteres en el texto
            Console.WriteLine("El tamaño del texto es:" + Caracteres.ToString());
            Console.ReadLine();
        }