通用程式設計 雜湊表 搜尋樹 堆

2021-10-02 16:07:20 字數 2742 閱讀 1250

o(1)的時間複雜度

python中的字典dict就是雜湊表。

enumerate(list)#生成乙個有序列,且可迭代的字典

zip()

nums = list

dict1 = {}

# 將列表轉換成字典,並計數

for v in nums:

dict1[v] = dict1.get(v, 0) + 1

#tems把字典變為可以遍歷的鍵值對元組陣列

res = dict1.items()

二叉搜尋樹(binary search tree),又名二叉排序樹(binary sort tree)。

二叉搜尋樹是具有有以下性質的二叉樹:

利用二叉搜尋樹的性質:二叉搜尋樹的前序遍歷是乙個嚴格上公升序列。

class treenode(object):

def __init__(self, x):

self.val = x

self.left = none

self.right = none

class solution(object):

#中序遍歷

def inorder(self, root):

if not root:

return

left = self.inorder(root.left)

right = self.inorder(root.right)

return left + [root.val] + right

#驗證二叉樹

def isvalidbst(self, root):

inorderlist = self.inorder(root)

for i in range(len(inorderlist) - 1):

if inorderlist[i] >= inorderlist[i + 1]:

return false

return true

def generate_related_nodes(visited, node):

next_node_list =

if node.left not in visited and node.left:

if node.right not in visited and node.right:

return next_node_list

# 廣度優先搜尋主函式

def bfs(tree, start):

queue =

visited = {}

visited[start] = 0

while queue:

#從陣列頭部依次拿出每個資料,訪問每個節點

node = queue.pop(0)

#記錄訪問過的節點

visited[node] = 0

#對節點進行一些操作

print(node.val)

#將下一層的節點插在陣列尾部

queue.extend(generate_related_nodes(visited, node))

if __name__=="__main__"

bfs(root,root)

visited = {}

def dfs(root):

visited[root] = 1

print(root.val)

for node in [root.left, root.right]:

if node and node not in visited:

dfs(node)

堆的實現通過構造二叉堆(binary heap),實為二叉樹的一種;由於其應用的普遍性,當不加限定時,均指該資料結構的這種實現。這種資料結構具有以下性質。

任意節點小於(或大於)它的所有後裔,最小元(或最大元)在堆的根上(堆序性)。

堆總是一棵完全樹。即除了最底層,其他層的節點都被元素填滿,且最底層盡可能地從左到右填入。

'''

heaqp模組提供了堆佇列演算法的實現,也稱為優先順序佇列演算法。

要建立堆,請使用初始化為的列表,或者可以通過函式heapify()將填充列表轉換為堆。

提供以下功能:

將值項推入堆中,保持堆不變。

heapq.heapreplace(替換)

刪除堆頂並插入。

heapq.heapify(x)

彈出並返回堆中的最小項,保持堆不變。如果堆是空的,則引發indexerror。

'''import heapq

heap =

data = [1,3,5,7,9,2,4,6,8,0]

for i in data:

print(heap)

lis =

while heap:

print(lis)

data2 = [1,5,3,2,9,5]

heapq.heapify(data2)

print(data2)

lis2 =

while data2:

print(lis2)

#輸出結果

[0, 1, 2, 6, 3, 5, 4, 7, 8, 9]

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

[1, 2, 3, 5, 9, 5]

[1, 2, 3, 5, 5, 9]

用雜湊表搜尋物件

net framework中的大多數容器都是序列式容器 sequence containers 它們按順序儲存物件。這種型別的容器功能很多 你可以以任何特殊的順序來儲存任意數量的物件。然而,這種多功能性是以一定的效能為代價的。在乙個序列中查詢乙個特殊的物件所需要的時間取決於容器中物件的數量。如果我們...

Datawhale程式設計 雜湊表

雜湊表就是一種以 鍵 值 key indexed 儲存資料的結構,我們只要輸入待查詢的值即key,即可查詢到其對應的值。雜湊的思路很簡單,如果所有的鍵都是整數,那麼就可以使用乙個簡單的無序陣列來實現 將鍵作為索引,值即為其對應的值,這樣就可以快速訪問任意鍵的值。這是對於簡單的鍵的情況,我們將其擴充套...

題解 八數碼問題 (雜湊表 搜尋)

題意 3 3九宮棋盤,放置數碼為1 8的8個棋牌,剩下乙個空格,只能通過棋牌向空格的移動來改變棋盤的布局。給出初始布局和目標布局,問最少多少步移動能夠使初始布局變為目標布局 分析 題目思路很清晰,直接廣搜即可。但是問題是如何儲存狀態並且判重?我們對於每乙個狀態進行觀察,均是由0 8構成的乙個全排列,...