public List <TreeElements> OrdenamientoDelDiccionario(Dictionary <char, charCount> diccionario, List <TreeElements> ListaProbabilidades, List <byte> ListaByte) { //se ordenará por orden ascendente la lista var sorted = from entrada in diccionario orderby entrada.Value ascending select entrada; //se introducirán los porcentajes de los caracteres en la tabla foreach (var caracter in sorted) { TreeElements elemento = new TreeElements(); double aux = (Convert.ToDouble(caracter.Value.cantidad)); elemento.character = caracter.Key; elemento.probability = Convert.ToDouble((aux / ListaByte.Count())); ListaProbabilidades.Add(elemento); } ListaProbabilidades.Sort(); return(ListaProbabilidades); }
public Node TreeCreation(List <TreeElements> lista) { Tree Auxiliar = new Tree(); Node Aux = new Node(); Node izquierdo = new Node(); Node derecho = new Node(); int Repeticiones = lista.Count(); for (int i = 0; i < Repeticiones; i++) { if (lista.Count < 2) { break; } else { Auxiliar = new Tree(); Aux = new Node(); izquierdo = new Node(); derecho = new Node(); string nombre = "n" + (i + 1); if (lista[0].Aux == null && lista[1].Aux == null) { //hijo izquierdo izquierdo.character = Convert.ToString(lista[0].character); izquierdo.probability = lista[0].probability; //hijo derecho derecho.character = Convert.ToString(lista[1].character); derecho.probability = lista[1].probability; } else { if (lista[0].Aux != null && lista[1].Aux == null) { //hijo izquierdo izquierdo = lista[0].Aux; //hijo derecho derecho.character = Convert.ToString(lista[1].character); derecho.probability = lista[1].probability; } else { if (lista[0].Aux == null && lista[1].Aux != null) { //hijo izquierdo izquierdo.character = Convert.ToString(lista[0].character); izquierdo.probability = lista[0].probability; //hijo derecho derecho = lista[1].Aux; } else { //hijo izquierdo izquierdo = lista[0].Aux; //hijo derecho derecho = lista[1].Aux; } } } lista.Remove(lista[0]); lista[0] = null; Aux = Auxiliar.insert(izquierdo, derecho, nombre); TreeElements elemento = new TreeElements(); elemento.Aux = Aux; elemento.probability = Aux.probability; if (lista.Count() > 1) { for (int j = 1; j < lista.Count(); j++) { if (lista[j].probability > elemento.probability) { lista[j - 1] = elemento; break; } else { lista[j - 1] = lista[j]; lista[j] = null; if (lista[lista.Count() - 1] == null) { lista[lista.Count() - 1] = elemento; } } } } else { lista[0] = elemento; } } } return(lista[0].Aux); }
public int CompareTo(object obj) { TreeElements compareToObj = (TreeElements)obj; return(this.probability.CompareTo(compareToObj.probability)); }