摘要:
22.1.22 并查集和KMP算法 1.并查集结构 1)实现: 并查集有多种实现方式,例如向上指的图的方式,数组的方式等等。其根本思想就在于准确记录某个节点的根节点,这个这种记录就能够很快的实现并查集的两种主要的功能:合并和查询。 2)两种优化方法: 压缩路径; 在合并时将深度小的树合并到深度大的树 阅读全文
摘要:
22.1.21 与哈希函数有关的结构 1 Hash函数的性质: out = f(in),其中in是无穷尽的,out是有穷尽的; 相同的输入经历Hash函数后能够得到相同的输出; 在很小的几率下,不同的输入也能得到相同的输出,概率很低; out具有均匀性和离散性。 2 哈希表 1)经典的哈希表可以看作 阅读全文
摘要:
22.1.20. 暴力递归 1.关键 暴力递归的关键在于找到一种决策,即一种试的方法(例如从左到右依次试或者按某个影响问题的因素来试),寻找决策的原则应按照可变参数形式简单(尽量不用栈,队列等形式的可变参数,数量少的原则进行。 2.例子 1)汉诺塔问题(三根柱子分别命名为Left,Mid,Right 阅读全文
摘要:
22.1.18 前缀树,贪心算法,暴力递归,堆 1.前缀树 简介: Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比 阅读全文
摘要:
22.1.13 图 1.图的表示方法 常见的有邻接表法,邻接矩阵,数组表示的方法 数组表示的方法: 例如:一个二维数组为{{1,2,3},{2,4,2},{4,5,1},{2,3,4}},他表示从第一个节点到第二个节点之间有一条长度为3的路,第二个节点到第四个节点之间有一条长度为2的路....... 阅读全文
摘要:
22.1.10 二叉树 1. 递归序遍历(系统自动压栈) (1)先序遍历:(根左右) code: public static void preOrder(TreeNode tree) { if (tree == null) return; System.out.printf(tree.val + " 阅读全文
摘要:
22.1.9 链表 1. 哈希表 1)哈希表在使用层面上可以理解为一种集合结构 2)如果只有key,没有伴随数据value,可以使用HashSet结构(C++中叫UnOrderedSet) 3)如果既有key,又有伴随数据value,可以使用HashMap结构(C++中叫UnOrderedMap) 阅读全文
摘要:
22.1.8 堆排序、桶排序 1. 堆排序:时间复杂度:O(nlogn), 空间复杂度:O(1) (1)完全二叉树: 第i个节点的左孩子:2*i+1; 第i个节点的右孩子:2*i+2; 第i个节点的父节点:(i-1)/2; (2)大根堆:以节点i为根节点的子树中,节点i上的值是这棵子树中最大的。 ( 阅读全文
摘要:
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)表示算法中其他过程 阅读全文
摘要:
2022.1.6 时间复杂度及简单排序算法 1. 时间复杂度 定义:在常数操作数量的表达式中,除去低阶项和高阶项的系数所剩下来的东西,记作O(剩下),读作 big O(剩下),时间复杂度按照算法执行的最差情况估计; 评价一个算法流程的好坏,先看时间复杂度的指标,然后再分析不同数据样本下的* 实际运行 阅读全文