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

我们可以说python代码的时间复杂度在数学上比C好吗?,python,c,time-complexity,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() 对于类似的输出,

用于打印菱形图案的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;
}
#包括
int main()
{
int i,j;
int n;
printf(“--PATTERN--\n”);
printf(“输入行数::\n”);
scanf(“%d”和“&n”);
对于(i=0;ii;j--)
{
printf(“”);
}

对于(j=0;j来说,Python上的嵌套循环并不那么容易看到。语句
print'*a'*'*(2*i-1)
也是一个循环(实际上每个“乘法”一个循环)–否则,您如何能够执行可变数量的重复工作?这并不是您所说的循环。

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

我们可以说python代码的时间复杂度在数学上比C好吗

不,你不能。代码相对于机器的时间复杂性(即使是理论上的)取决于机器最终做什么(解决问题所花费的时间)而不是你如何告诉它该做什么,例如C和Python是告诉它该做什么的两种方法。然而,我建议你编译,然后对照你的C程序进行检查,通过它你可以比较苹果和苹果,而不是桔子。更好的是,编译(和链接)将它们都转换成二进制文件,并对它们进行反汇编,以验证您的假设,从而确定两者实际上都是循环的

Python不涉及循环嵌套

这只是Python作为一种语言所提供的语法糖分;然而,就像其他答案所提到的那样,在后台,它也会循环

我们能说从结构上讲Python是一种更有效的语言吗

不会,因为结构是风格问题,而不是效率问题


如果您考虑的是性能(时间)或内存效率,那么这不是语言本身的固有特性,而是语言的实现以及它在给定体系结构上的性能;这同样应该被衡量,而不是假设/猜测。例如,以Lua为例,同一种语言有不同的解释器(实现),其中一个。因此,效率是一个实现问题,而不是语言本身。

您能让您的python代码在语法上有效吗?但不,让python更“高效”是没有魔力的。
打印“*a”,“*”*(2*i-1)
这里是您的嵌套循环。请记住,即使您将复杂性隐藏在一条简单语句后面,它也不会消失。在Python中,您可以用一条语句解析XML文件/应用正则表达式/发射火箭到月球,但这并不意味着它是O(1).在KerrekScript 2.0中,你可以说,
print'*'n
,因此其复杂性为O(1)。(事实证明,内置的菱形操作符确实将语言从默默无闻中推向了主流。)@KerrekSB:事实上,我看到了HQ9+的一个潜在扩展。@juanchopanza抱歉,sir jst从IDLE复制了代码,所以缩进是lostOn分析问题中给出的python代码,通过将其分解为字节码(使用dis),这是
'
a
之间的操作(在
print'*a'*.*(2*I-1)中)
)我不是说这里没有嵌套循环,只是想问一下,如果这个
BINARY\u MULTIPLY
是另一个抽象层,在引擎盖下面有一个循环,你确定你没有看
2*I
部分吗?是的!!我绝对肯定..实际上这里有3个
二进制乘法
:第一个是
''*a
第二个是
'*'*(2*i-1)
第三个是
2*i
部分。这里到底发生了什么?我不能在这里发布反汇编代码