查找另一个数字介于哪个数字对之间的优化方法?

抓住

给定一行上的区域列表:

regions = [(10,25), (18, 30), (45, 60), ...] # so on so forth, regions can be overlapping, of variable size, etc.

我想知道点X属于哪个区域:

x = 23
find_regions(regions, x) # ==> [(10, 25), (18, 30)]

我天真地知道(以及我当前的实现),我们只能在O(n)中进行搜索,但是具有成千上万个区域(以及成千上万个查找点,实际上是动机的更戏剧性的用例证明了研究一种比此方法更快的方法合理的:

regions = [(start, end) for (start, end) in regions if start < x and x < end]

我可能会以为有人之前已经解决了这个问题,但我不确定如何最好地实现它。有什么想法吗?

user2357112支持Monica

这就是设计要执行的确切的作业间隔树GooglingPython interval tree建立了一个名为Banyan的现有库来实现它们,尽管我不能说它的可靠性,而且它似乎没有得到积极开发。您也可以实现自己的间隔树。

从N个间隔列表构建间隔树的预处理时间在O(Nlog(N))中,并且与其他一些答案不同,无论间隔重叠多少,它仅占用O(N)空间。确定给定点有多少间隔的时间以O(M + log(N))为单位,其中M是包含该点的间隔数。

PyPI页面提取的榕树间隔树演示

>>> t = SortedSet([(1, 3), (2, 4), (-2, 9)], updator = OverlappingIntervalsUpdator)
>>>
>>> print(t.overlap_point(-5))
[]
>>> print(t.overlap_point(5))
[(-2, 9)]
>>> print(t.overlap_point(3.5))
[(-2, 9), (2, 4)]
>>>
>>> print(t.overlap((-10, 10)))
[(-2, 9), (1, 3), (2, 4)]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从PHP中的另一个数字中提取一个数字

来自分类Dev

数字以及可被另一个数字整除的数字的数字(例如 3)

来自分类Dev

计算一个静态数字适合另一个数字的次数

来自分类Dev

sql获取一个范围为另一个数字的数字

来自分类Dev

查找大于x的第一个数字并在该行中返回另一个值

来自分类Dev

如何检查一个数字进入另一个数字内并在php中基于该数字创建一个数组?

来自分类Dev

将数字从一个数字映射到另一个数字的代码,其中每个数字的距离都大于1

来自分类Dev

从另一个数字中删除所有9的Java方法?

来自分类Dev

具有数组和另一个数字的方法

来自分类Dev

打印一个数字,然后擦除它并在其位置打印另一个数字

来自分类Dev

如何确定一个数字是否在另一个数字的某个范围内

来自分类Dev

我如何检查一个数字是高于还是低于另一个数字?

来自分类Dev

Typescript 接口期望一个数字道具小于另一个数字道具

来自分类Dev

确定一个数字是否大于,小于或等于另一个数字的最短方法是什么?

来自分类Dev

生成最接近另一个数字百的一系列数字

来自分类Dev

检查列表中的数字是否可被另一个数字整除的最有效方法

来自分类Dev

查找范围介于两个数字之间的点

来自分类Dev

查找所有均分一个数字的数字

来自分类Dev

如何找到与另一个数字最接近的数字,即2的幂?

来自分类Dev

如何将数字的格式复制到另一个数字?

来自分类Dev

如何将数字的格式复制到另一个数字?

来自分类Dev

使数字成为另一个数字的因素(对性能的关注)

来自分类Dev

关于已被“包含”在另一个数字中的数字的输出问题

来自分类Dev

在PYTHON中将一个数字替换为另一个

来自分类Dev

找出一个很大的数字是否可以被另一个数整除

来自分类Dev

选择一个数字序列,然后链接到另一个查询

来自分类Dev

Excel-如何查找哪个工作表中存在一个数字

来自分类Dev

如何合并两个数字并将其存储在另一个数字中

来自分类Dev

用Java计算介于第一个和最后一个数字之间的所有数字的平均值

Related 相关文章

  1. 1

    从PHP中的另一个数字中提取一个数字

  2. 2

    数字以及可被另一个数字整除的数字的数字(例如 3)

  3. 3

    计算一个静态数字适合另一个数字的次数

  4. 4

    sql获取一个范围为另一个数字的数字

  5. 5

    查找大于x的第一个数字并在该行中返回另一个值

  6. 6

    如何检查一个数字进入另一个数字内并在php中基于该数字创建一个数组?

  7. 7

    将数字从一个数字映射到另一个数字的代码,其中每个数字的距离都大于1

  8. 8

    从另一个数字中删除所有9的Java方法?

  9. 9

    具有数组和另一个数字的方法

  10. 10

    打印一个数字,然后擦除它并在其位置打印另一个数字

  11. 11

    如何确定一个数字是否在另一个数字的某个范围内

  12. 12

    我如何检查一个数字是高于还是低于另一个数字?

  13. 13

    Typescript 接口期望一个数字道具小于另一个数字道具

  14. 14

    确定一个数字是否大于,小于或等于另一个数字的最短方法是什么?

  15. 15

    生成最接近另一个数字百的一系列数字

  16. 16

    检查列表中的数字是否可被另一个数字整除的最有效方法

  17. 17

    查找范围介于两个数字之间的点

  18. 18

    查找所有均分一个数字的数字

  19. 19

    如何找到与另一个数字最接近的数字,即2的幂?

  20. 20

    如何将数字的格式复制到另一个数字?

  21. 21

    如何将数字的格式复制到另一个数字?

  22. 22

    使数字成为另一个数字的因素(对性能的关注)

  23. 23

    关于已被“包含”在另一个数字中的数字的输出问题

  24. 24

    在PYTHON中将一个数字替换为另一个

  25. 25

    找出一个很大的数字是否可以被另一个数整除

  26. 26

    选择一个数字序列,然后链接到另一个查询

  27. 27

    Excel-如何查找哪个工作表中存在一个数字

  28. 28

    如何合并两个数字并将其存储在另一个数字中

  29. 29

    用Java计算介于第一个和最后一个数字之间的所有数字的平均值

热门标签

归档