...

数据结构及算法-01算法引入

算法引入

import time

start_time = time.time()
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:%d, %d, %d" % (a, b, c))

end_time = time.time()
print("times:%d" % (end_time -start_time))
print("finished")

执行结果

a, b, c:0, 500, 500
a, b, c:200, 375, 425
a, b, c:375, 200, 425
a, b, c:500, 0, 500
times:286
finished

另一种算法

import time

start_time = time.time()
for a in range(0, 1001):
    for b in range(0, 1001):
        c = 1000 - a - b
        if a**2 + b**2 == c**2:
            print("a, b, c:%d, %d, %d" % (a, b, c))

end_time = time.time()
print("times:%d" % (end_time -start_time))
print("finished")

执行结果

a, b, c:0, 500, 500
a, b, c:200, 375, 425
a, b, c:375, 200, 425
a, b, c:500, 0, 500
times:1
finished

算法的概念

算法是独立存在的一种解决问题的方法和思想

算法的特性:

  • 输入
  • 输出
  • 有穷性
  • 确定性
  • 可行性

算法效率衡量

时间复杂度
基本运算数量个数

T1 = O(n^3)
T2 = O(n^2)
只考虑与n相关的数量级,忽略常量系数(最后的循环中有2个还是10个操作)

最优时间复杂度
最坏时间复杂度
平均时间复杂度

一般时间复杂度指最坏时间复杂度

时间复杂度计算规则:

常见时间复杂度

Python内置类型性能分析

from timeit import Timer

def test1():
    li = []
    for i in range(10000):
        # li += [i]  不完全等于以下语句, 有优化
        li = li + [i]

def test2():
    li = []
    for i in range(10000):
        li.append(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])

def test6():
    li = []
    for i in range(10000):
        li.insert(0, i)

timer1 = Timer("test1()", "from __main__ import test1")
print("+:", timer1.timeit(number=1000))

timer2 = Timer("test2()", "from __main__ import test2")
print("append:", timer2.timeit(number=1000))

timer3 = Timer("test3()", "from __main__ import test3")
print("构造器:", timer3.timeit(number=1000))

timer4 = Timer("test4()", "from __main__ import test4")
print("类型转换:", timer4.timeit(number=1000))

timer5 = Timer("test5()", "from __main__ import test5")
print("extend:", timer5.timeit(number=1000))

timer6 = Timer("test6()", "from __main__ import test6")
print("insert:", timer6.timeit(number=1000))

执行结果

+: 1.9438251314738715
append: 2.0546681004856353
构造器: 0.9054245635968021
类型转换: 0.5199876041759088
extend: 2.7770162085994707
insert: 42.24719570966755

数据结构

静态的描述了数据元素之间的关系

程序 = 数据结构+算法

抽象数据类型 ADT
数据组装方式 + 所支持的操作

posted @ 2020-02-11 14:08  韩志超  阅读(3971)  评论(0编辑  收藏  举报