public HashSet <ItemsSet <String> > FPGrow(int epsilon, List <String> previos = null) { //si previos es default if (previos == null) { //instancia a previos previos = new List <string>(); } //crea el conjuto de respuesta HashSet <ItemsSet <String> > respuesta = new HashSet <ItemsSet <string> >(); //para cada item en el arbol foreach (KeyValuePair <string, FPNode> entry in headersTable) { //obtiene su nodo inicial FPNode node = entry.Value; //crea un nuevo set de items ItemsSet <String> items = new ItemsSet <string>(); //agrega los los items previos que se han hecho y an llevado a esta instancia de arbol items.UnionWith(previos); //agrega el nodo que se esta evaluando items.Add(node.Contenido); //agrega a la respueta el set de items respuesta.Add(items); //crea una copia de los previos List <String> nueva = Extenciones.Clone <String>(previos); //agrega el actual nueva.Add(node.Contenido); //genera el arbol condicional para el item actual FPTree conditional = GetConditional(node, epsilon); //llama recursivamente sobre el arbol condicional y une las respuestas respuesta.UnionWith(conditional.FPGrow(epsilon, nueva)); } return(respuesta); }
public HashSet <Dependencia> FunctionalDependeciesWithFPGrow(double confianza = 0.2) { if (confianza < 0 || confianza > 1) { throw new ArgumentOutOfRangeException(); } if (tree == null) { throw new Exception("tree is null"); } HashSet <ItemsSet <String> > result = tree.FPGrow(epsilon); HashSet <Dependencia> posiblesDependencias = new HashSet <Dependencia>(); foreach (ItemsSet <String> i in result) { if (i.Count > 1) { posiblesDependencias.UnionWith(generarDependencias(i)); } } HashSet <Dependencia> dependencias = tree.TestDependenciasV2(posiblesDependencias, confianza); HashSet <Dependencia> dependenciasNombre = new HashSet <Dependencia>(); Dictionary <string, string> dic = new Dictionary <string, string>(); StreamReader lector = new StreamReader("productos.txt"); string linea = lector.ReadLine(); while (linea != null) { string[] array = linea.Split('|'); dic.Add(array[0], array[1].Substring(1, array[1].Length - 1)); linea = lector.ReadLine(); } foreach (Dependencia d in dependencias) { ItemsSet <string> implicantes = d.Implicante; ItemsSet <String> implicantesNombre = new ItemsSet <string>(); foreach (string i in implicantes) { string value = ""; dic.TryGetValue(i, out value); implicantesNombre.Add(value); } ItemsSet <string> implicadosNombre = new ItemsSet <string>(); ItemsSet <string> implicados = d.Implicados; foreach (string idos in implicados) { string value = ""; dic.TryGetValue(idos, out value); implicadosNombre.Add(value); } Dependencia depen = new Dependencia(implicantesNombre, implicadosNombre); dependenciasNombre.Add(depen); } //return dependencias; //StringBuilder sb = new StringBuilder(); //using (StreamWriter writer = new StreamWriter(ruta)) //{ // foreach (Dependencia d in dependencias) // { // foreach (String s in d.Implicante) // { // sb.Append(s); // sb.Append(itemSeparator); // } // sb.Remove(sb.Length - 1, 1); // sb.Append(dependencySeparator); // foreach (String s in d.Implicados) // { // sb.Append(s); // sb.Append(itemSeparator); // } // sb.Remove(sb.Length - 1, 1); // writer.WriteLine(sb.ToString()); // sb.Clear(); // } //} return(dependenciasNombre); }