python中array 是一整塊單一連續的記憶體區域,根據索引值訪問的話可以直接計算出目標元素在記憶體中的位置,對於鍊錶要從頭開始遍歷
鍊錶插入代價小,數值插入代價大,要移動右邊所有的元素
這邊的陣列指動態陣列
複雜度o
構建排序演算法之前先對序列進行檢查,如果目標已經排過序則直接返回
def sort_w_check():
n=len(seq)
for i in range(n-1):
if seq[i] >seq[i+1]:
break
else:
return
....
排序的三種情況:
1.最好情況,已經排好序,線性時間
2.最壞情況
3.平均情況,期望時間
演算法評估:
用timeit模組
import timeit
t1=timeit.timeit("x=2+2")
print(t1)
t2=timeit.timeit("x=sum(range(10))")
print(t2)
計算時間,但對於多次迭代時timeit會通過多次執行相關**的方式來提高計時精度
圖結構:
圖的要點主要包括:
python中字典型別dict就是常說的雜湊表,集合型別也是通過這種機制完成的,
對於雜湊的訪問平局時間為o(1),最壞為o(n)
鄰接列表及類似的結構
示意圖
示意圖轉換為鄰接集表示方法
a,b,c,d,e,f,g,h=range(8)
n=[ ,,,
,,,,
]
加權的鄰接列表
a,b,c,d,e,f,g,h=range(8)
n=[ ,,,
,,,,
]
鄰接集的字典表示法:
n=
樹
二叉樹
class
tree
(object):
"""docstring for tree"""
def__init__
(self, left,right)
: self.left=left
self.right=right
t=tree(tree(
"a",
"b")
,tree(
"c",
"d")
)print
(t.right.left)
多路搜尋樹
隱性平方級操作
例子
import time
from random import randrange
l=[randrange(10000) for i in range(1000)]
t1=time.time()
print(42 in l)
t2=time.time()
print(t2-t1)
s=set(l)
t3=time.time()
print(42 in s)
t4=time.time()
print(t4-t3)
對list的搜尋是線性數量級的,set的搜尋是常數級 演算法學習筆記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.1演算法是一組完成任務的指令,任何 片段都可視為 1.2二分查詢 在乙個有序的元素列表 必須有序 如果要查詢的元素包含在列表中,則返回其位置 否則返回null。工作原理 每次都從列表的中間進行查詢,每次都排除一半的數字。例 在1 100中找到乙個我想的數。從50開始,小了,就找50 100之間的...
《演算法》學習筆記 演算法分析(1)
用於研究理解演算法的思想和方法 任務 科學家理解自然世界 策略 細緻地觀察真實世界的特點,通常還要有精確的測量 根據觀察結果提出假設模型 根據模型來 未來的事件 繼續觀察並核實 的準確性 如此反覆知道確認 和觀察一致 分類和類別 程式的執行時間。精確 近似 原理與通則 準確測量程式的執行時間是困難的...