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) }); }
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 }); }
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(); }