python 隐藏平方级__字符串

隐性平方操作

以下代码:

1. 

from random import randrange

L=[ randrange(1000) for i in range(1000)]
print( 50 in L)

>>False

S=set(L)

print(50 in L)


>>False
用LIST来操作运行时间是平方级别的,而set操作是线性级时间。

2.

s=''
for add1 in String_producer():

s+=add1

以上代码在一定规模之前工作的很好,但是 超过一定范围之后,就是平方级别的增长了。解决方案如下:

adds1=[]
for add1 in string_producer():

adds1.append(add1)

s=''.join(adds1)
append操作允许我们将原有空间加上一定的百分比来进行‘过度’分配,其可用空间的增长方式是指数级别的,这时,

append 操作的成本在交由所有操作平均承担的情况下就变成了常数级别的操作


还有隐藏的更加深的
s =sum ( string_producer(),'') 

这时回报错;

如果改用list,

list=[ [1,2],[ 3,4,5] ,[6]]

print (sum(list,[]))
>>[1,2,3,,4,5,6]

以上代码运行没问题,但是这和上面的字符串+=那个例子一样,都是平方级别的运行时间。解决方案:


res=[]

for lst i lists:

res.extend(lst)

只要测试以下两个版本的 时间,就会发现list的长度很短时,他们之间就没有什么区别,但是一旦超过某个长度,前面的sum版本就会彻底失败。








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值