Esempio n. 1
0
 public FcaObjectSet UltimateSet()
 {
     FcaObjectSet set = new FcaObjectSet();
     foreach (FcaObject obj in objects)
     {
         set.addObject(obj);
     }
     return set;
 }
Esempio n. 2
0
 /// <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;
 }
Esempio n. 3
0
        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());
                }
            }
        }
Esempio n. 4
0
 /// <summary>
 ///  Клонирует множество.
 /// </summary>
 /// <returns>Клон исходного множества.</returns>
 public FcaObjectSet clone()
 {
     FcaObjectSet newSet = new FcaObjectSet();
     foreach(FcaObject elem in this.objects)
             newSet.addObject(elem);
     return newSet;
 }