最基本的:即,第一列属性去掉后,随后余下的属性进行查询时,相同的条件属性的决策属性没有冲突,则说明去掉第一列并没有不一致的数据产生,则说明第一列可去掉,如此循环,直到所有的决策属性都被判断完毕
说是很简单,但是实现起来细节问题很多,思路如下:
从第一个属性开始循环,直至最后一个条件属性,用余下的条件属性进行查询,分如下情况:
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,注意语句的位置
粗糙集属性约简算法的源程序
5星 · 超过95%的资源 需积分: 50 107 浏览量
2009-11-15
17:51:15
上传
评论 3
收藏 1KB RAR 举报
cucaojizhishi
- 粉丝: 0
- 资源: 6
最新资源
- C语言基础-C语言编程基础之Leetcode编程题解之第30题串联所有单词的子串.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第29题两数相除.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第28题找出字符串中第一个匹配项的下标.zip
- 实验报告模板(1).docx
- C语言基础-C语言编程基础之Leetcode编程题解之第26题删除有序数组中的重复项.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第25题K个一组翻转链表.zip
- hnu计算机系统作业-计算机系统基础课程大作业.zip
- 树莓派app.apk
- C++的基于同态加密技术的匿名电子投票系统源码.zip
- SW建模格式图.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈