我应该使用哪种数据结构/算法来查找当前所在的部分,给定每个部分端点的列表?
例如,如果我有一个包含部分标题和内容的网页,
介绍(结束于100px)
第1节(结束于350px)
第2节(结束于700px)
结论(结束于1200px)
评论
如果我当前在130px处,则应返回我当前在“第1节”中。
选项1:
通过端点数组进行二分查找。
但是,每次位置改变仍可能需要O(log n)的时间。
选项2
当前位置的哈希表查找。
例如,如果我有一个包含部分标题和内容的网页,
介绍(结束于100px)
第1节(结束于350px)
第2节(结束于700px)
结论(结束于1200px)
评论
如果我当前在130px处,则应返回我当前在“第1节”中。
选项1:
通过端点数组进行二分查找。
from bisect import bisect_left
arr = [100, 350, 700, 1200]
pos = bisect_left(arr, 130, 0, arr[-1])
但是,每次位置改变仍可能需要O(log n)的时间。
选项2
当前位置的哈希表查找。
lookup = {0: "Introduction"
1: "Introduction"
...
10: "Section 1"
11: "Section 1"
...
}
section = lookup[130/10]
这种方法很快,但浪费了很多空间。
是否有一种通用的数据结构/算法来解决这种问题?