Python資料結構和演算法筆記總結

2021-10-09 06:09:24 字數 3292 閱讀 9652

python資料結構

鍊錶鍊錶練習

佇列和棧

雜湊表遞迴

樹二叉樹總結

優劣排序:o(1) > o(logn) > o(n) > o(nlogn) > o(n^2) > o(2^n) > o(n!)

leetcode(力扣)刷題**:

演算法題多使用內建函式和考慮時間複雜度

內建函式:

pytest:測試工具

when-changed:自動監控檔案並執行單元測試工具(看門狗)

命令列執行:

when-changed -r -v -1 'filepath' pytest -s 'filepath'

-r(watch recursively):監聽

-v(verbose output):輸入詳細的資訊

-1:等待**更新後才繼續執行「filepath」檔案

-s:是pytest的命令,輸入print列印的資訊

學會用python類實現自己的抽象資料型別

了解魔術方法的概念和使用

練習:用python類實現乙個新的抽象資料型別揹包類bag,bag方法:建構函式、放入(add)、移除(remove)、長度(len)、遍歷(iter)

list練習

兩數之和

按奇偶排序陣列

搜尋二維矩陣 ii

移除元素

合併兩個有序陣列

鍊錶的概念概念

不同的鍊錶型別

單鏈表(linked list)

class node:

def __init__(self, value, next=none):

self.value = value

self.next = next

雙鏈表(double linked list)

class node:

def __init__(self, value, prev=none, next=none):

self.value, self.prev, self,next = value, prev, next

鍊錶練習

如何將乙個list構造乙個鍊錶並編寫乙個列印單鏈表的函式

反轉鍊錶

合併兩個排序的鍊錶

相交鍊錶

環形鍊錶

兩數相加

佇列 棧

棧練習用棧實現佇列

最小棧

有效的括號

概念 疑問

2、開放定址法(open addressing):

3、重雜湊:

2、雜湊表底層一般使用乙個陣列來實現。思考如何存乙個k/v結構

3、通過對雜湊函式計算key的下標插入到對應位置

雜湊表的應用

雜湊表的練習

兩個陣列的交集

兩個陣列的交集 ii

lru快取機制

詳細講解

遞迴的概念

遞迴的三個特點

解決遞迴問題的順序(重點*******)

4、還有一種簡單的思考方式:

動態規劃思想:最後需要考慮是否有重複計算的問題,將一些重複計算過的值使用中間變數/陣列/雜湊表儲存起來,這樣遞迴遇到之前算過的值就可以直接拿來用而不需要再去重複計算

掌握遞迴函式的編寫

2、正整數的階乘

3、漢諾塔問題

遞迴練習

斐波那契數

反轉鍊錶

全排列

樹的概念

樹的分類

**表示二叉樹

二叉樹的三種遍歷順序

非遞迴方式(使用棧)(標記法)

層序遍歷(使用list/佇列)

二叉樹練習

二叉樹的後序遍歷

二叉樹的層序遍歷

翻轉二叉樹

二叉樹的最大深度

從前序與中序遍歷序列構造二叉樹

3、返回值:根節點

根據一棵樹的前序遍歷與中序遍歷構造二叉樹。

注意:你可以假設樹中沒有重複的元素。

例如,給出

前序遍歷 preorder = [3,9,20,15,7]

中序遍歷 inorder = [9,3,15,20,7]

返回如下的二叉樹:

3/ \

9 20

/ \

15 7

# definition for a binary tree node.

# class treenode:

# def __init__(self, x):

# self.val = x

# self.left = none

# self.right = none

class solution:

def buildtree(self, preorder, inorder):

if not preorder:

return none

root_val = preorder[0]

root = treenode(root_val) # build root node

root_idx = inorder.index(root_val)

# 計算左右子樹的長度

left_len = root_idx

right_len = len(inorder)-root_idx-1

# 遞迴構造

if left_len:

root.left = self.buildtree(preorder[1:left_len+1], inorder[0:root_idx])

if right_len:

root.right = self.buildtree(preorder[left_len+1:], inorder[root_idx+1:])

return root

二叉樹總結

Python內建資料結構和演算法 學習筆記

注 有空看看原始碼實現原理 nametuple 建立命名元組子類的工廠函式 counter字典的子類,提供了可雜湊物件的計數功能ordereddict字典的子類,儲存了他們被新增的順序defaultdict字典的子類,提供了乙個工廠函式,為字典查詢提供乙個預設值 更多參考 python內建模組 di...

Python資料結構與演算法筆記(2)

problem solving with algorithms and data structure using python 中文版 3 基本資料結構 棧 佇列 deques 列表是一類資料的容器,它們資料項之間的順序由新增或刪除的順序決定。一旦乙個資料項被新增,它相對於前後元素一直保持該位置不變...

Python資料結構與演算法筆記(3)

problem solving with algorithms and data structure using python 中文版 4 遞迴 遞迴是一種解決問題的方法,將問題分解為更小的子問題,直到得到乙個足夠小的問題可以被很簡單地解決,通常遞迴設計函式呼叫自身。遞迴允許我們編寫優雅的解決方案,...