Algorithm 关于算法分析/性能?

Algorithm 关于算法分析/性能?,algorithm,data-structures,big-o,code-analysis,Algorithm,Data Structures,Big O,Code Analysis,如图所示,我有以下结构来存储“切片”中的一组壁橱“曲线”。 “曲线”由实现为双链接列表的“节点”组成 以下是psuedo代码: class Slice { List<Curve*> curves; } class Curve { int objectID; Node *headNode; } class Node { double x, double y, Node *next; Node *previous } 类片{ 列表曲线; } 类曲线{ int obje

如图所示,我有以下结构来存储“切片”中的一组壁橱“曲线”。 “曲线”由实现为双链接列表的“节点”组成

以下是psuedo代码:

class Slice {
 List<Curve*> curves;
}

class Curve {
 int objectID;
 Node *headNode;
}

class Node {
 double x,
 double y,
 Node *next;
 Node *previous
}
类片{
列表曲线;
}
类曲线{
int objectID;
节点*头节点;
}
类节点{
双x,
双y,
节点*下一步;
节点*上一个
}
我使用QT paint方法渲染此结构,并希望选择离鼠标点最近的节点

我所做的是

a) .获取“切片”中的每个“曲线”

b) .遍历选定曲线中的所有节点,计算鼠标点到每个点的距离,并进行比较

我的问题是:

1) 如果我们取曲线数为“c”,平均节点数为“n”,则算法复杂度为O(n*c)。 这个分析正确吗

2) 有没有改进算法,让它更快?使用二叉树、哈希表等?

1)是的,您的分析是正确的

2) 使用这些算法可以得到对数复杂度


最简单的可能是

一个简单的技巧是跟踪每条曲线的边界圆直径。如果曲线上到鼠标点的距离上的任何点距离鼠标点的距离超过直径的两倍,则可以跳过该曲线上的其他节点。(如果距离鼠标点最近的点距离鼠标点3个单位,且边界圆为10个单位的曲线的第一个点距离鼠标点25个单位,则可以忽略该曲线上的其他节点。)