摘要:
1. BF和 RK算法 2. BM(Boyer-Moore)算法 对于工业级的软件开发来说,我们希望算法尽可能的高效,并且在极端情况下,性能也不要退化 的太严重。那么,对于查找功能是重要功能的软件来说,比如一些文本编辑器,它们的查找功能 都是用哪种算法 来实现的呢? 有没有比 BF 算法和 RK 算 阅读全文
摘要:
1. Cache缓存 ①.记忆 ②.钱包-储物柜 ③.代码模块 一个经典的链表应用场景,那就是 LRU 缓存淘汰算法。 缓存是一种提高数据读取性能的技术,在硬件设计、软件开发中都有着非常广泛的应用,比如常见的 CPU 缓存、数据库缓存、浏览器缓存等等。 缓存的大小有限,当缓存被用满时,哪些数据应该被 阅读全文
摘要:
0. 复杂度分析 0.时间空间复杂度 1. 数据结构 1.1 数组 1.2 链表 1.3 跳表 1.4 栈、队列 1.5 散列表、映射、集合 1.6 树、二叉树、二叉搜索树 AVL树、红黑树 字典树、并查集 1.7 堆 1.8 图 2. 算法 2.1 递归 2.2 分治和回溯 2.3 DFS、BFS 阅读全文
摘要:
1. 字符串概念 • Python: x = ‘abbc’ x = “abbc”• Java: String x = “abbc”; Python和Java中的string 都是不可变数据类型, immutable:https://lemire.me/blog/2017/07/07/are-your 阅读全文
摘要:
1. 分治 + 回溯 + 递归 + 动态规划 它的本质即将一个复杂的问题,分解成各种子问题,寻找它的重复性。动态规划和分治、回溯、递归并没有很大的本质区别,只是小细节上的不同。 递归 代码模板 public void recur(int level, int param) { // 1.termin 阅读全文
摘要:
1. Greedy 贪心算法(greedy algorithm)。贪心算法有很多经典的应用,比如霍夫曼编码(Huffman Coding)、Prim 和 Kruskal 最小生成树算法、还有 Dijkstra 单源最短路径算法。最小生成树算法和最短路径算法, 霍夫曼编码,看看它是如何利用贪心算法来实 阅读全文
摘要:
1. 概述 二分查找(Binary Search)算法,也叫折半查找算法。 二分查找针对的是一个有序的数据集合,查找思想有点类似分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。 假设有 1000 条订单数据,已经按照订单金额从小到 阅读全文
摘要:
1. 堆概念 二叉堆的性能有很大的问题,现实中很大高级的堆用的是斐波拉契堆和加的堆。 https://www.cnblogs.com/skywang12345/p/3610187.html#a1 https://en.wikipedia.org/wiki/Binary_heap 堆是一种特殊的树。只 阅读全文
摘要:
字典树Trie 1. 字典树的数据结构2. 字典树的核心思想3. 字典树的基本性质 1. 树Tree 按层次打印一颗二叉树, 在树中深度优先搜索:ABDH I EJ CFG 广度优先搜索:A BC DEFG HIJ 2. 二叉搜索树 二叉搜索树是子树之间的关系,并不是儿子和父亲的关系。 任何一个节点 阅读全文
摘要:
位图 BitMap 存储结构,位图(BitMap)。布隆过滤器本身就是基于位图的,是对位图的一种改进。 有 1 千万个整数,整数的范 围在 1 到 1 亿之间。如何快速查找某个整数是否在这 1 千万个整数中? 当然,这个问题还是可以用散列表来解决。不过,我们可以使用一种比较“特殊”的散列表,那就是位 阅读全文