Trie/字典树/前缀树
Trie树是一种针对字符进行特殊优化的数据结构,也许这也是它被称为字典树的缘故。 其优势在于: 节省存储空间: 假设存储这样的键值对: apple:1 app:2 appl:3 如果使用哈希表存储,则键值对会被存储在底层table数组中,意味着它真的创建了apple app appl字符串,占用了12个单位的空间 如果使用Tr...
Trie树是一种针对字符进行特殊优化的数据结构,也许这也是它被称为字典树的缘故。 其优势在于: 节省存储空间: 假设存储这样的键值对: apple:1 app:2 appl:3 如果使用哈希表存储,则键值对会被存储在底层table数组中,意味着它真的创建了apple app appl字符串,占用了12个单位的空间 如果使用Tr...
二叉搜索树理想的定位时间复杂度为树的高度O(log N),至于增删改的操作,需要先定位至目标节点,所以其时间复杂度也为O(log N)。
在实际的使用场景中,DFS算法通常用来穷举所有路径,而BFS算法常用来寻找最短路径。因为二叉树的深度遍历和广度遍历就是DFS算法和BFS算法的简单应用。 下面以一道简单的例题说明其中的道理:LeetCode 111 二叉树的最小深度即根节点到最近叶结点的距离。而DFS深度遍历和BFS广度遍历都可以解决该题。 DFS遍历解法: # Definition for a binary...
其实二叉树就是特殊的多叉树,多叉树的每个结点都有任意个结点,如下图所示: class TreeNode: def __init__(self, value): self.value = value self.children = [] 森林: 森林是多叉树的集合,一颗多叉树也是一种特殊的森林。 多叉树的遍历与二叉树一样,分为DFS和BFS两种。 ...
Background 使用机器生成的指令跟随数据(machine-generated instruction-following data)已经被证明能够在新任务上提升零样本能力,但是在多模态领域的探索还比较少,本文要将该思想引入多模态领域。 Introduction 目前的 本文主要贡献: 建立了多模态指令跟随数据(multimodal instruction-following ...
题设 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明:叶子节点是指没有子节点的节点。 示例1: 输入:root = [3,9,20,null,null,15,7] 输出:2 示例2: 输入:root = [2,null,3,null,4,null,5,null,6] 输出:5 提示: 树中节点数的范围在 $[0, 10^5...
二叉树的遍历算法主要分为两种:递归遍历以及层序遍历。其中递归遍历可以延伸出DFS算法、回溯算法,而层序遍历可以延伸出BFS算法。 递归遍历(DFS): 递归遍历的代码实现如下: class TreeNode: def __init__(self, value): self.value = value self.left = None ...
简述: 虽然二叉树本身作为基础数据结构并不是很难,但是很多更为复杂的数据结构都是基于二叉树的。例如:红黑树、多叉树、二叉堆、图、字典树、并查集、线段树等。 二叉树不单纯是一种数据结构,更代表这递归的算法思想,比如回溯算法,BFS算法,动态规划。 二叉树常见类型: 最普通的二叉树: 1 / \ 2 3 / / \ 4 5 6 / \ ...
我们的目的是在不改变哈希表增删改复杂度的前提下,能够按照插入顺序访问键,并且不受扩容缩容。 实现方式: 链表:将这些键值对插入双链表中,每次将键插入table数组时,将键同时添加至链表末端。 这样从head开始遍历就能按照插入顺序访问。 我们可以在O(1)的时间复杂度内: 通过键查找到对应的双链表节点,进而找到对应...
线性探查法实现要点: 将问题简化为:key和value的类型均为int,且table.length = 10,hash函数的实现为hash(key) = key % 10。 使用环形数组技巧:遍历到数组末尾时若仍然没有空位则需要转到数组首部继续寻找。 删除操作需谨慎!: 若直接置空则会影响元素连续性。 操作如下: add(0, a) add(10, b) add(20,...