【发布时间】:2014-08-07 16:55:32
【问题描述】:
我在 C 中实现了点四叉树和该树的范围搜索。我的范围搜索返回正确的结果,但是当我通过 valgrind 运行它时,valgrind 被杀死。我正在使用递归方法。我想让我的范围搜索更高效,但我的大部分尝试似乎都过于复杂。
int qt_rangesearch(qt_node* root, double x, double y, double d){
qt_node* temp = root;
int count = 0;
if (root == NULL){ return 0; }
if (dist2(temp->x, temp->y, x, y) <= (d*d)){
count = 1;
}
return (count +
qt_rangesearch(temp->ne, x, y, d) +
qt_rangesearch(temp->nw, x, y, d) +
qt_rangesearch(temp->se, x, y, d) +
qt_rangesearch(temp->sw, x, y, d) );
}
这是我的简单方法,速度慢但会杀死 Valgrind。我如何使它更有效率?我假设如果点 x,y 到当前节点的 SW 并且当前节点距离 x,y 比不继续范围搜索到当前节点的 NE 更远,那么我假设某些东西。
编辑:
我的距离函数:
double dist2(double x1, double y1, double x2, double y2) {
return (x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2);
}
【问题讨论】:
-
为什么分配给
temp而不是直接使用root?dist2长什么样子? -
我应该使用 root,但习惯于在每个函数中创建一个临时指针。虽然应该有相同的结果
-
您需要澄清“valgrind 被杀死”是什么意思。从字面上看,它就像说“它不起作用”一样没有信息。提供来自 valgrind 的日志信息报告以及您的问题以及相关来源。
标签: c algorithm tree computer-science quadtree