《算法图解》第一章 算法简介

1、二分查找DEMO:有序元素列表
def binary_search(list,item): # 设置首位low和尾尾high low = 0 high = len(list)-1 # 循环至至只包含一个元素时跳出 while low <= high: # //:整数型除法(向下取整);/:浮点数除法 mid = (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)) # => 1 # 注意索引葱0开始,my_list[1]=3 print(binary_search(my_list,-1)) # => None
2、算法的运行速度是以大O表示法表示,其中从快到慢的五种大O运行时间如下所示:
(1)对数时间O(log n):二分查找(有序元素)
(2)线性时间O(n):简单查找
(3)O(n log n):快速排序在平均情况下运行时间 / 合并排序
(4)O(n^2):选择排序
(5)阶乘时间O(n!):(旅行商问题)
(6)常数时间O(1):散列表查找所需的时间


3、总结
①算法的速度并非指时间(不以秒为单位),而是操作数的增速。
②算法的速度是指随着输入的增加,其运行时间将以怎样的速度增加。
③搜索元素越多,O(log n)比O(n)越快。
④算法的运行速度是以大O表示法表示。
4、课后习题


答案:
1.1 O(log 128)=8
1.2 O(log 128)+1=9
1.3 O(log n)、O(n)……
1.4 O(n)
1.5 O(n)


浙公网安备 33010602011771号