![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 91
执手画眉弯
这个作者很懒,什么都没留下…
展开
-
算法学习 期末总结
数据结构 一维: 基础:数组 vector(string),链表 linked list 高级:栈 stack,队列 queue,双端队列 deque,集合 set, 映射 map, 优先队列 priority_queue 二维: 基础:树 tree, 图 graph 高级: 二叉搜索树 binary search tree(red-black tree, AVL),堆heap,并查集 disjoint set, 字典树 Trie 特殊: 位运算 Bitwise, 布隆过滤器 BloomFi原创 2020-08-31 19:29:13 · 160 阅读 · 0 评论 -
算法学习第9周 高级动态规划 字符串算法
高级动态规划 算法感触 人肉递归低效,很累。 找到最近最简方法,将其拆解位可重复解决的问题。 数学归纳法思维。 动态规划 Dynamic Programming Simplifying a complicated problem by breaking it down into simpler sub-problems Divide & Conquer + Optimal substructure 顺推形式: 动态递推 打家劫舍问题 dp[i] 状态定义: max $ of robbing原创 2020-08-23 21:59:44 · 573 阅读 · 0 评论 -
算法学习第八周 位运算 布隆过滤器和LRU缓存 排序算法
位运算 位运算符 含义 运算符 说明 按位或 1 双目,只要有一个为1则为1,否则为0 按位与 & 双目,两个都为1则为1,否则为0 按位取反 ~ 单目, 每位0变1,1变0 按位异或 ^ 双目,相同为0,不同为1 异或特点 相同为0, 不同为1,也可用“不进位加法”来理解。 x ^ 0 = x x ^ 1s = ~x //注意 1s = ~0 相当于每位都为1 x ^ (~x) = 1s x ^ x = 0 c = a ^ b => a ^ c = b ,原创 2020-08-16 22:18:29 · 209 阅读 · 0 评论 -
算法学习第七周 字典树和并查集,高级搜索,红黑树和AVL树
字典树和并查集 字典树 字典树,即Trie树,又称单词查找树或者键树,是一种树形结构。典型应用是用于统计或者排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计,或者屏蔽词字库对比等。 字典树优点:最大限度的减少无畏的字符串比较,查询效率比哈希表高。 Trie树的核心思想是空间换时间。 利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。 字典树的实现 struct Node { char c; bool end; Node* next[26] =原创 2020-08-08 23:06:05 · 416 阅读 · 0 评论 -
算法学习第六周 动态规划
动态规划 从分治,回溯,递归一直到动态规划,本质上算法思维没有大的区别,都是把复杂问题分解为它的子问题,同时寻找它的重复性。 感触 人肉递归低效,而且很累 找到最近最简方法,将其拆分为可重复解决的问题。 数学归纳思维。(先将基本条件想清楚,比如n = 1,n = 2时候是什么样,n怎么推导n + 1)。 动态规划的定义 Simplifying a complicated problem by breaking it down into simpler sub-problems.(in a recurs原创 2020-08-02 15:31:59 · 156 阅读 · 0 评论 -
算法学习第四周 贪心算法与二分查找
贪心算法 贪心算法是一种在每一步选择中都采取在当前状态下最好或最优的选择,从而希望导致结果是全局最好的或最优的算法。 贪心算法与动态规划的不同在于它对于每个子问题的解决方案都做出选择,不能回退。动态规划则会保存以前的运算结果,并根据以前的结果对当前进行选择,有回退功能。 贪心法可以解决一些最优化问题,如:求图中的最小生成树,求哈夫曼编码等。然而对于工程和生活中的问题,贪心法一般不能得到我们所要求的答案。 一旦一个问题可以通过贪心法来解决,那么贪心法一般是解决这个问题的最好办法。由于贪心法的高效性以及其所求的原创 2020-07-19 17:17:31 · 310 阅读 · 0 评论 -
算法学习第三周 分治与回溯
分治 分治和回溯本身就是一种比较特殊的递归,在分析问题的解决方法时候,首先找问题的重复性,某些情况下,问题可能需要拆分成多个小问题来实现,然后最后结果是多个小问题组合起来形成的,这时候就需要用到分治的思想。 分治类似公司自顶而下管理和工作的架构,分析问题,拆分子问题的方法主要是多加练习,根据解题的经验来进行拆分和组合。 分治的代码模板 void divide_conquer(problem, param1, param2, ...): // recursion terminator if pr原创 2020-07-12 15:42:41 · 146 阅读 · 0 评论 -
算法学习第二周总结
算法学习总结Hash、树、堆HashMap树Heap Hash、树、堆 本周主要学习了hashmap,映射,集合,树,heap以及图相关的基础知识,以及对应的相关算法。 HashMap 关于hash的主要内容: 1. Hash表是根据关键码值(key)进行直接访问的数据结构,通过hash函数把key映射到表中一个位置来进行访问,查找元素的时间复杂度为O(1)。 2. hash映射函数也叫散列函数,存放记录的数组叫做哈希表。 3. hash表的做法,就是把key值通过设定的hash函数转换成一个int数字,然原创 2020-07-04 22:09:21 · 158 阅读 · 0 评论 -
算法学习数组,链表,栈,队列总结
数组 数组基本上属于使用最多的一种数据结构,因为其连续的内存分布,使得访问和查找等方面都可以做到O(1)时间复杂度,缺点就在添加和删除操作上,因为需要保持内存的连续性,需要对后续的元素进行移动,所以该部分算法为O(N)。 数组在访问方面,使用下标或者迭代器基本上没有差别,唯一问题可能在使用迭代器会显得比较高大上一些而已。 关于本周练习的数组方面操作: 删除排序数组中的重复项: //使用stl内置函数实现 int removeDuplicates(vector<int>& ..原创 2020-06-28 14:02:57 · 260 阅读 · 0 评论