【笔记】Python算法教程(1)
1、關于list
Python里的list不是單(雙)向鏈表,是順序表,是一整塊單一連續的內存區塊----我們通常稱之為數組(array)。這樣做的好處有兩點:這樣按照既定索引值對某元素進行直接訪問時更方便;append是在列表末尾添加,insert必須移動插入點右邊所有的數據,故方便用append。
2、關于復雜度
任何多項式級算法的復雜度都要高于對數級;任何指數級算法的復雜度都要高于多項式級算法。
3、range 函數
| >>> range(1,5) #代表從1到5(不包含5) [1, 2, 3, 4] >>> range(1,5,2) #代表從1到5,間隔2(不包含5) [1, 3] >>> range(5) #代表從0到5(不包含5) [0, 1, 2, 3, 4] |
5、使用timeit模塊來計時。
import timeit timeit.timeit("x=2+2")6、通過profiler來運行程序: import cProfile cProfile.run('main()')這樣就應該能打印出程序中各函數的計時結果。
7、可通過trace模塊來完成這部分測試
8、圖G=(V,E)。V是節點,E是邊。
9、散列hashing,會涉及一些經由某既定對象計算而來的整數值。(而且乍看之下像是隨機的)
假設你有這樣一個函數: ?
hash(name)?
該函數根據輸入的名字,通過一些計算法則返回區間[1,N]中的某個數值,那么為什么不將名字和電話號碼存儲在表的第 hash(name)位置呢。?
注意哈希函數有點小奇特,它必須是完全確定性的。按理說就是對于你輸入的同一名字,哈希函數始終返回相同的數值,而每個不同的名字則應返回不同的固定值。正如你所料這種特性并不總是能滿足的。?
使用這種方案,在表中查找名字,實際僅就是計算 hash(name)的值,然后在這個值標識的 表中的那個位置 去看看你要查的名字是不是存儲在那了。?
是的,這就是關于hash的全部,盡管還有一些其他的實用細節,但其核心思想就是 用 hash(name)來確定名字在表中的存儲地址。
10、表示圖的結構方法:
鄰接集( ?{ } ?)、鄰接列表(list[])、鄰接矩陣(檢查矩陣單元N[a][b]是否為真)表示法。N(v)代表的是v的鄰居節點集。
較為稀疏的時候比較適合鄰接列表,較為稠密的時候比較適合鄰接集。
11、集合set。python的set和其他語言類似, 是一個無序不重復元素集, 基本功能包括關系測試和消除重復元素. 集合對象還支持union(聯合), intersection(交), difference(差)和sysmmetric difference(對稱差集)等數學運算. ? ? ?sets 支持 x in set, len(set),和 for x in set。作為一個無序的集合,sets不記錄元素位置或者插入點。因此,sets不支持 indexing, slicing, 或其它類序列(sequence-like)的操作。
12、可以直接利用類似直覺,將其各個子樹組織成一個子樹列表。
總結
以上是生活随笔為你收集整理的【笔记】Python算法教程(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 调用函数 开销_Pytho
- 下一篇: 用c#做聊天软件