Какова сложность моей программы на Python? Сложность новичка
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 работает, но я не уверен в сложности программ. Кто-нибудь может дать мне больше понимания?
Актуальный вопрос ниже: input [2,3,1,4] output [12,8,24,6]
Умножьте все поля, кроме его собственной позиции.
Ограничения: 1. не использовать деление 2. сложность в O(n)
1 ответ
Давайте сделаем это по одному шагу за раз:
mul(l)
выполняет операцию над каждым элементомl
, Поэтому его сложностьO(len(l))
,- поскольку
j.append(mul(i[l+1::])*mul(i[0:l]))
работает наO(len(i))
элементы, его сложностьO(len(i))
, - Так как
j.append()
повторяетсяlen(i)
раз, общая сложностьO(len(i)*len(i))
или жеO(n**2)
(гдеn
являетсяlen(i)
).
В заключение вам нужен другой алгоритм.
Подсказка (при наведении мыши):
Поможет ли вам умножить все элементы вместе?