我一直在努力解決編碼面試中的問題,爲一些面試做準備。我能夠解決堆棧分類問題,但我很難找出如何推斷時間複雜性。我的解決方案與本書提供的解決方案非常相似,我已經測試了一下,所以我確定它是正確的。任何對思維過程的深入分析都將非常感謝。這本書說它是O(n^2)。下面是算法:分析堆棧排序算法的時間複雜度
def sort_stack(stack):
temp_stack = Stack()
while not stack.is_empty():
v = stack.pop()
if temp_stack.is_empty() or temp_stack.peek() <= v:
temp_stack.push(v)
else:
while not temp_stack.is_empty() and temp_stack.peek() > v:
stack.push(temp_stack.pop())
temp_stack.push(v)
while not temp_stack.is_empty():
stack.push(temp_stack.pop())
作爲一個方面說明:我用這個方法到堆棧中進行排序是問題的約束範圍內。我知道存在更快的解決方案。
預先感謝您。
外環至少有n次迭代,我知道。根據值,內部循環可以有0和temp_stack.size迭代。在最壞的情況下,原始堆棧已經排序,我們將有0 + 1 + 2 + 3 + ...(n-1)次迭代......但是我認爲這個求和結果爲n(n + 1)/ 2,當我們忽略它自己的n^2的常量時。我以爲我在做什麼,但現在我不確定。 – rocktheartsm4l
或將內部循環的分析爲:1/n + 2/n + 3/n + 4/n + ...(n-1)/ n我們認爲它只是n?我要睡覺很晚了< – rocktheartsm4l