随笔分类 - 数据结构与算法
摘要:动态规划 Dynamic Programming 一种设计的技巧,是解决一类问题的方法 dp遵循固定的思考流程:暴力递归 —— 递归+记忆化 —— 非递归的动态规划(状态定义+转移方程) 斐波那契数列 暴力递归,看上去很简洁 def fib(n): return n if n <= 1 else f
阅读全文
摘要:染色问题 其实就是对图进行上下左右四个方向的dfs或者bfs,再加上一些条件判断并做一些操作。举例说明 Leetcode #733. 图像渲染:有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间。给你一个坐标 (sr, sc) 表示图像渲染开始的像素值
阅读全文
摘要:Cache 缓存 1. 记忆 2. 空间有限 3. 钱包 - 储物柜 4. 类似背代码模板,O(n) 变 O(1) LRU Cache 缓存替换算法 1. Least Recently Used(最近最少使⽤的淘汰掉) 2. Hash Table + Double LinkedList(哈希表 +
阅读全文
摘要:并查集 union & find 是一种树型的数据结构,用于处理一些不交集(Disjoint Sets)的合并及查询问题。一般用数组实现。 Find:确定元素属于哪一个子集。它可以被用来确定两个元素是否属于同一子集。 Union:将两个子集合并成同一个集合。 在现实生活中的例子 1. 小弟 => ⽼
阅读全文
摘要:位运算 Bitwise operations 由于位运算直接对内存数据进行操作,不需要转成十进制,因此处理速度非常快。 常见位运算符: 编程常用的位运算操作 x & 1 == 1 or == 0 判断 x 的二进制最后是 1 还是 0,即判断奇偶性(x % 2 == 1) x = x & (x -
阅读全文
摘要:哈希函数 通过哈希表可以实现 O(1) 复杂度的查找。 哈希函数构造方法:设计好的哈希函数的两个基本原则,计算简单+分布均匀 1. 直接定址法 用key自身的某个线性函数来定址,f(key) = a*key + b。但需要知道关键字的分布情况。 2. 数字分析法 适合处理关键字位数比较大的情况。抽取
阅读全文
摘要:排序算法的稳定性:一个稳定的排序算法,如果两个等值键R和S在排序前后次序不变,称其是稳定的 例如排序之前的序列为:(4, 1) (3, 1) (3, 7)(5, 6) (3, 1) (3, 7) (4, 1) (5, 6) 维持次序,稳定 (3, 7) (3, 1) (4, 1) (5, 6) 次序
阅读全文
摘要:静态查找:数据集合稳定,不需要添加删除元素的查找操作。 动态查找:查找过程中需要同时添加或删除元素。 查找结构 静态:线性表 动态:二叉排序树、哈希 1. 顺序查找:遍历待查数组,逐个与关键字比较,匹配则查找成功。O(n) 2. 二分查找 数组必须要有序;数组存在明确的上下界;能够通过索引访问(所以
阅读全文
摘要:多对多关系。顶点的有穷非空集合和顶点之间边的集合构成,表示为G(V, E)。 数据元素在线性表中叫元素、树中叫结点、图中叫顶点vertex。边无方向称为无向边,用无序偶(Vi, Vj)来表示。有向边(也称为弧)用有序偶<Vi, Vj>来表示。<弧尾,弧头> 基础概念 简单图:不存在顶点到自身的边,且
阅读全文
摘要:树:n(n>=0)个节点的有限集。有且只有一个root,子树的个数没有限制但互不相交。结点拥有的子树个数就是该结点的度(Degree)。度为0的是叶结点,除根结点和叶结点,其他的是内部结点。结点的层次(Level)从根结点开始从1计数,树中结点的最大深度称为树的深度(Depth)。树中结点的子树看成
阅读全文
摘要:用数值模拟非数值,比如ASCII码表 string:由零个或多个字符组成的有限序列 字符串的存储结构和线性表一样,也分顺序存储和链式存储,习惯上还是用顺序表。 子串匹配: Brute Force 算法 朴素的模式匹配方法,按字符依次匹配,一个文本串s和一个模式串p,查找p在s中的位置,最坏时间复杂度
阅读全文
摘要:递归 Recursion 通过函数体来进行的循环,一种编程技巧。倒着思考,看到问题的尽头。思路简单但效率低(建立函数的副本,消耗大量时间和内存)。递归是分治和动态规划的基础,而贪心是动态规划中的一种特殊情况(局部最优也是全局最优)。 终止条件(最简子问题的答案) + 自身调用(解决子问题),不要试图
阅读全文
摘要:栈 一种重要的线性结构;后进先出。特殊的线性表,只能在表尾进行插入(push)和删除(pop)操作。 表尾称为栈顶(top),表头称为栈底(bottom)。一般用顺序表实现。 清空一个栈:s->base = s->top 销毁一个栈:释放其所占的物理内存空间。 for(i=0, i<s->stack
阅读全文
摘要:线性表:由零个或多个数据元素组成的有限序列。 元素之间有先后关系,若有多个元素,第一个无前驱最后一个无后继,其他元素都只有一个前驱和后继。(一对一关系) 数据类型:一组性质相同的值的集合及定义在此集合上的一些操作的总称。 抽象数据类型:一个数学模型及定义在该模型上的一组操作。(对已有数据类型进行抽象
阅读全文
摘要:程序设计 = 数据结构 + 算法 数据结构:逻辑结构(数据对象中数据元素之间的相互关系)和物理结构(数据的逻辑结构在计算机中的存储形式)。 逻辑结构:集合结构(只有同属一个集合的关系)、线性结构(一对一的关系)树形结构(存在一对多的层次关系)、图形结构(多对多的关系)。 物理结构:顺序存储(把数据放
阅读全文

浙公网安备 33010602011771号