예제 #1
0
 void UpdateCounts(pairID col, int location)
 {
     for (var i = 0; i < _counts.Count; i++)
     {
         for (var j = 0; j < _counts[i].Count; j++)
         {
             if ((i == col.AID) && (j == col.VID))
             {
                 //Khi remove thì count=-1
                 _counts[i][j] = -1;
                 continue;
             }
             if (_pairs[location].data[i][j])
             {
                 _counts[i][j]--;
             }
         }
     }
 }
예제 #2
0
 //Chọn ra thuộc tính còn nhiều nhát cắt nhất
 private pairID Select(pairID a,pairID b)
 {
     var counta = _counts[(int)a.AID].Count;
     var countb = _counts[(int)b.AID].Count;
     foreach (var c in _counts[(int)a.AID])
     {
         if (c <= -1) counta--;
     }
     foreach (var c in _counts[(int)b.AID])
     {
         if (c <= -1) countb--;
     }
     //<: chọn thuộc tính có nhiều nhát cắt nhất
     //>: chọn thuộc tính có ít nhát cắt nhất
     if (counta < countb)
         return b;
     return a;
 }
예제 #3
0
 //Xóa các pair phân biệt được bởi các thuộc tính rời rạc
 void RemoveDiscretedItems()
 {
     for (int x = 0; x < ConditionList.Count; x++)
     {
         for (var j = 0; j < ConditionList[x].MappedTable.Count; j++)
         {
             if (ConditionList[x].IsDiscreted)
             {
                 var col = new pairID(x, j);
                 for (var i = 0; i < _pairs.Count; i++)
                 {
                     if (_pairs[i].data[(int)col.AID][(int)col.VID])
                     {
                         UpdateCounts(col, i);
                         _pairs.RemoveAt(i);
                         i--;
                     }
                 }
             }
         }
     }
 }
예제 #4
0
 void run()
 {
     _solution=new List<pairID>();
     while (_pairs.Count != 0)
     {
        // Console.WriteLine("Pair: "+_pairs.Count);
         int AID=0, VID=0;
         FindColumn(ref AID, ref VID);
         var col = new pairID(AID, VID);
         for (var i = 0; i < _pairs.Count; i++)
         {
             if (_pairs[i].data[(int)col.AID][(int)col.VID])
             {
                 UpdateCounts(col, i);
                 _pairs.RemoveAt(i);
                 i--;
             }
         }
         _solution.Add(col);
     }
 }
예제 #5
0
 public bool IsEqual(pairID p)
 {
     return (p.AID == AID) && (p.VID == VID);
 }