我有一個包含〜280.000個元素的開始位置列表。完全覆蓋73.000.000個職位。在區間列表中快速查找
由於性能方面的原因,我已經將它們拆分成字典中的部分(通過子集因子),該子集又包含元組列表(開始,結束)。
最後,我得到一個職位列表,我想測試他們是否位於開始和結束的區域。
posit = (start,end)
dict[subset].append(posit)
for position in dict[subset]:
if posit[0] < varpos < posit[1]:
# do some stuff here
目前這些look ups需要很長時間。但是由於內存方面的考慮,我也不想生成一個包含開始和結束之間所有位置的更快的集合。
你有沒有任何的指針如何創建一個快速啓動,結束位置數據結構或更好的查找策略?
考查[線段樹](https://en.wikipedia.org/wiki/Segment_tree)和[間隔樹](https://en.wikipedia.org/wiki/Interval_tree)。這是所謂[插入問題]的一個特例(http://www.cs.nthu.edu.tw/~wkhon/ds/ds10/tutorial/tutorial6.pdf) –
python bisect呢?它可以更快地產生效果 –
爲什麼不添加所有(開始,結束)元組,然後對結果列表進行排序?然後迭代排序列表以確定重疊(它們將彼此相鄰)。或者你是否因爲這種方法而受限於內存? –