分析堆栈排序算法的时间复杂度

时间:2016-09-16 04:54:24

标签: python algorithm sorting stack big-o

我一直在解决破解编码面试中的问题以准备一些采访。我能够解决堆栈排序问题,但我很难弄清楚如何推断时间复杂性。我的解决方案与书中提供的解决方案非常相似,我已经对它进行了相当多的测试,所以我确信它是正确的。对于分析该算法所经历的思考过程的任何洞察都将非常感激。这本书说它是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())

作为旁注:我使用这种方法对堆栈进行排序,以便在问题的约束范围内。我知道存在更快的解决方案。

提前谢谢。

2 个答案:

答案 0 :(得分:2)

考虑最坏的情况,其中对堆栈中的每个项目进行排序需要完全清空临时堆栈。 (当尝试对反向排序的堆栈进行排序时会发生这种情况。)

清空/重新填充每个项目的临时堆栈的成本是多少? 有多少项?

组合这些应该给出O(n ^ 2)。

答案 1 :(得分:1)

这可能是一种过于简化的算法分析方法,但每当我看到嵌套循环时,我认为n ^ 2。嵌套的三个循环 - n ^ 3等。作为简单程序的经验法则,计算嵌套循环。这是一个非常有用的教程:http://cs.lmu.edu/~ray/notes/alganalysis/