随笔分类 -  算法

摘要:一、算法理解 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,它所做出的仅是在某种意义上的局部最优解。也就是说在每一步中,选择目前最优的策略,而不考虑全局是不是最优的。 贪心算法的前提: 1、 原问题复杂度过高 2、 求全局最优解的数学模型难以建立 阅读全文
posted @ 2021-07-26 20:18 小拙 阅读(235) 评论(0) 推荐(0)
摘要:一、算法理解 【基本概念】: 动态规划(dynamic programming),就是对原问题分解,分解成子问题,通过解决子问题从而解决原问题。动 态规划应用于 子问题重叠的情况(分而治之方法子问题独立不相交),即 不同子问题具有公共的子问题 。动态规 划通过对子子问题的求解然后保存求解结果,从而无 阅读全文
posted @ 2021-07-26 20:16 小拙 阅读(468) 评论(0) 推荐(0)
摘要:参考:https://blog.csdn.net/qq_38737992/article/details/95635940 一、算法理解 深度优先搜索算法(Depth-First-Search,DFS)是一种用于遍历或搜索树或图的算法。沿着树的深度遍历树的节 点,尽可能深的搜索树的分支。当节点v的所 阅读全文
posted @ 2021-07-22 21:09 小拙 阅读(1342) 评论(0) 推荐(0)
摘要:一、算法理解 广度优先搜索算法(Breadth-First-Search,BFS),又称宽度优先搜索。作为最简便的图的搜索算法之一,是很多重要图算法的基本原型,如Dijkstra最短路径算法和Prime最小生成树算法。其核心思想是: 从初始节点开始,应 用产生式规则生成第一层节点,检查目标节点是否在 阅读全文
posted @ 2021-07-22 18:55 小拙 阅读(797) 评论(0) 推荐(0)
摘要:一、算法理解 前缀和概念: 前缀和可以推导出两个变换公式: 两个变换公式: (1)nums[某一项] = 两个相邻前缀和之差:nums[x] = prefixSum[x] - prefixSum[x - 1] (2)从left 到 right的元素和等于 prefixSum[right+1] – p 阅读全文
posted @ 2021-07-22 18:51 小拙 阅读(121) 评论(0) 推荐(0)
摘要:#一、算法理解 差分,是一种和前缀和相对的策略。 如果有一数列 a[1],a[2],.…a[n] 且令 b[i]=a[i]-a[i-1], b[1]=a[1] 那么就有: a[i] = b[1]+b[2]+.…+b[i] = a[1]+a[2]-a[1]+a[3]-a[2]+.…+a[i]-a[i- 阅读全文
posted @ 2021-07-22 18:28 小拙 阅读(284) 评论(0) 推荐(0)
摘要:一、算法理解 并查集:给定一组元素,及其元素之间的关系,把存在直接、间接关系的元素组成一个集合。常用于解决如下类的问题: (1)存在几个集合? (2)最大集合容积? (3)判断A、B是否在一个集合内? 样例场景【朋友圈】:一个班级有56名学生,存在直接好友关系(A、B是好友关系)、间接好友关系(A、 阅读全文
posted @ 2021-07-22 15:51 小拙 阅读(259) 评论(0) 推荐(0)
摘要:1.【算法】单调栈 参考:https://blog.csdn.net/lucky52529/article/details/89155694 一、算法理解 单调栈是一种理解起来很容易,但是运用起来并不那么简单的数据结构。 单调栈,就是一个堆栈,里面的元素的按照大小在栈中满足一定的单调性。也就说是,就 阅读全文
posted @ 2021-07-21 10:40 小拙 阅读(2388) 评论(0) 推荐(1)
摘要:一、算法理解 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法,前提是数据结构必须先排好序,可以在数据规模的对数时间复杂度内完成查找。 二分查找要求线性表具有随机访问的特点(例如数组),也要求线性表能够根据中间元素的特点推测它两侧元素的性质,以达到缩减问题规模的效果。 阅读全文
posted @ 2021-06-23 14:32 小拙 阅读(164) 评论(0) 推荐(0)
摘要:一、算法理解 参考:字典树(前缀树)_越看越喜欢啊-CSDN博客_字典树 字典树,叫前缀树可能更好理解。 Trie又被称为前缀树、字典树,所以当然是一棵树。 上面这棵Trie树包含的字符串集合是{in, inn, int, tea, ten, to}。每个节点的编号是我们为了描述方便加上去的。树中的 阅读全文
posted @ 2021-05-31 10:32 小拙 阅读(69) 评论(0) 推荐(0)
摘要:一、算法理解 在图论中,拓扑排序(Topological Sorting)是一个 有向无环图(DAG, Directed Acyclic Graph)的 所有顶点的线性序列。且该序列必须满足下面两个条件: 每个顶点出现且只出现一次。 若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出 阅读全文
posted @ 2021-05-31 10:02 小拙 阅读(348) 评论(0) 推荐(0)
摘要:##【适用场景】 给定一个无序数组,有n个元素,找出其中的一个多数元素,多数元素出现的次数大于⌊ n/2 ⌋,注意数组中也可能不存在多数元素。 注意:多数元素n>2,即投票的某个元素超过半数。 ##【算法思路理解】 采用的是 “支持票” 和 “反对票” 抵扣的思路。 1.A表示支持票,B表示反对票 阅读全文
posted @ 2021-05-29 16:19 小拙 阅读(574) 评论(0) 推荐(0)
摘要:一、算法理解 分治,字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。 如果想用分治,需要下面的几个条件: 1)该问题的规模缩小到一定的程度就可以容易地解决; 2)该问题可 阅读全文
posted @ 2021-05-29 15:42 小拙 阅读(147) 评论(0) 推荐(0)
摘要:一、算法理解 严格来说,递归不是一种算法,而是一种解题思路。 递归的核心思想:将大问题分解为小问题来求解,然后再将小问题分解为更小的问题。这样一层一层地分解,直到问题规模被分解得足够小,不用继续分解,可以直接计算结果为止。 二、适用场景 (1)求f(n) (2)可以做出f(n)与f(n-1)、f(n 阅读全文
posted @ 2021-05-23 10:41 小拙 阅读(212) 评论(0) 推荐(0)