1.1 更佳的查詢方式
二分查詢是一種演算法,其輸入是乙個有序的元素列表。如果要查詢的元素包含在列表中,二分查詢返回其位置,否則返回null。
一般而言,對於包含 n 個元素的列表,用二分查詢最多需
步,而簡單查詢最多需要
步。僅當列表是有序的時候,二分查詢才管用。
**清單1-1 二分查詢
#1.2 執行時間-*- coding: utf-8 -*-
defbinary_search(list1, item):
#(以下2行)low和high用於跟蹤要在其中查詢的列表部分
low =0
high = len(list1)-1
#只要範圍沒有縮小到只包含乙個元素,
while low <=high:
#就檢查中間的元素
mid = (low + high) / 2guess =list1[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]
#=> 1,別忘了索引從0開始,第二個位置的索引為1
print binary_search(my_list, 3)
#=> none,在python中,none表示空,它意味著沒有找到指定的元素
print binary_search(my_list, -1)
一般而言,應選擇效率最高的演算法,以最大限度地減少執行時間或占用空間。
線性時間(linear time):最多需要猜測的次數與列表長度相同。
對數時間(log時間):二分 查詢的時間為對數時間。
1.3 大o表示法
大o表示法是一種特殊的表示法,指出了演算法的速度有多快。
隨著元素數量的增加,二分查詢需要的額外時間並不多,而簡單查詢的額外時間卻很多。因此,隨著列表的增長,二分查詢的速度比簡單查詢快得多。
大o表示法指出了演算法有多快。例如,假設列表包含n個元素。簡單查詢需要檢查每個元素,因此需要執行 n 次操作。使用大o表示法,這個執行時間為
。二分查詢需要執行
,使用大o表示法,這個執行時間為
。大o表示法讓你能比較運算元,它指出了演算法執行時間的增速。
1.4 一些常見的大o執行時間
,也叫對數時間,這樣的演算法包括二分查詢。
,也叫線性時間,這樣的演算法包括簡單查詢。
,這樣的演算法包括快速排序——一種速度較快的排序演算法。
,這樣的演算法包括選擇排序——一種速度較慢的排序演算法。
,這樣的演算法包括旅行商問題的解決方案——一種非常慢的演算法。
1.5 旅行商
有一位旅行商,他需要前往5個城市。這位旅行商要前往5個城市,同時要確保旅程最短。為此,可考慮前往這些城市的各種可能順序。對於每種順序,他都計算總旅程,再挑選出旅程最短的路線。5個城市有5!=5*4*3*2*1=120中不同的排列方式。因此,在涉及5個城市時,解決這個問題需要執行120次操作。
推而廣之,涉及n個城市時,需要執行n!(n的階乘)次操作才能計算出結果。因此執行時間為
,即階乘時間。
演算法學習筆記1 演算法簡介
1.1演算法是一組完成任務的指令,任何 片段都可視為 1.2二分查詢 在乙個有序的元素列表 必須有序 如果要查詢的元素包含在列表中,則返回其位置 否則返回null。工作原理 每次都從列表的中間進行查詢,每次都排除一半的數字。例 在1 100中找到乙個我想的數。從50開始,小了,就找50 100之間的...
粒子群演算法 1 粒子群演算法簡介
粒子群演算法簡介 一 粒子群演算法的歷史 粒子群演算法源於複雜適應系統 complex adaptive system,cas cas理論於1994年正式提出,cas中的成員稱為主體。比如研究鳥群系統,每個鳥在這個系統中就稱為主體。主體有適應性,它能夠與環境及其他的主體進行交流,並且根據交流的過程 ...
粒子群演算法 1 粒子群演算法簡介
原文 粒子群演算法簡介 一 粒子群演算法的歷史 粒子群演算法源於複雜適應系統 complex adaptive system,cas cas理論於1994年正式提出,cas中的成員稱為主體。比如研究鳥群系統,每個鳥在這個系統中就稱為主體。主體有適應性,它能夠與環境及其他的主體進行交流,並且根據交流的...