我正在尋找算法被O的平均情況下的性能(日誌(N)),以提取元件之間(或等於)一個分鐘,並從排序列表一個最大值。使用三元搜索來查找範圍內的所有元素?
的問題是,由於在最小值和最大值實際上可能沒有在列表中,或者甚至是重複的,二進制搜索不會做。三元搜索似乎更接近我所追求的,但我一直沒能創建不基於三元搜索到目前爲止我所看到的功能。
例如,輸入:
list=[1,2,3,4,5,6,7], min=3, max=6
應返回[3,4,5,6]。同樣,
list=[500,757,2412,10000,123123], min = 600, max = 5000
應該返回[757,2412]。
這也可以在python做不太有效使用:
def withinRange(values,min,max):
return [val for val in sorted(values) if val <= max and val >= min]
的操作稱爲足夠,一個爲O(log(N))是非常優選的,並且該排序將只進行一次。
我不明白你的推理*「以來的最小和最大值實際上可能沒有在列表中,或者甚至重複,二進制搜索將不會執行「*」。你能詳細說明一下嗎? – NPE
它需要是帶有內存的二進制搜索。 「記住,你有最後一個值。如果你是即將返回‘未發現價值’,在你的記憶返回一個值」 – inspectorG4dget
在下面的例子中,該算法的目的是最小和最大的列表中返回的所有值值。低效率的方式做同樣的事情是:[X在列表中移除x當x> =分鐘且x <=最大值] – Nuclearman