示例#1
0
 public void closureOneByOne(FcaMatrix matrix, FcaTree tree)
 {
     FcaObject nextObject = new FcaObject();
     FcaTree node;
     do
     {
         do
         {
             nextObject = matrix.getElemById(tree.getNextId() + 1);
             if (nextObject != null)
             {
                 FcaObjectSet q = new FcaObjectSet();
                 q = tree.getMainSet().clone();
                 q.closure(nextObject, matrix);
                 FcaObjectSet dif =q.difference(tree.getMainSet());
                 if (dif.minObject() == nextObject)
                 {
                     node = new FcaTree();
                     node.setMainSet(q);
                     listOfSets.Add(q);
                     node.setNextId(q.maxObject().getId());
                     node.setParent(tree);
                     tree.addDescendant(node);
                     listOfNodes.Add(node);
                     closureOneByOne(matrix, node);
                     tree.setNextId(nextObject.getId());
                 }
                 else
                 {
                     tree.setNextId(nextObject.getId());
                 }
             }
         } while (nextObject != null);
         if (tree.getParent() != null)
             tree = tree.getParent();
     } while ((tree.getParent() != null) && (nextObject != null));
 }
示例#2
0
 /// <summary>
 ///  Замыкание множества
 /// </summary>
 /// <param name="elem">добавляемый элемент</param>
 /// <param name="matrix">универсальное множество</param>
 public void closure(FcaObject elem, FcaMatrix matrix)
 {
     addObject(elem);
     int i = 0;
     int len = matrix.count();
     int[] vect = new int[this.attributes.Length];
     while (i < len){
         vect = intersect(matrix.getElemById(i).getAttributes());
         if (attrEquals(vect)&&(i!=elem.getId())) {
             addObject(matrix.getElemById(i));
         }
         i++;
     }
 }