public FcaObjectSet UltimateSet() { FcaObjectSet set = new FcaObjectSet(); foreach (FcaObject obj in objects) { set.addObject(obj); } return set; }
/// <summary> /// Разность множеств. /// </summary> /// <param name="set">вычитаемое множество</param> /// <returns>результат вычитания</returns> public FcaObjectSet difference(FcaObjectSet set) { FcaObjectSet difSet = new FcaObjectSet(); List<FcaObject> objs = set.getObjects(); foreach (FcaObject elem in this.objects) { if (set.findElemById(elem.getId()) == -1) difSet.addObject(elem); } return difSet; }
public void buildLattice(FcaTree tree, FcaMatrix matrix) { FcaObjectSet A = new FcaObjectSet(); FcaObjectSet G = matrix.UltimateSet(); List<FcaObjectSet> sup = minimal(A, G, matrix); // множесво всех возможных соседей в решетке head = A; AllSets = tree.returnListOfSets(tree); int i = AllSetsContains(G); if (i == -1) { addAllSets(G); i = AllSetsContains(G); } tail = AllSets[i]; foreach (FcaObjectSet obj in sup) { i = AllSetsContains(obj); FcaObjectSet existObject = AllSets[i]; A.addASupr(existObject); existObject.addAInf(A); addVisited(existObject); } // найти связь между 1 и 123. while (Visited.Count != 0) { List<FcaObjectSet> list = Visited.ToList<FcaObjectSet>(); foreach (FcaObjectSet s in list) { sup = minimal(s, G, matrix); // множесво всех возможных соседей в решетке Visited.Remove(s); foreach (FcaObjectSet obj in sup) { i = AllSetsContains(obj); if (i == -1) { addAllSets(obj); i = AllSetsContains(obj); } FcaObjectSet existObject = AllSets[i]; s.addASupr(existObject); existObject.addAInf(s); addVisited(existObject); } } } foreach (FcaObjectSet set in AllSets) { FcaObjectSet check = new FcaObjectSet(); foreach (FcaObjectSet l in set.AInf) { foreach (FcaObject o in l.getObjects()) { check.addObject(o); } } if (!set.Equals(check)) { i = AllSetsContains(set); set.addAInf(tree.findInList(set).getParent().getMainSet()); } } }
/// <summary> /// Клонирует множество. /// </summary> /// <returns>Клон исходного множества.</returns> public FcaObjectSet clone() { FcaObjectSet newSet = new FcaObjectSet(); foreach(FcaObject elem in this.objects) newSet.addObject(elem); return newSet; }