大O表示法
- 大O表示法指出了算法有多快,例如列表包含n个元素。简单查找需要检查每个元素,因此需要执行n次操作。
- 大O表示法指的并非以秒为单位的速度。大O表示法能够让你比较操作数,它指出了算法运行的增速。
- 二分查找需要执行logn次操作,使用大O表示法,运行时间O(logn)。
- 简单查找的运行时间总是O(n),但是大O表示法说的是最糟糕的情形。因此简单查找的运行时间不超过O(n)。
常见的大O运行时间
- O(logn)对数时间,常见算法:二分查找。
- O(n)线性时间,常见算法:简单查找。
- O(n*logn),快速排序。
- O(n^2),选择排序。
- O(n!),旅行商算法。
算法绘制网格所需要的时间:
二分算法(python实现)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
@desc: binary search
@author: Bingo Cai
"""
def binary_search(list, item):
low = 0
high = len(list) - 1
while low <= high:
mid = int((low + high)/2)
guess = list[mid]
if guess == item:
return mid
if guess > item:
high = mid - 1
else:
low = mid + 1
return None
my_list = [1, 3, 5, 7, 9]
print(binary_search(my_list, 3))
print(binary_search(my_list, -1))
小结
- 二分查找的速度比简单查找快的多。
- O(logn)比O(n)快。需要搜索的元素越多,前者比后者就快的越多。
- 算法运行时间并不以秒为单位。
- 算法运行时间是从其增速的角度度量的。
- 算法运行时间用大O表示法表示。