1.a+b+c=1000, a2+b2=c^2(a,b,c为自然数),求abc所有组合
枚举法
A (0,10001) B C
3个for 循环
算法计算的方法
实现的语言不重要 思想
2.算法的五大特性
有穷性 ,输入 输出, 有穷性, 确定性, 可行性
3.时间复杂度
执行时间反应算法效率
时间复杂度和“o”
每台机器执行 的总时间不同 执行的基本运算数量大体相同
Method1
T=1000100010002
T=2000200020002
T=NNN2
T=N^32和 T=N^3*10一个数量级
n的三次方
T=N^32和 T1=N^3c
T是T1的渐进函数
4.最优时间复杂度 工作完成最少需要多少基本操作
最坏时间复杂度 工作完成最多需要多少基本操作
算法完成平均需要多少基本操作 平均时间复杂度
算法 首先关注最坏时间复杂度 然后 最优时间复杂度
5.基本操作 只有常数项 认为其时间复杂度 为O(i)
顺序结构 时间复炸度按加法计算
循环结构 时间复杂度按乘法计算
分支结构 时间复炸度 取最大值
判断一个算法效率的时候, 往往只需要关注操作数量的最高次项,其他次要项和常数项可以忽略
在没有特殊说明时候,我们所分析的算法的时间复杂度是指最坏时间复炸度
O(N^2) 第二个方法
6.常见的时间复杂程度
12 O(1)
2n+3 O(n)
3n^2+2n O(n^2)平方借
5log2n +29 O(log n)
2n+3nlog2n +19 O(n log n)
6n3+2n2+3n+2 O(N^3)
2^n O(2^n) 指数阶
7.代码执行时间测量模块timeit
l={}
li.append()
li.insert()
使用timeit模块
文件名不和包重合 abc模块
l={}
li.append()
li.insert()
from timeit import Timer
li1=[1,2]
li2=[23,11]
li=li1+li2
li=[for i in range(10000)]
li=list(range(10000))
def test1():
li=[]
for i in range(10000):
li.append(i)
def test2():
li=[]
for i in range(10000):
li+=[i]
def test3():
li=[i for i in range(10000)]
def test4():
li=list(range(10000))
def test5():
li=[]
for i in range(10000):
li.extend([i])
timer1=Timer(“test1()”,“from main import test1”)
print(“append:”, timer1.timeit(1000))
timer2=Timer(“test2()”,“from main import test2”)
print("+", timer2.timeit(1000))
timer3=Timer(“test3()”,“from main import test3”)
print("[i for i in range]:", timer3.timeit(1000))
timer4=Timer(“test4()”,“from main import test4”)
print(“list(range())”, timer4.timeit(1000))
timer5=Timer(“test5()”,“from main import test5”)
print(“extend”, timer5.timeit(1000))
####method 6
def test6():
li=[]
for i in range(10000):
li.append(i)
def test7():
li=[]
for i in range(10000):
li.insert(0,i)
timer6=Timer(“test6()”,“from main import test6”)
print(“append头”, timer6.timeit(1000))
timer7=Timer(“test7()”,“from main import test7”)
print(“append尾”, timer7.timeit(1000))