随笔分类 - 数据结构与算法
摘要:1. B树是什么 相比较与二叉树,B树就是一种多分树,它的子节点可以大于二叉,主要应用于静态索引数据,它是AVL树的进化版,B树的左节点比父节点小,右节点比父节点大。 1. 定义 1. 每个结点最多只有m个子结点(m值B树的阶) 2. 除根节点外,每个非叶子结点最少有m/2个子结点 3. 非叶子节点
阅读全文
摘要:1. 什么是贪心算法 贪心算法,又称贪婪算法,是一种在解决问题的过程中追求局部最优的算法,对于一个有多种属性的事物来说,贪心算法会优先满足某种条件,追求局部最优的同时希望达到整体最优的效果。它并不保证得到整体的最优解,但在某些问题上,贪心算法的解就是最优解。 2. 找零问题 描述:有若干面值的纸币,
阅读全文
摘要:1. 红黑树的概念 红黑树从平衡二叉搜索树延伸出来的一种较为复杂的数据结构,它会对树的各个节点进行着色标记(红色和黑色),相对于AVL树来说,牺牲了部分平衡性以换取插入/删除操作时少量的旋转操作,(插入最多需要旋转2次,删除最多需要旋转3次),整体来说性能要优于AVL树。在插入和删除操作的时候依据节
阅读全文
摘要:1. 二叉搜索树 二叉搜索树又称二叉排序树,他的左子树上的节点都小于根节点,他的右子树上的节点都大于根节点,每一个左右子树又是一个二叉搜索树 2. 删除节点的几种情况: 3. 二叉搜索树的实现: # 构建节点类 class BiTreeNode: def __init__(self, item):
阅读全文
摘要:1. AVL树的概念 AVL树又称为高度搜索树,它是一个特殊的二叉搜索树,当元素接近于有序的时候,二叉树也会变成一个单链树,所以AVL树就是平衡二叉搜索树,当插入一个节点,树的任意一个左右子树的高度差都<=1,称为AVL树 上图左边的二叉树的每个节点的左右子树的最大高度差都不超过1,而右边的二叉树的
阅读全文
摘要:1. 哈希表的概念 哈希表:也叫做散列表。根据关键字和值(Key-Value)直接进行访问的数据结构。它通过关键字 key 和一个映射函数 Hash(key) 计算出对应的值 value,然后把键值对映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做哈希函数(散列函数),用于存放记录的
阅读全文
摘要:1. 二叉树的概念 二叉树是n个有限元素的集合,该集合或为空、或由一个根节点及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。当集合为空时,称该二叉树为空二叉树。二叉树又分为满二叉树和完全二叉树 满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说
阅读全文
摘要:1. 树的概念 树是一种非线性的数据结构,由n(n>=0)个有限节点组成,n=0是称为空数。 树的特点: 1. 数有一个根节点,根节点没有前驱节点 2. 除根节点外的其他节点有可以组成互不相交的集合,每个集合有是一棵树 3. 子树根节点只有一个前驱节点,可以有0个或多个后驱节点 4. 树是一种可以递
阅读全文
摘要:1. 什么是链表 链表(Linked List):一种线性表数据结构。它使用一组任意的存储单元(可以是连续的,也可以是不连续的),来存储一组具有相同类型的数据。即「链表」 是实现线性表的链式存储结构的基础。 1. 单链表 每个数据元素占用若干存储单元的组合称为一个「链节点」,还存放一个指出这个数据元
阅读全文
摘要:1. 栈:后进先出 2. 栈的实现 class Stack: def __init__(self): self.stack = [] def push(self, ele): # 进栈 self.stack.append(ele) def pop(self): # 出栈 self.stack.pop
阅读全文
摘要:1. 给定一个 n 个元素有序的整型数组 nums和一个目标值 target,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 from typing import List class Solution: # nums: List[int] 变量类型限制,表示
阅读全文
摘要:1. 时间复杂度 1. 时间复杂度是衡量一个算法运行所需的时间,是一个函数,由于执行时间需要经过测试才能得出,而算法执行的时间和执行次数成正比例关系,所以我们的时间复杂度根据算法的执行次数来确定。常见的时间复杂度:O(1) < O(logN) < O(N) < O(N logN) < O(N²) <
阅读全文
浙公网安备 33010602011771号