1.1演算法是一組完成任務的指令,任何**片段都可視為**。
1.2二分查詢:
在乙個有序的元素列表(必須有序)。如果要查詢的元素包含在列表中,則返回其位置;否則返回null。
工作原理:每次都從列表的中間進行查詢,每次都排除一半的數字。
例:在1-100中找到乙個我想的數。從50開始,小了,就找50-100之間的數75,大了,就找1-50之間的數25;以此類推,每次減少一半的數字,最終找到想要的數。
100-->50-->25-->13-->7-->4-->2-->1 7步
1.3簡單查詢。就是傻找,乙個乙個的按著順序查詢,不漏任何乙個數。
簡單查詢需要n步,而二分查詢需要log2
n步。1.4python**實現二分查詢
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
my_list = [1, 3, 5, 7, 9]
print(binary_search(my_list, 1))
print(binary_search(my_list, -1))
練習.(1).假設有乙個包含128個名字的有序列表,使用二分查詢需要多少步?
log2
128 = 7步
(2).上面列表翻倍後最多需要幾步?
log2
256 = 8步
1.5執行時間。
設計程式,一般而言應選擇效率最高的演算法,以最大限度的減少執行時間或占用空間。
簡單查詢的查詢次數和列表長度相同,這被稱為線性時間。
二分查詢的執行時間為對數時間。
1.6.大o表示法
演算法的執行時間以不同的速度增加。
大o表示法指出了演算法有多快,即指出了演算法執行時間的增速。簡單查詢執行時間為o(n)。二分查詢執行時間為o(log n)。
大o表示法指出了最糟情況下的執行時間。
o(log n),也叫對數時間,這樣的演算法包括二分查詢。
o(n), 也叫線性時間,這樣的演算法包括簡單查詢。
o(n * log n), 這樣的演算法包括快速排序----一種速度較快的排序演算法。
o(n2), 這樣的演算法包括選擇排序----一種速度較慢的排序演算法。
o(n!), 一直非常慢的演算法,類似旅行商問題的解決方案演算法。
練習:(1).
在**簿中根據名字查詢**號碼。
o(logn)
o(n)
(3). 閱讀**簿中每個人的**號碼。
o(n)
(4).閱讀**簿中姓名以a打頭的人的**號碼。這個問題比較棘手,它涉及第4章的概念。答案可能讓你感到驚訝!
o(n),大o表示法不考慮乘以、除以、加上或減去的
1.7.小結
演算法學習筆記1
1 二分查詢 int arr new int binatsearch arr,12 public static int binatsearch int arr,int a else return 1 使用要求 1 有序 實現思路 1 確定最壞情況沒找到 low height 2 二分查詢 基於最低最...
《演算法》學習筆記 演算法分析(1)
用於研究理解演算法的思想和方法 任務 科學家理解自然世界 策略 細緻地觀察真實世界的特點,通常還要有精確的測量 根據觀察結果提出假設模型 根據模型來 未來的事件 繼續觀察並核實 的準確性 如此反覆知道確認 和觀察一致 分類和類別 程式的執行時間。精確 近似 原理與通則 準確測量程式的執行時間是困難的...
雜湊演算法 學習筆記1
今天聽了洛谷的字串課之後,對於自己好好學學字串演算法也有了更大的動力。但由於比較弱,所以先從最最簡單的乙個開始。也就是雜湊演算法。它通過給每個字串賦予乙個 隨機 生成的整數的方法,使得可以用更加快的效率實現字串判重或者匹配字串等等操作。比如說如果有兩個字串s和s 長度分別為l和l 而我們要比較它們是...