标签:基本类型 现象 python sum n+1 实例化 算法分析 计算机科学 nlog
方法1
for a in range(0,1001):
for b in range(0,1001):
for c in range(0,1001):
if a+b+c == 1000 and a**2+b**2 == c**2:
print(a,b,c)
方法2
for a in range(0,1001):
for b in range(0,1001):
c = 1000-a-b
if a+b+c == 1000 and a**2+b**2 == c**2:
print(a,b,c)
0 500 500
200 375 425
375 200 425
500 0 500
def sumOfN(n):
theSum = 0 #1
for i in range(1,n+1):
theSum = theSum + i # n
return theSum # 1
print(sumOfN(10)) # 55
# n+1+1 --> O(n) # 取最重要的部分,省去数字,保留n
a=5
b=6
c=10
for i in range(n):
for j in range(n):
x = i * i
y = j * j
z = i * j
for k in range(n):
w = a*k + 45
v = b*b
d = 33
# 3+3n**2+2n+1
# O(n**2) # 取最重要的部分,省去数字,保留n;n的话保留最高影响力的
概念:对于数据(基本类型的数据(int,float,char))的组织方式就被称作为数据结构。数据结构解决的就是一组数据如何进行保存,保存形式是怎样的。
案例: 需要存储一些学生的学生信息(name,score),那么这些数据应该如何组织呢?查询某一个具体学生的时间复杂度是什么呢?(三种组织方式)
方法1
[{
‘name‘:‘xxx‘,
‘score‘:‘xxx‘
},{
‘name‘:‘xxx‘,
‘score‘:‘xxx‘
},{
‘name‘:‘xxx‘,
‘score‘:‘xxx‘
}]
# O(n)
[{‘name‘: ‘xxx‘, ‘score‘: ‘xxx‘},
{‘name‘: ‘xxx‘, ‘score‘: ‘xxx‘},
{‘name‘: ‘xxx‘, ‘score‘: ‘xxx‘}]
方法2
[
(‘name‘,‘score‘),
(‘name‘,‘score‘),
(‘name‘,‘score‘)
]
# O(n)
[(‘name‘, ‘score‘), (‘name‘, ‘score‘), (‘name‘, ‘score‘)]
方法3
{
‘zhangsan‘:{‘score‘:‘xxx‘},
‘lisi‘:{‘score‘:‘xxx‘}
}
# O(1) dict在查询指定变量名方面明显优于list
{‘zhangsan‘: {‘score‘: ‘xxx‘}, ‘lisi‘: {‘score‘: ‘xxx‘}}
三种组织形式基于查询的时间复杂度?
使用不同的形式组织数据,在基于查询时的时间复杂度是不一样的。因此认为算法是为了解决实际问题而设计的,数据结构是算法需要处理问题的载体。
在列表的操作有一个非常常见的编程任务就是是增加一个列表。我们马上想到的有两种方法可以创建更长的列表,可以使用 append 方法或拼接运算符。但是这两种方法那种效率更高呢。这对你来说很重要,因为它可以帮助你通过选择合适的工具来提高你自己的程序的效率。
实例化一个空列表,然后将0-n范围的数据添加到列表中。(四种方式)
timeit模块:该模块可以用来测试一段python代码的执行速度/时长。
Timer类:该类是timeit模块中专门用于测量python代码的执行速度/时长的。原型为:class timeit.Timer(stmt=‘pass‘,setup=‘pass‘)。
def test01():
alist = []
for i in range(1000):
alist.append(i)
return alist
def test02():
alist = []
for i in range(1000):
alist = alist + [i]
return alist
def test03():
alist = [i for i in range(1000)]
return alist
def test04():
alist = list(range(1000))
return alist
from timeit import Timer
def test01():
alist = []
for i in range(1000):
alist.append(i)
return alist
def test02():
alist = []
for i in range(1000):
alist = alist + [i]
return alist
def test03():
alist = [i for i in range(1000)]
return alist
def test04():
alist = list(range(1000))
return alist
if __name__== ‘__main__‘: # 这是.py文件写法
timer1 = Timer(stmt=‘test01()‘,setup=‘from __main__ import test01‘)
t1 = timer1.timeit(100)
timer2 = Timer(stmt=‘test02()‘,setup=‘from __main__ import test02‘)
t2 = timer2.timeit(100)
timer3 = Timer(stmt=‘test03()‘,setup=‘from __main__ import test03‘)
t3 = timer3.timeit(100)
timer4 = Timer(stmt=‘test04()‘,setup=‘from __main__ import test04‘)
t4 = timer4.timeit(100)
print(t1,t2,t3,t4) # 结果可以看出 t4 < t3 < t1 < t2,即t4效率最高
0.0057362 0.1003685 0.0023975999999999997 0.0010071999999999998
%%timeit # 这是IPython特有的,jupyter notebook内置IPython
print(‘aaa‘)
# 结果中可以看出print()函数在当前条件(包括硬件)下的执行平均耗时为147 μs ± 26.5 μs
aaa
aaa
...
aaa
aaa
147 μs ± 26.5 μs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
标签:基本类型 现象 python sum n+1 实例化 算法分析 计算机科学 nlog
原文地址:https://www.cnblogs.com/Guoxing-Z/p/12670239.html