我必须在朋友的课堂项目中实现NBC(用于在提供的数据集中查找集群)算法。我们遇到了一个很奇怪的问题。辅助函数很少,有问题的是kNB.h文件中的kNN(也可能是kEN)。在从程序的主函数传递参数(例如k = 3和p = 5)之后,它进入kNN函数并开始随机改变k和p的值,即使函数代码不应该这样做你可以在任何地方看到。
此外,在使用调试模式并逐步完成此功能时,我注意到它有时会在第一次之前回来,而我认为不应该发生。我想这可能是一些微不足道的错误,但我不太擅长C ++(不幸的是我们被命令使用它)。您可以从此处下载整个Visual Studio 2013解决方案:https://dl.dropboxusercontent.com/u/1561186/EDAMI.zip。那么,有没有人知道为什么会出现这种情况?
static vector<int> kNN(int k, int p, Dataset<V>* records)
{
int b = p, f = p;
bool backwardSearch, forwardSearch;
vector<int> tmp;
LengthMetric<V>* lengthMetric = records->getLengthMetric();
backwardSearch = PrecedingPoint(records, b);
forwardSearch = FollowingPoint(records, f);
int i = 0;
while (backwardSearch && forwardSearch && i < k)
{
if (records->getRecord(p)->getLength() - records->getRecord(b)->getLength() < records->getRecord(f)->getLength() - records->getRecord(p)->getLength())
{
i++;
tmp.push_back(b);
backwardSearch = PrecedingPoint(records, b);
}
else
{
i++;
tmp.push_back(f);
forwardSearch = FollowingPoint(records, f);
}
}
while (backwardSearch && i < k)
{
i++;
tmp.push_back(b);
backwardSearch = PrecedingPoint(records, b);
}
while (forwardSearch && i < k)
{
i++;
tmp.push_back(f);
forwardSearch = FollowingPoint(records, f);
}
return tmp;
}
答案 0 :(得分:0)
查看类Dataset的第二个构造函数
Dataset(vector<Record<V>*> rrecords,
LengthMetric<V>* metric = new DumbLengthMetric<V>())
: records(rrecords),
lengthMetric(lengthMetric) { // <-------------------
lengthMetric(lengthMetric)
什么也没做。将其更改为lengthMetric(metric)
我的项目得到了一些结果,没有一个变量被更改。
顺便说一句,不要在zip中包含文件夹Debug
,Release
和文件*.sdf
,*.ncb