如图所示,我有以下结构来在“切片”中存储一套壁橱“曲线”. “曲线”由作为双重链表实现的“节点”组成. 这是伪代码: class Slice { ListCurve* curves;}class Curve { int objectID; Node *headNode
“曲线”由作为双重链表实现的“节点”组成.
这是伪代码:
class Slice { List<Curve*> curves; } class Curve { int objectID; Node *headNode; } class Node { double x, double y, Node *next; Node *previous }
我使用QT绘制方法渲染这个结构,我想选择最接近鼠标点的节点.
我做的是,
a).在“切片”中获取每个“曲线”
b).浏览所选曲线中的所有节点并计算从鼠标点到每个点的距离并进行比较.
我的问题:
1)如果我们取曲线数为“c”且平均节点为“n”,则算法复杂度为O(n * c).
这个分析是否正确?
2)有没有改进算法,让它更快?使用二叉树,HashTable ..等等?
1)是的,你的分析是正确的2)使用nearest neighbor search算法可以获得对数复杂度.
最简单的可能是using the k-d tree