08 2022 档案
摘要:1.应用场景-集合覆盖问题 假设存在下面需要付费的广播台,以及广播台信号可以覆盖的地区。 如何选择最少的广播台,让所有的地区都可以接收到信号 2.贪心算法介绍 1)贪婪算法(贪心算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法
阅读全文
摘要:1.应用场景-字符串匹配问题 字符串匹配问题:: 1)有一个字符串 str1= ""算算法 算法你算 算法你算法你算你好"",和一个子串 str2="算法你算" 2)现在要判断 str1 是否含有 str2, 如果存在,就返回第一次出现的位置, 如果没有,则返回-1 2.暴力匹配算法 如果用暴力匹配
阅读全文
摘要:1.应用场景-背包问题 背包问题:有一个背包,容量为4磅 ,现有如下物品 1)要求达到的目标为装入的背包的总价值最大,并且重量不超出 2)要求装入的物品不能重复 2.动态规划算法介绍 1)动态规划(Dynamic Programming)算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取
阅读全文
摘要:1.分治算法介绍 1)分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序,傅立叶变换(
阅读全文
摘要:1.二分查找算法(非递归)介绍 我们讲过了二分查找算法,是使用递归的方式; 二分查找法只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后再进行查找 二分查找法的运行时间为对数时间O(㏒₂n),即查找到需要的目标位置最多只需要㏒₂n步,假设从[0,99]的队列(100个数,即n=100)
阅读全文
摘要:1.广度优先遍历基本思想 图的广度优先搜索(Broad First Search) 。 类似于一个分层搜索的过程,广度优先遍历需要使用一个队列以保持访问过的结点的顺序,以便按这个顺序来访问这些结点的邻接结点。 2.广度优先遍历算法步骤 1)访问初始结点v并标记结点v为已访问。 2)结点v入队列 3)
阅读全文
摘要:1.图遍历介绍 所谓图的遍历,即是对结点的访问。一个图有那么多个结点,如何遍历这些结点,需要特定策略,一般有两种访问策略: (1)深度优先遍历 (2)广度优先遍历 2.深度优先遍历基本思想 图的深度优先搜索(Depth First Search) 。 1)深度优先遍历,从初始访问结点出发,初始访问结
阅读全文
摘要:1.为什么要有图 1)线性表局限于一个直接前驱和一个直接后继的关系 2)树也只能有一个直接前驱也就是父节点 3)当我们需要表示多对多的关系时, 这里我们就用到了图 2.图的举例说明 图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。 结点也可以称为顶点。如图: 3.图的
阅读全文
摘要:1.二叉树问题分析 二叉树的操作效率较高,但是也存在问题, 请看下面的二叉树 1)二叉树需要加载到内存的,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多(比如1亿, 就存在如下问题 2)问题1:在构建二叉树时,需要多次进行i/o操作(海量数据存在数据库或文件中),节点海量,构建二叉树时,
阅读全文
摘要:1.为什么需要平衡二叉树? 二叉排序树可能的存在的问题 给你一个数列{1,2,3,4,5,6},要求创建一颗二叉排序树(BST), 并分析问题所在. 上图BST存在的问题分析: 左子树全部为空,从形式上看,更像一个单链表。 插入速度没有影响 查询速度明显降低(因为需要依次比较), 不能发挥BST的优
阅读全文
摘要:1.为什么要用二叉排序树 使用数组 数组未排序,优点:直接在数组尾添加,速度快。 缺点:查找速度慢. 数组排序,优点:可以使用二分查找,查找速度快,缺点:为了保证数组有序,在添加新数据时,找到插入位置后,后面的数据需整体移动,速度慢。 使用链式存储-链表 不管链表是否有序,查找速度都慢,添加数据速度
阅读全文
摘要:1.基本介绍 赫夫曼编码是赫哈夫曼树在电讯通信中的经典的应用之一。 赫夫曼编码广泛地用于数据文件压缩。其压缩率通常在20%*~90%之间。 赫夫曼码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,称之为最佳编码。 2.原理剖析 1.定长编码 2.变长编码 3.赫夫曼编码
阅读全文
摘要:1.版本控制 1.1什么是版本控制 版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。 实现跨区域多人协同开发 追踪和记载一个或者多个文件的历史记录 组织和保护你的源代码和文档
阅读全文
摘要:1.基本介绍 给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。 赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近。 路径和路径长度:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之
阅读全文
摘要:1.堆排序基本介绍 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏、最好的平均时间复杂度均为O(nlogn),它是不稳定排序; 堆是具有一下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆,注意:没有要求结点的左孩子的值和右孩子的值的大小关系。
阅读全文
摘要:0.遗留问题(只实现中序,没有实现前序和后序) 1.为什么需要线索二叉树 答: 如上图所示,有些结点的左右指针并没有完全得到利用 为了使所有的指针都得到利用,线索二叉树是有效的解决办法。 2.线索二叉树基本介绍 n个结点的二叉链表中含有n+1个空指针{公式2n-(n-1)=n+1;2n表示总指针域数
阅读全文
摘要:1.基本概念 从数据存储方式来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组。 2.顺序存在二叉树的特点 顺序存储二叉树通常只考虑完全二叉树 第n个元素的左子结点为 2*+1(对应于数组的下标值) 第n个元素的右子结点为 2 * n + 2(对应于数组的下标值)
阅读全文
摘要:1.删除的规定(剩下的后面补充) 如果删除的是叶子结点,则删除该结点; 如果删除的结点是非叶子结点,则删除该子树 2.删除思路 首先,考虑如果树是空树root,或者只有一个结点,则等价于二叉树置空。 因为我们的二叉树是单向的,所以我们是判断当前结点的子结点是否需要删除,而不能去判断当前这个结点是不是
阅读全文
摘要:1.前序查找思路 先判断当前结点的no是否等于要查找的no 如果no相等,则返回该结点 如果no不相等,则判断当前结点的左子结点是否为空,如果不为空,则递归前序查找 如果左递归前序查找到结点,则返回 否则继续判断,当前结点的右子结点是否为空,如果不为空,则继续递归前序查找 2.中序查找思路 判断当前
阅读全文
摘要:1.说明 前序遍历: 先输出父节点,再遍历左子树和右子树 中序遍历: 先遍历左子树,再输出父节点,再遍历右子树 后序遍历: 先遍历左子树,再遍历右子树,最后输出父节点 小结: 看输出父节点的顺序,就确定是前序,中序还是后序 2.分析遍历的步骤 1.先创建一棵二叉树 2.前序遍历 2.1 先输出当前结
阅读全文