public void OrdenarCola(Queue <nodoColaPrioridad <T> > cola) { int o = 0; nodoColaPrioridad <T>[] vector = new nodoColaPrioridad <T> [cola.Count]; for (int i = 0; cola.Count != 0; i++) { vector[i] = cola.Dequeue(); o++; } for (int i = 0; i < vector.Length; i++) { for (int j = i + 1; j < vector.Length; j++) { if (vector[j].valor.frecuencia < vector[i].valor.frecuencia) { nodoColaPrioridad <T> aux = new nodoColaPrioridad <T>(); aux = vector[i]; vector[i] = vector[j]; vector[j] = aux; } } } for (int i = 0; i < o; i++) { cola.Enqueue(vector[i]); } }
public void crearArbol(Queue <nodoColaPrioridad <T> > cola) { while (cola.Count > 1) { nodoColaPrioridad <T> aux = new nodoColaPrioridad <T>(); nodoColaPrioridad <T> nuevo = new nodoColaPrioridad <T>(); aux = cola.Dequeue(); nuevo = crearNodo(aux, cola.Dequeue()); cola.Enqueue(nuevo); OrdenarCola(cola); crearArbol(cola); } if (cola.Count == 1) { head = cola.Dequeue(); } }
public void ObtenerTablaGeneral() { pila.Clear(); prefijos.Clear(); foreach (var item in diccionario) { Valor val = new Valor(); nodoColaPrioridad <T> nuevo = new nodoColaPrioridad <T>(); nuevo.valor = val; nuevo.valor.frecuencia = item.Value; nuevo.valor.letra = item.Key; pila.Enqueue(nuevo); } OrdenarCola(pila); crearArbol(pila); asignarPrefijos(head); }
public nodoColaPrioridad <T> crearNodo(nodoColaPrioridad <T> n1, nodoColaPrioridad <T> n2) { nodoColaPrioridad <T> nuevo = new nodoColaPrioridad <T>(); Valor val = new Valor(); nuevo.valor = val; nuevo.valor.frecuencia = n1.valor.frecuencia + n2.valor.frecuencia; nuevo.valor.letra = 0; n1.padre = nuevo; n2.padre = nuevo; if (n1.valor.frecuencia > n2.valor.frecuencia) { nuevo.hijoDer = n2; nuevo.hijoIzq = n1; } else { nuevo.hijoDer = n1; nuevo.hijoIzq = n2; } return(nuevo); }
public void asignarPrefijos(nodoColaPrioridad <T> raiz) { if (raiz == head) { if (head.hijoIzq != null && head.hijoDer != null) { raiz.hijoIzq.prefijo = "0"; raiz.hijoDer.prefijo = "1"; if (raiz.hijoIzq.valor.letra != 0) { if (!prefijos.ContainsKey(raiz.hijoIzq.valor.letra)) { prefijos.Add(raiz.hijoIzq.valor.letra, raiz.hijoIzq.prefijo); } } if (raiz.hijoDer.valor.letra != 0) { if (!prefijos.ContainsKey(raiz.hijoDer.valor.letra)) { prefijos.Add(raiz.hijoDer.valor.letra, raiz.hijoDer.prefijo); } } asignarPrefijos(raiz.hijoDer); asignarPrefijos(raiz.hijoIzq); } if (head.hijoIzq != null && head.hijoDer == null) { raiz.hijoIzq.prefijo = "0"; if (raiz.hijoIzq.valor.letra != 0) { if (!prefijos.ContainsKey(raiz.hijoIzq.valor.letra)) { prefijos.Add(raiz.hijoIzq.valor.letra, raiz.hijoIzq.prefijo); } } asignarPrefijos(raiz.hijoIzq); } if (head.hijoIzq == null && head.hijoDer != null) { raiz.hijoDer.prefijo = "1"; if (raiz.hijoDer.valor.letra != 0) { if (!prefijos.ContainsKey(raiz.hijoDer.valor.letra)) { prefijos.Add(raiz.hijoDer.valor.letra, raiz.hijoDer.prefijo); } } asignarPrefijos(raiz.hijoDer); } } else { if (raiz.hijoDer != null && raiz.hijoIzq != null) { raiz.hijoDer.prefijo = raiz.prefijo + "1"; raiz.hijoIzq.prefijo = raiz.prefijo + "0"; if (raiz.hijoIzq.valor.letra != 0) { if (!prefijos.ContainsKey(raiz.hijoIzq.valor.letra)) { prefijos.Add(raiz.hijoIzq.valor.letra, raiz.hijoIzq.prefijo); } } if (raiz.hijoDer.valor.letra != 0) { if (!prefijos.ContainsKey(raiz.hijoDer.valor.letra)) { prefijos.Add(raiz.hijoDer.valor.letra, raiz.hijoDer.prefijo); } } asignarPrefijos(raiz.hijoDer); asignarPrefijos(raiz.hijoIzq); } if (raiz.hijoDer != null && raiz.hijoIzq == null) { raiz.hijoDer.prefijo = raiz.prefijo + "1"; if (raiz.hijoDer.valor.letra != 0) { if (!prefijos.ContainsKey(raiz.hijoDer.valor.letra)) { prefijos.Add(raiz.hijoDer.valor.letra, raiz.hijoDer.prefijo); } } asignarPrefijos(raiz.hijoDer); } if (raiz.hijoDer == null && raiz.hijoIzq != null) { raiz.hijoIzq.prefijo = raiz.prefijo + "0"; if (raiz.hijoIzq.valor.letra != 0) { if (!prefijos.ContainsKey(raiz.hijoIzq.valor.letra)) { prefijos.Add(raiz.hijoIzq.valor.letra, raiz.hijoIzq.prefijo); } } asignarPrefijos(raiz.hijoIzq); } } }