正文

粗糙集的属性约简2008-02-23 22:01:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/daweizhao/32895.html

分享到:

粗糙集的属性约简规则如下,数据如下所示: a1 b1 c1 d1a1 b2 c1 d2a2 b3 c2 d3a1 b2 c3 d3a1 b1 c3 d3a1 b3 c1 d3a1 b4 c1 d1 最基本的:即,第一列属性去掉后,随后余下的属性进行查询时,相同的条件属性的决策属性没有冲突,则说明去掉第一列并没有不一致的数据产生,则说明第一列可去掉,如此循环,直到所有的决策属性都被判断完毕 说是很简单,但是实现起来细节问题很多,思路如下: 从第一个属性开始循环,直至最后一个条件属性,用余下的条件属性进行查询,分如下情况: if(在DB中无相同的条件属性) 则说明根本不可能产生不一致数据的机会,此属性可去掉 if(有相同的条件属性)则找出相应的决策属性,判断是否相等{     if(决策属性相等) 则说明相同的条件属性并没有产生不同的决策属性,可去掉     if(决策属性不相等) 则说明相同的条件属性产生了不同的决策,不可去掉(此属性起关键作用) } 问题: 判断一个Vector中的重复元素,并计算重复次数,并判断重复次数是否过半数以上,如下方法:  public boolean getSymbol(Vector<String> decisionProperty) {  boolean isFlag = false;  int length = decisionProperty.size();  Vector<String> distinctDecProperty = new Vector<String>();  Vector<Boolean> flag = new Vector<Boolean>();  int i = 0;  while (i < length) {   flag.add(true);   i++;  }  for (int j = 0; j < length; j++) {   i = j + 1;   int n = 1;   while (i < length) {    if (flag.get(i) == true) {     if (decisionProperty.get(j).equals(decisionProperty.get(i))) {      flag.set(i, false);      n++;     } else {      i++;     }    } else {     i++;    }   }   if (flag.get(j) == true) {    distinctDecProperty.add(decisionProperty.get(j));   }   if (n >= length / 2) {    isFlag = true;   }  }  if (distinctDecProperty.size() == decisionProperty.size()){   isFlag = false;  }  System.out.println(distinctDecProperty + "  " + decisionProperty);  return isFlag; } 以上代码为实现此功能的原程序,并不单单仅实现了此功能 需要注意的是,多设置了一个VECTOR型flag,用来标志重复的元素,若为flase,则说明已经和之前比较过的数据重复了,可不用比较。这样,用空间来换取了一定的时间复杂度。 还有distinctDecProperty是最后的没有重复的元素的VECTOR,注意语句的位置 今天的时间,一些花在resultset的结果如何判断为空上,还有是VECTOR的去重,属性约简思路的整理,和程序细节上,感觉仅仅写算法比用程序真正实现容易多了,:( 有的时候做多了,自己的脑子就浆糊了,抱怨下,:( 可能还有没有想到的,想起了再补充

阅读(4275) | 评论(1)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册