图解算法笔记1 - 二分查找 & 大O表示法(时间复杂度)

1、由二分查找引出时间概念

二分查找是一种算法,其输入是一个有序的元素列表(必须有序)。如果要查找的元素包含在列表中,二分查找返回其位置,否则返回NULL。

一般而言,对于包含n个元素的列表,用二分查找最多需要 log ⁡ 2 n \log_2 n log2n步,而简单查找最多需要n步。

例如:如果列表包含8个元素,简单查找需要检查8个元素,二分查找只需要检查3个元素,因为 2 3 2^3 23=8。

1.1 python实现二分查找

def binary_search(list_demo, item):
	low = 0
	high = len(list_demo) - 1
	
	while low <= high:
		mid = (low + high) // 2
		guess = list_demo[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))

由此可见,二分查找的运行时间为对数时间(或log时间)。

2、大O表示法

大O表示法是一种特殊的表示法,指出了算法的速度有多快。
例如,假设列表包含n个元素。简单查找需要检查每个元素,因此需要执行n次操作。使用大O表示法,这个运行时间为O(n)。

大O表示法能够比较操作数,它指出了算法运算时间的增速。同时,大O表示法指出了算法在最糟情况下的运算时间。

2.1 一些常见的大O运行时间

下面按从快到慢的顺序列出了常见的5种大O运行时间:
O( l o g n log n logn),也叫对数时间,这样的算法包括二分查找。
O( n n n),也叫线性时间,这样的算法包括简单查找。
O( n l o g n nlogn nlogn),这样的算法包括快速排序,一种速度较快的排序算法。
O( n 2 n^2 n2),这样的算法包括选择排序,一种速度较慢的排序算法。
O( n ! n! n!),这样的算法包括下面要介绍的旅行商问题的解决方案,一种非常慢的算法。

假设你要绘制一个包含16格的网格,且有5种不同的算法可供选择,这些算法的运行时间如图所示:
绘制16格网格的5种算法

2.2 旅行商问题

有一个旅行商:
在这里插入图片描述
他需要前往5个城市。

在这里插入图片描述
这位旅行商要前往5个城市,同时确保旅程最短,为此,可考虑的城市顺序如下:
在这里插入图片描述
对于每种顺序,都需计算总旅程,再挑选最短的路线。5个城市有5!个排列方式,6个城市有6!个排列方式,以此类推,涉及 n n n个城市时,需要 n ! n! n!次操作才能计算出结果。

2.3 小结:

1)算法的速度指的并非时间,而是操作数的增速。
2)谈论算法的速度时,我们说的是随着输入的增加,其运行时间将以什么样的速度增加。
3)算法的运行时间用大O表示法表示。
4)O( l o g n logn logn)比O( n n n)快,当需要搜索的元素越多时,前者比后者快得越多。
5)算法运行时间并不以秒为单位。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值