public Dependencia(IEnumerable <string> i, IEnumerable <string> j) { implicante = new ItemsSet <string>(); implicados = new ItemsSet <string>(); implicante.UnionWith(i); implicados.UnionWith(j); }
public HashSet <Dependencia> TestDependencias(HashSet <Dependencia> posiblesDependencias, double confianza = 0.2) { HashSet <Dependencia> respuesta = new HashSet <Dependencia>(); Dictionary <String, Int32> conteo = new Dictionary <string, int>(); foreach (FPNode node in headersTable.Values) { FPNode n = node; int i = 0; while (n != null) { i += node.Conteo; n = n.Siguiente; } conteo.Add(node.Contenido, i); } List <String> lista = conteo.ToList().OrderBy(c => c.Value).Select(c => c.Key).ToList(); int total = conteo.Sum(c => c.Value); conteo = null; Dictionary <ItemsSet <String>, int> soportes = new Dictionary <ItemsSet <string>, int>(); foreach (Dependencia dependencia in posiblesDependencias) { ItemsSet <String> dividendo = new ItemsSet <string>(); dividendo.UnionWith(dependencia.Implicante.Union(dependencia.Implicados)); if (!soportes.ContainsKey(dividendo)) { AgregarSoporte(lista, dividendo, soportes); } ItemsSet <String> divisor = new ItemsSet <string>(); divisor.UnionWith(dependencia.Implicante); if (!soportes.ContainsKey(divisor)) { AgregarSoporte(lista, divisor, soportes); } if ((soportes[dividendo] + 0.0) / (soportes[divisor] + 0.0) >= confianza) { respuesta.Add(dependencia); } } return(respuesta); }
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); }