public void ArmarArbol(byte[] codigo) { counts = new Dictionary <byte, int>(); var coladeprioridad = new Coladeprioridad <HuffmanNode <T> >(); int cantvalores = Convert.ToInt32(codigo[0]); int bytes = Convert.ToInt32(codigo[1]) + 1; int frecuencia = 0; int probabilidad = 0; for (int i = 3; i < cantvalores * (bytes) + 2; i += bytes) { frecuencia = BitConverter.ToInt32(codigo, i); probabilidad += frecuencia; } for (int i = 2; i < cantvalores * bytes + 2; i += bytes) { frecuencia = BitConverter.ToInt32(codigo, i + 1); counts.Add(codigo[i], frecuencia); var node = new HuffmanNode <T>((double)frecuencia / probabilidad, codigo[i]); coladeprioridad.Enqueue(node.Probability, node); _leafDictionary[codigo[i]] = node; } while (coladeprioridad.contar > 1) { HuffmanNode <T> hijoizquieda = coladeprioridad.Dequeue(); HuffmanNode <T> rightSon = coladeprioridad.Dequeue(); var parent = new HuffmanNode <T>(hijoizquieda, rightSon); coladeprioridad.Enqueue(parent.Probability, parent); } _root = coladeprioridad.Dequeue(); }
public Huffman(IEnumerable <byte> values) { var coladeprioridad = new Coladeprioridad <HuffmanNode <T> >(); foreach (byte value in values) { if (!counts.ContainsKey(value)) { counts[value] = 0; } counts[value]++; valueCount++; } string palabras = ""; string conocer = ""; int repfrec = 1; foreach (byte value in counts.Keys) { conocer = counts[value].ToString(); if (conocer.Length > 1) { repfrec = conocer.Length; } } byte[] Bytesdevalores = new byte[1]; Bytesdevalores[0] = Convert.ToByte(counts.Count); var numvalores = Encoding.UTF8.GetString(Bytesdevalores); byte[] Bytesdecantidad = new byte[1]; Bytesdecantidad[0] = Convert.ToByte(repfrec); var numcantidad = Encoding.UTF8.GetString(Bytesdecantidad); foreach (byte value in counts.Keys) { palabras += value.ToString() + counts[value].ToString().PadLeft(repfrec, '0'); var node = new HuffmanNode <T>((double)counts[value] / valueCount, value); coladeprioridad.Enqueue(node.Probability, node); _leafDictionary[value] = node; } conoceri = numvalores + numcantidad + palabras; while (coladeprioridad.contar > 1) { HuffmanNode <T> hijoizquieda = coladeprioridad.Dequeue(); HuffmanNode <T> rightSon = coladeprioridad.Dequeue(); var parent = new HuffmanNode <T>(hijoizquieda, rightSon); coladeprioridad.Enqueue(parent.Probability, parent); } _root = coladeprioridad.Dequeue(); _root.IsZero = false; }
public byte[] Huff() { var coladeprioridad = new Coladeprioridad <HuffmanNode <T> >(); List <byte> palabras = new List <byte>(); //int conocer; //int repfrec = 1; //foreach (byte value in counts.Keys) //{ // conocer = counts[value]; // int cantidad = (conocer > 0xffffff || conocer < 0) ? 4 : (conocer < 0xffff) ? (conocer < 0xff) ? 1 : 2 : 3; // if (cantidad > repfrec) // { // repfrec = conocer; // } //} palabras.Add(Convert.ToByte(counts.Count)); palabras.Add(Convert.ToByte(4)); foreach (byte value in counts.Keys) { palabras.Add(value); palabras.AddRange(BitConverter.GetBytes(counts[value])); var node = new HuffmanNode <T>((double)counts[value] / valueCount, value); coladeprioridad.Enqueue(node.Probability, node); _leafDictionary[value] = node; } while (coladeprioridad.contar > 1) { HuffmanNode <T> hijoizquieda = coladeprioridad.Dequeue(); HuffmanNode <T> rightSon = coladeprioridad.Dequeue(); var parent = new HuffmanNode <T>(hijoizquieda, rightSon); coladeprioridad.Enqueue(parent.Probability, parent); } _root = coladeprioridad.Dequeue(); _root.IsZero = false; return(palabras.ToArray()); }
} //contar nodos que hay public Coladeprioridad(Coladeprioridad <T> x) { encolar.AddRange(x.encolar); // Clonar el objeto es un constructor (Sirve para la las colas auxiliares) Tamañoheap = x.Tamañoheap; //Clona el tamaño }