【发布时间】:2012-04-12 19:49:36
【问题描述】:
我正在寻找最快的方法来确定一条线上的点是否在这条线的子集内。 我得到一个整数点,我也有一个“列表”:
- 点,用整数表示(3、10、1000 等)
- 间隔,我用 2 个整数表示(2:10 是从 2 到 10 的所有整数,包括 50:60 等)
在这个例子中,如果我的点的值为 5,那么我返回 true,因为它包含在一个区间中,对于 55 也是如此。如果我的点等于 1000,我也返回 true,因为它与列表匹配点。
我正在寻找一种快速的方法(比线性更快)来检查这种情况,而不必实例化尽可能多的整数(即,对于 1:1000 的间隔,我不想实例化 1000整数)。 这可以在对数时间内完成吗?
谢谢
编辑: 您可以认为预处理数据列表所花费的任何时间都等于 0,因为一旦处理了我的初始间隔,我需要将此测试应用于 10k 点
【问题讨论】:
-
间隔可以重叠吗?我不确定这是否重要,但感觉应该如此。
-
他们可以,但我可以预处理我的数据,以便它们不再存在,这在时间上没有问题,因为我使用相同的间隔集来处理 10k 点
-
你需要知道一个点在哪些区间,或者仅仅知道它是否在其中吗?
-
澄清一下,这个“列表”可能看起来像这样? (3, 2:10, 10, 50:60, 1000) 另外,如果有一个有趣的问题,请 +1。
-
@Karl Bielefeldt:我只返回一个布尔值
标签: c++ c algorithm computational-geometry