我的Python程序的复杂性是什么?复杂性新手

时间:2014-04-16 06:38:01

标签: python-2.7 time-complexity code-complexity

def multiplyItself():
 i=[2,3,1,4]
 j=[]
 length=len(i) # 0 1 2 3
 print 'input string',i
 for l in range(length):
  if l==0:
    j.append(mul(i[l+1::]))
  if l>0:
    print i[l+1::]
    print i[0:l]
    j.append(mul(i[l+1::])*mul(i[0:l]))
 print j


def mul(l):
 sum=1
 for i in l:
   sum=sum*i
 return sum

def main():
 print 'test multply'
 multiplyItself()


main()

以上python代码有效,但我不确定程序的复杂性。谁能给我更多的见解?

实际问题如下:  输入[2,3,1,4] 输出[12,8,24,6]

将所有字段相乘,除了它自己的位置。

限制: 1.不使用分裂 2. O(n)的复杂性

1 个答案:

答案 0 :(得分:1)

让我们一步一步:

  1. mul(l)l的每个元素执行操作。因此,它的复杂性为O(len(l))
  2. 由于j.append(mul(i[l+1::])*mul(i[0:l]))O(len(i))元素进行操作,因此其复杂度为O(len(i))
  3. 由于j.append()重复len(i)次,因此整体复杂度为O(len(i)*len(i))O(n**2)(其中nlen(i))。< / LI>

    总之,您需要一种不同的算法。

    提示(鼠标悬停显示):

      

    如果你将所有元素加在一起会有帮助吗?