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

 

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)

 

 

posted @ 2021-09-26 21:35  Annuush  阅读(31)  评论(0)    收藏  举报