随笔分类 -  Algorithm

摘要:22.1.30 位运算 1.资源限制类题目的技巧: 1))哈希函数可以把数据按照种类均匀分流; 2)布隆过滤器用于集合的建立与查询,并可以节省大量空间; 3)一致性哈希解决数据服务器的负载管理问题; 4)利用并查集结构做岛问题的并行计算; 5)位图解决某一范围上数字的出现情况,并可以节省大量空间; 阅读全文
posted @ 2022-01-30 23:37 张满月。 阅读(269) 评论(0) 推荐(0) 编辑
摘要:22.1.26 递归改动态规划 1.套路: 1)递归:根据题目写出递归版本; 2)记忆化搜索:用某种结构存储已经计算过的信息,省去重复计算的过程; 3)严格表结构:将递归套路转化为填表,注意考虑越界问题; 严格表结构的构造过程: 分析可变参数的范围(有几个可变参数就是几维表结构); 标出待求的终止位 阅读全文
posted @ 2022-01-26 21:40 张满月。 阅读(25) 评论(0) 推荐(0) 编辑
摘要:22.1.23Manacher算法、双端队列、单调栈 1.Manacher算法 1)用途: Manacher算法用于解决类似求某个字符串中最长的回文子串。(回文就是正着读和倒着读一样的结构)。 2)算法中的关键变量: 回文半径 r:回文直径的一半; 回文直径 d:整个回文的长度; 之前扩大的所有位置 阅读全文
posted @ 2022-01-23 22:19 张满月。 阅读(179) 评论(0) 推荐(0) 编辑
摘要:22.1.22 并查集和KMP算法 1.并查集结构 1)实现: 并查集有多种实现方式,例如向上指的图的方式,数组的方式等等。其根本思想就在于准确记录某个节点的根节点,这个这种记录就能够很快的实现并查集的两种主要的功能:合并和查询。 2)两种优化方法: 压缩路径; 在合并时将深度小的树合并到深度大的树 阅读全文
posted @ 2022-01-23 19:52 张满月。 阅读(203) 评论(0) 推荐(0) 编辑
摘要:22.1.20. 暴力递归 1.关键 暴力递归的关键在于找到一种决策,即一种试的方法(例如从左到右依次试或者按某个影响问题的因素来试),寻找决策的原则应按照可变参数形式简单(尽量不用栈,队列等形式的可变参数,数量少的原则进行。 2.例子 1)汉诺塔问题(三根柱子分别命名为Left,Mid,Right 阅读全文
posted @ 2022-01-20 20:33 张满月。 阅读(401) 评论(0) 推荐(0) 编辑
摘要:22.1.18 前缀树,贪心算法,暴力递归,堆 1.前缀树 简介: Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比 阅读全文
posted @ 2022-01-18 20:58 张满月。 阅读(202) 评论(0) 推荐(0) 编辑
摘要:22.1.13 图 1.图的表示方法 常见的有邻接表法,邻接矩阵,数组表示的方法 数组表示的方法: 例如:一个二维数组为{{1,2,3},{2,4,2},{4,5,1},{2,3,4}},他表示从第一个节点到第二个节点之间有一条长度为3的路,第二个节点到第四个节点之间有一条长度为2的路....... 阅读全文
posted @ 2022-01-14 17:54 张满月。 阅读(52) 评论(0) 推荐(0) 编辑
摘要:22.1.10 二叉树 1. 递归序遍历(系统自动压栈) (1)先序遍历:(根左右) code: public static void preOrder(TreeNode tree) { if (tree == null) return; System.out.printf(tree.val + " 阅读全文
posted @ 2022-01-12 18:22 张满月。 阅读(31) 评论(0) 推荐(0) 编辑
摘要:22.1.9 链表 1. 哈希表 1)哈希表在使用层面上可以理解为一种集合结构 2)如果只有key,没有伴随数据value,可以使用HashSet结构(C++中叫UnOrderedSet) 3)如果既有key,又有伴随数据value,可以使用HashMap结构(C++中叫UnOrderedMap) 阅读全文
posted @ 2022-01-10 16:05 张满月。 阅读(152) 评论(0) 推荐(0) 编辑
摘要:22.1.8 堆排序、桶排序 1. 堆排序:时间复杂度:O(nlogn), 空间复杂度:O(1) (1)完全二叉树: 第i个节点的左孩子:2*i+1; 第i个节点的右孩子:2*i+2; 第i个节点的父节点:(i-1)/2; (2)大根堆:以节点i为根节点的子树中,节点i上的值是这棵子树中最大的。 ( 阅读全文
posted @ 2022-01-08 21:12 张满月。 阅读(255) 评论(0) 推荐(0) 编辑
摘要:22.1.7 master公式及O(NLogN)的排序 1 master 公式 (1) 写公式 T(N) = a * T(N/b) + O(N^d); master公式用来求递归行为的时间复杂度,式中T(N/b)表示母问题被分解为子问题的规模,a表示子问题被调用的次数,O(N^d)表示算法中其他过程 阅读全文
posted @ 2022-01-07 21:17 张满月。 阅读(126) 评论(0) 推荐(0) 编辑
摘要:2022.1.6 时间复杂度及简单排序算法 1. 时间复杂度 定义:在常数操作数量的表达式中,除去低阶项和高阶项的系数所剩下来的东西,记作O(剩下),读作 big O(剩下),时间复杂度按照算法执行的最差情况估计; 评价一个算法流程的好坏,先看时间复杂度的指标,然后再分析不同数据样本下的* 实际运行 阅读全文
posted @ 2022-01-06 21:18 张满月。 阅读(92) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示