Skip to content

Latest commit

 

History

History
 
 

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

学习笔记

剪枝

双向搜索:双向BFS

启发式搜索

估价函数

启发式函数: h(n), 它用来评价哪些结点最有希望的是一个我们要找的结点, h(n)会返回一个非负实数, 也可以认为是从结点n的目标结点路径的估计成本。

启发式函数是一种告知搜索方向的方法。它提供了一种明智的方法来猜测哪个邻居结点会导向一个目标。

A*代码模板

def AstarSearch(graph, start, end):

​ pq = collections.priority_queue() # 优先级 —> 估价函数

​ pq.append([start])

​ visited.add(start)

​ while pq:

​ node = pq.pop() # can we add more intelligence here ?

​ visited.add(node)

​ process(node)

​ nodes = generate_related_nodes(node)

unvisited = [node for node in nodes if node not in visited]

​ pq.push(unvisited)

AVL树:

Balance Factor(平衡因子):

是它的左子树的高度减去它的右子树的高度(有时相反)。

balance factor = {-1, 0 ,1}

通过旋转操作来进行平衡(四种:左旋,右旋,左右旋,右左旋)

不足:结点需要存储额外信息,且调整次数频繁

红黑树:

近似平衡的二叉搜索树, 能够确保任何一个结点的左右子树的高度差小于两倍

特点:

每个结点要么是红色,要么是黑色

根节点是黑色

每个叶节点是黑色的

不能有相邻接的两个红色结点

从任一结点到其每个叶子的所有路径都包含相同数目的黑色结点

读操作很多,但写操作很少的情况下,用AVL树

如果查询,插入操作比较多,用红黑树