混淆此源代码的big-O符号

时间:2018-10-07 05:28:25

标签: c stack big-o pop

任何人都可以使用Big-O表示法帮助我计算源代码的算法复杂度吗?该程序是关于将NIM(学生身份号码)放入堆栈。我仍然不知道如何计算,尤其是在withif else中。 for函数的复杂度是否为O(1)?我只是一个新程序员。我的讲师对此材料也没有给出明确的解释。请帮我谢谢

switch case

1 个答案:

答案 0 :(得分:0)

算法复杂度是一种衡量算法运行时间如何随输入大小而变化的度量。由于我们只关心输入大小变大的情况,并且确切的运行时常数在各个平台上会有所不同,因此我们仅查看前导项而忽略常数。由于我们正在测量算法运行时如何随输入变化,因此我们需要定义输入是什么。对main进行此度量是没有意义的,因为它的运行时取决于确切的输入,从而为不同的输入提供了截然不同的行为。分别查看pushpopdisplay的复杂性是有意义的。我只会看一下display函数,而其余的则留给您作为学习练习。

top == -1的检查和打印语句都是在恒定的时间内发生的,而不管堆栈的大小如何。如果检查失败(对于非空堆栈会发生这种情况),那么for循环的主体将为堆栈的每个元素运行一次。从存储器访问堆栈中的元素并打印其值需要恒定的时间。将n设为堆栈的大小,然后由(大约)c1 + c2 * n给出运行时T(n),其中c1和c2是取决于您平台的常数。用大O表示法,O(c1 + c2 * n)= O(n)。