n
列表大小v[n]
列表設置爲0
update(k, a)
操作這臺v[k] += a
query(a, b)
操作返回的v[a] + v[a+1] + ... + v[a+b]
總和所有值,a<b
這些操作給算法時間複雜度爲O(n * cost of one operation)
:如何提高此算法的時間複雜度?
---------------------------
| update | query | total |
---------------------------
| O(1) | O(n) | O(n) |
---------------------------
是否有任何版本的update
和query
操作將提高總時間複雜度?
比如我試圖緩存0
和n
之間的每一筆在update
操作,但我得到一個更慢的算法:
---------------------------
| update | query | total |
---------------------------
| O(n^2) | O(1) | O(n^2) |
---------------------------
有什麼建議?
最糟糕的情況是我感興趣的。
我已經知道兩個版本:每個版本都有一個操作O(1)
和其他O(n)
或更高版本。
union-find set? – gongzhitaao 2014-10-16 13:29:33
使用具有惰性範圍更新的分段樹,您可以獲得每個操作的O(log n) – 2014-10-16 13:29:38
正在調查 – 2014-10-16 13:30:31