演算法圖解 第1章 演算法簡介
- 2019 年 11 月 6 日
- 筆記
二分查找
定義
一種演算法,輸入是一個有序的元素列表,如果查找的元素包含在列表中,則二分查找返回其位置,否則返回null
;
演算法實現
#!/usr/bin/env python # -*- coding: utf-8 -*- # @version : 1.0 # @Time : 2019-10-26 9:47 # @Author : cunyu # @Email : [email protected] # @Site : https://cunyu1943.github.io # @File : binay_search.py # @Software: PyCharm # @Desc : 二分查找 # 二分查找,其中list必須為有序列表 # list是要查找的數組,item是要查找的元素 def binary_search(list, item): # 起始位置初始化列表為第一個元素 low = 0 # 終止位置為列表最後一個元素 high = len(list) - 1 # 循環到範圍只包含一個元素 while low <= high: mid = (low + high) // 2 guess = list[mid] # 若找到需要查找的元素 if guess == item: return mid # 若猜的數字大於查找的元素 elif guess > item: high = mid - 1 # 若猜的數字小於查找的元素 else: low = mid + 1; # 若未找到指定元素 return None if __name__ == '__main__': my_list = [3, 4, 8, 11, 13, 20] item = int(input('輸入你要查找的元素n')) print('元素 ' + str(item) + ' 的索引位置(從0開始):') print(binary_search(my_list, item))
練習
- 一個含有128個元素的有序列表,使用二分查找查找某元素,最多需要幾步?
,所以最多需要7步就可以找到指定元素;
- 1中列表長度翻倍後,最多需幾步?
翻倍後,,所以最多需要8步;
運行時間
- 線性時間(linear time):所需時間與查詢列表長度成線性關係,則成為線性時間;
- 對數時間(log time)
簡單查找 |
二分查找 |
---|---|
100個元素最多需100次 |
100個元素最多需7次 |
10000個元素最多需10000次 |
10000個元素最多需14次 |
|
|
線性時間 |
對數時間 |
大表示法
一種特殊表示法,指出演算法速度;
常見大運行時間
- :對數時間,如二分查找;
- :線性時間,如簡單查找;
- :如快速排序;
- :如選擇排序;
- !:如旅行商問題;
總結
- 演算法速度並非時間,而是操作數的增速;
- 演算法運行時間用大表示法表示;
- 快於,當搜索元素較多時,前者比後者快得多;