Tree
有关树的算法及实现
高一少年
Things will come your way
展开
-
HashMap - 哈希表
文章目录TreeMap分析HashMaphashLong和Double的哈希值字符串的哈希值关于31的探讨扰动计算自定义对象作为keyHash CollisionJDK1.8的哈希冲突解决方案putcontainsKeycontainsValue扩容TreeMap分析内部通过红黑树实现节点存储Entity映射◼ 时间复杂度(平均)添加、删除、搜索:O(logn)◼ 特点Key 必须具备可比较性元素的分布是有顺序的◼ 在实际应用中,很多时候的需求Map 中存储的元素不需要讲究顺序原创 2020-07-16 20:55:56 · 558 阅读 · 0 评论 -
B Tree
本文采用主动插入算法首先介绍一下B树:B -树是一种自平衡搜索树。在大多数其他的自平衡搜索树(如AVL和红黑树)中,都假定所有内容都在主内存中。要理解b -树的用法,我们必须考虑无法装入主内存的大量数据。当键数高时,数据以块的形式从磁盘读取。与主存访问时间相比,磁盘访问时间非常高。使用b树的主要思想是减少磁盘访问的次数。大多数的树操作(搜索,插入,删除,最大,最小,…等)需要O(h)磁盘访问...原创 2020-01-17 12:11:57 · 521 阅读 · 0 评论 -
Trie
Trie 也称 字典树 前缀树class Node(object): def __init__(self): self.char = None self.children = {} self.parent = None self.value = None self.isword = Falseclas...原创 2019-12-04 18:33:56 · 162 阅读 · 0 评论 -
Red Black Tree - RBTree
文章目录红黑树的性质红黑树 vs 2-3-4树添加删除代码实现插入红黑树的性质节点是RED或BLACK根节点必须是BLACK叶子节点(外部节点)都是BLACK,(把度为1或度为0的节点假想补成度为2的节点)RED节点的子节点为BLACK推论: RED节点的父结点为BLACK推论:从根节点到叶子节点的所有路径上不能有2个连续的RED节点从任意节点到叶子节点的所有路径都包含相同数目的...原创 2019-12-01 14:07:38 · 369 阅读 · 0 评论 -
伸展树(SplayTree)-Python实现
文章目录伸展树(Splay Tree)的特点搜索(Search)插入(insert)归纳代码实现Reference:https://www.geeksforgeeks.org/splay-tree-set-2-insert-delete/伸展树(Splay Tree)的特点二叉搜索树(BST)操作最坏情况下的时间复杂度为O(n)。最坏的情况发生在树倾斜的时候。通过AVL和红黑树,我们可以...原创 2019-11-26 10:56:42 · 733 阅读 · 2 评论 -
多源最短路径-Floyd算法
Floyd算法-Python实现dist表示为从i到j的最短路径,但是只经过编号小于等于k的路径最短路径是一步一步生成的从0个顶点开始,一步一步增加顶点初始矩阵对角元全部是0,不邻接为无穷大当dist前k-1步已经完成,递推地求解dist第k步如果k不在从i到j的最短路径中,即不影响最短路径,dist第k步=第k-1步如果k在从i到j的最短路径中,从i到j一定经过k,则该路径必然...原创 2019-11-09 09:56:40 · 267 阅读 · 0 评论 -
最小生成树-Kruskal算法
Kruskal算法更为直接地贪心,每次从图中找:没有收录的不会构成回路的权重最小的边class Edge: def __init__(self, weight=None, v1=None, v2=None): self.weight = weight self.v1 = v1 self.v2 = v2 def __lt__...原创 2019-11-08 13:13:29 · 108 阅读 · 0 评论 -
最小生成树-Prim算法
最小生成树(Minimum Spanning Tree)特点:首先是一棵树:没有回路V个顶点一定有V-1条边其次是生成树:包含所有顶点并且只能从现有边生成树的边向生成树中任意加一条边都一定会构成回路边的权重和最小贪心算法每一步都要最好的什么是好?即权重最小的边但是有约束:只能用图中的边只能正好用V-1条边不能构成回路Prim算法代码实现:graph = {...原创 2019-11-08 13:03:30 · 356 阅读 · 0 评论 -
单源最短路径-Dijkstra算法
文章目录无权图-BFS有权图-Dijkstra算法无权图-BFSgraph = { 1:[2,4], 2:[4,5], 3:[1,6], 4:[3,5,6,7], 5:[7], 6:[], 7:[6],}from collections import dequedist = {}path = {}def bfs(graph,...原创 2019-11-06 15:25:37 · 193 阅读 · 0 评论 -
哈夫曼树-Huffman Tree
class HeapNode: def __init__(self, char=None, weight=None, left=None, right=None): self.char = char self.weight = weight self.left = left self.right = right de...原创 2019-12-01 09:59:06 · 295 阅读 · 0 评论 -
AVL树-平衡二叉树
AVLTree——BalancedTree(平衡二叉树)任意节点的左子树的高度与右子树的高度差的绝对值≤1注意AVL树本质上还是搜索树:所有节点满足: 左子树<父结点<右子树class Node(object): def __init__(self, key): self.key = key self.left = None self...原创 2019-11-02 10:08:22 · 322 阅读 · 0 评论 -
二叉树遍历应用
1. 二叉树的先序、中序、后序遍历的递归实现2. 二叉树的层序遍历3. 二叉树的先序遍历的迭代实现4. 二叉树的中序遍历的迭代实现5. 二叉树的后序遍历的迭代实现from collections import dequeclass BTreeNode(object): """docstring for BinaryTreeNode""" def __init__(sel...原创 2019-11-01 14:29:12 · 823 阅读 · 0 评论 -
heap
最大堆的特点:父结点都比它的孩子结点大堆都是完全二叉树,所以就可以使用数组实现堆那么父结点和左孩子和右孩子的index就存在如下关系:结点下标(index) 以0开始父结点i左孩子2*i+1右孩子2*i+2堆的操作:插入和删除每次操作之后要进行上筛和下筛,维持最大堆的特性class MaxHeap(object): """docst...原创 2019-10-31 12:47:36 · 789 阅读 · 0 评论 -
BST-Binary Search Tree
BST——二叉搜索树特点:对于每个结点它的左子树都比它小,右子树都比它大对BST进行中序遍历(左 < 根 < 右),得到正好是排好序的结果class BSTNode(object): """docstring for BSTNode""" def __init__(self,key,value,left=None,right=None): se...原创 2019-10-31 11:13:07 · 207 阅读 · 0 评论