我们可以说数学上python中代码的时间复杂度要好于C吗?

时间:2014-06-09 08:14:46

标签: python c time-complexity

用于打印菱形图案的python代码是:

def main():
n= input('The size of the diamond :: ')    
a=n
for i in range(n):
        print ' '*a,'*'*(2*i-1)
        a=a-1

a=0
p=n
for i in range(n):
        print ' '*a,'*'*(2*p-1)
        a=a+1
        p=p-1

main()

对于类似的输出,C中的代码是::

#include<stdio.h>
int main()
{
   int i,j;
   int n;
   printf("---PATTERN---\n");
   printf("enter the number of rows :: \n");
   scanf("%d",&n);
   for(i=0;i<=n;i++)
   {
       for(j=n;j>i;j--)
        {
           printf(" ");
        }
       for(j=0;j<2*i+1;j++)
       {
          printf("*");
       }
       printf("\n");
   }
    i=0;
   for(i=0;i<=n;i++)
   {

       for(j=0;j<i;j++)
       {
          printf(" ");
       }
       for(j=2*n-1;j>=2*i-1;j--)
       {
          printf("*");
       }
    printf("\n");
 }

return 0;
}

我的问题是:我们可以说数学上python中代码的时间复杂度优于C吗? 虽然C程序的运行时间少于Python的运行时间但是Python中的相同程序不涉及循环嵌套,因为在C的情况下,我们可以说结构上Python是一种更有效的语言吗? 如果怀疑听起来很愚蠢,我会道歉。

3 个答案:

答案 0 :(得分:4)

Python上的嵌套循环不是那么容易看到的。语句print ' '*a,'*'*(2*i-1)也是一个循环(实际上是每个循环一次循环&#34;乘法&#34;) - 你怎么能够做出可变数量的重复工作呢?它不是你拼出的循环。

答案 1 :(得分:4)

  

我们可以说数学上python中代码的时间复杂度要好于C吗?

不,你不能。关于机器的代码(甚至是理论代码)的时间复杂度取决于机器最终做什么(解决问题的时间),而不是如何判断如何做,即C和Python是两种,其中有两种方式告诉它该怎么做。但是,我建议你编译Python code to C,然后根据你的C程序检查它,你将通过它来比较苹果和苹果,而不是橙子。更好的是,将它们编译(并链接)到二进制文件中并对它们进行反汇编以验证您的假设,以确定两者实际上都是循环的。

  

Python不涉及循环嵌套

这只是Python作为语言提供的语法糖;然而,在引擎盖下,它也会循环,就像其他答案一样。

  

我们可以说结构上Python是一种更有效的语言吗?

再一次,因为结构是风格而非效率的问题。

如果你正在考虑性能(时间)或内存效率,那么它不是语言本身的固有特性,而是语言的实现以及它在给定体系结构上的表现。这应该再次测量,而不是假设/猜测。例如,拿Lua,同一种语言有不同的解释器(实现),其中few are remarkably faster than the others。因此,效率是实施的问题,而不是语言本身。

答案 2 :(得分:1)

好吧,当你在python中执行' '*a时,你实际上正在做一个隐藏的for循环