DualArrayDeque表示使用兩個ArrayStacks的列表。雙陣列隊列add(i,x)的運行時間
List<T> front;
List<T> back;
void add(int i, T x) {
if (i < front.size()) {
front.add(front.size()-i, x);
} else {
back.add(i-front.size(), x);
}
balance();
}
忽略balance()的運行時間。如果i < front.size()
,add(i,x)
運行時間是O(i+1)
。將0-i元素向左移[O(i)
]並將第i個元素指定給x [O(1)
]。同樣,當i > front.size()
,它是O(n-i+1)
;
front.size()
和back.size()
相差不超過3倍。特別是,3 · front.size() ≥ back.size()
和3 · back.size() ≥ front.size()
。因此,如果i < n/4
和O(1 + n − i)
如果i ≥ 3n/4
運行時間是O(1 + i)
;
我的問題是當n/4 <= i < 3n/4
,爲什麼add(i,x)
的運行時間是O(n)
?
PS:我正在閱讀Open Data Structure http://opendatastructures.org/ods-java/2_5_DualArrayDeque_Building.html。我很困惑,爲什麼它是O(n)
。