码迷,mamicode.com
首页 > 编程语言 > 详细

Python开发【二十八章】:算法

时间:2017-03-12 16:30:51      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:序列   列表   过程   自身   复杂   选区   解决问题   估计   有序   

算法基础

1、什么是算法?

算法(Algorithm):一个计算过程,解决问题的方法

 

2、复习:递归

递归的两个特点:

  • 调用自身
  • 结束条件

两个重要递归函数的对比:

# 由大到小
def func3(x):
    if x > 0 :
        print(x)
        func3(x-1)

# func3(5)
# 5 4 3 2 1

# 由小到大
def func4(x):
    if x > 0 :
        func4(x-1)
        print(x)

func4(5)
# 1 2 3 4 5

  

3、时间复杂度

时间复杂度:用来评估算法运行效率的一个东西:

print(‘Hello World‘)            # 0(1)

for i in range(n):                  # O(n)
    print(‘Hello World‘)

for i in range(n):                   # O(n^2)
    for j in range(n):
        print(‘Hello World‘)

for i in range(n):                   # O(n^3)
    for j in range(n):
        for k in range(n):
            print(‘Hello World‘)

第一个打印了一次时间复杂度为O(1);第二个打印了n次,所以时间复杂度为O(n);第三四个依次为n2和n的3次方

那么看看下面代码中的时间复杂度为多少?

# 非O(3) 而是O(1)
print(‘Hello World‘)
print(‘Hello Python‘)
print(‘Hello Algorithm‘)

# 非O(n2+n) 而是O(n2)
for i in range(n):
    print(‘Hello World‘)
        for j in range(n):
            print(‘Hello World‘)

# 非O(1/2n2) 而是O(n2)
for i in range(n):
    for j in range(i): 
        print(‘Hello World‘)

再看看下面代码: 

# 时间复杂度 O(log2n) 或 O(logn)
while n > 1:
    print(n)
    n = n // 2

# n=64输出:
# 64
# 32
# 16
# 8
# 4
# 2

小结:

时间复杂度是用来估计算法运行时间的一个式子(单位)。

一般来说,时间复杂度低的算法比复杂度低的算法快。

常见的时间复杂度(按用时排序)

  • O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n2logn)<O(n3)

不常见的时间复杂度(看看就好)

  • O(n!) O(2n) O(nn) …

如何一眼判断时间复杂度?

  • 循环减半的过程?O(logn)
  • 几次循环就是n的几次方的复杂度

 

4、空间复杂度

空间复杂度:用来评估算法内存占用大小的一个式子

 

列表查找

列表查找:从列表中查找指定元素

  • 输入:列表、待查找元素
  • 输出:元素下标或未查找到元素

 

1、顺序查找

从列表第一个元素开始,顺序进行搜索,直到找到为止

 

2、二分查找

有序列表的候选区data[0:n]开始,通过对待查找的值与候选区中间值的比较,可以使候选区减少一半

 

Python开发【二十八章】:算法

标签:序列   列表   过程   自身   复杂   选区   解决问题   估计   有序   

原文地址:http://www.cnblogs.com/lianzhilei/p/6538017.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!