【发布时间】:2014-05-22 20:22:51
【问题描述】:
我有一个List<> 的一维段,每个段由一个包含开始和结束的struct 表示(x1,x2)。段可以重叠。该列表按开始排序 (x1)。
如何有效地找到包含特定点 x 的最短线段?
目前,我使用list.BinarySearch 查找x >= x1 的第一个段,这是有效的。然后我继续遍历列表,一次一个片段,直到x x1,找到x1 x x2 的最短片段,这不是那么有效。
如何改进该算法以获得更好的速度?我觉得可以,但我卡住了。
此问题与Shortest distance between a point and a line segment 不重复。
【问题讨论】:
-
对于你给出的数据结构,你的算法很好。可能的改进取决于多种因素,例如:您更改数据结构的意愿如何,平均有多少段共享相同的起点等。
-
@mbeckish,我愿意以任何方式更改数据结构,例如我可以把它变成一棵树。共享相同的起点和重叠是不可能的,但可能。感谢您的想法。
-
是否必须动态支持插入和删除区间?
-
另外,您的查询和端点是整数吗?
-
@NiklasB.,它不必动态支持插入/删除。每次输入数据更改时,它都会整体重建。端点确实是整数。
标签: c# algorithm optimization