数据结构+算法
自己关于各大数据结构的理解和算法的解题思路
charon2002
这个作者很懒,什么都没留下…
展开
-
先序遍历/后序遍历确定树的大致形态
对这棵树的层序遍历很简单,中序遍历可以采用“从你的全世界路过”法进行遍历。我们可以总结出一般规律:为什么先/后/层 + 中序可以唯一确定一棵二叉树呢?因为可以通过先/后/层确定它的根,再通过中序遍历确定它的左右子树,再对它的左右子树进行同样的办法。先序/后序如何画出大致的结点分布情况呢?先通过先序和后序找到它的根(先序遍历的第一个结点和后序遍历的最后一个结点就是它的根),再通过遍历规则(“根 左 右”或者“左 右 根”)分析出它的左右孩子的根,接着通过前序遍历(根 左 右)划分根的左右子树的遍历序列。最后对原创 2022-07-19 19:52:10 · 296 阅读 · 0 评论 -
排序——归并排序
归并排序(merge sort)的基本思想:归并排序使用的是分治的思想,分治(devide and conquer),字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。递归的思想在某种程度上来说和分治的思想不谋而合,即函数直接或间接调用自身,把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解。所以说分治原创 2021-11-15 17:58:21 · 1032 阅读 · 0 评论 -
排序——冒泡排序
冒泡排序(Bubble Sort)的基本思想:冒泡排序是一种简单的交换排序。这种排序算法在排序的过程中,如果按照升序的规则,值大的元素会逐渐往后靠,值小的元素会逐渐往前靠,最重要的是最大的元素一直会交换到数组的末尾。这一过程就如同碳酸饮料中二氧化碳的气泡最终会浮到顶端,所以被称之为“冒泡排序”。冒泡排序也可分为有序区和无序区,冒泡的过程就是无序区中的元素依次互相比较,较大的元素逐渐“浮”到有序区中。对于升序排序,其有序区可以在右,也可以在左,两种方式的原理都是类似的,没有多大差异。对于降序排序,其实也无原创 2021-11-12 22:53:02 · 898 阅读 · 0 评论 -
排序——直接选择排序
直接选择排序(Straight Select Sorting)的基本思想:和直接插入排序一样,直接选择排序的思想在日常生活中也很常见。比如需要将学生按身高进行排队,最直接和简单的做法就是将每个同学都比较一下,选出最矮的那一个,排在队伍的最前面,再从剩下的队伍中选出最矮的那一个,直到排序完毕。直接选择排序就是利用了这种思想。直接选择排序也将待排数组分为有序区和无序区,和直接插入排序不同的是初始状态下,有序区为空,无序区为整个数组的元素。直接选择排序从无序区选择最小元素的过程使用的是最简单和基本的顺序查找,原创 2021-11-12 15:25:26 · 1047 阅读 · 0 评论 -
排序——直接插入排序
直接插入排序(straight insertion sort)的思想:直接插入排序的思想在我们的日常生活中也有体现,比如在我们抓牌的时候,我们手里的牌一般都已经排好序了,新抓上来的牌根据大小将它插入到一个合适的位置,直接插入排序的思想也是类似于此。对于一个待排序的数组,数组分为有序区和无序区,在这里我们假设有序区在数组的左边,无序区在数组的右边,排序的过程就是渐渐将无序区里面的元素加入到有序区里面。有序区的初始状态只有一个元素即数组的第一个元素,无序区的初始状态就是数组剩余的其他元素。无序区待插入的元素原创 2021-11-10 21:46:49 · 552 阅读 · 0 评论 -
二分查找算法
二分查找算法对于很多简单的算法,一学就会,一做就废,所以还是得多实践,多动手,实践出真知,practice does make perfect!without further ado,直接切入正题:题目描述:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。对于二分法的思路:二分查找又叫折半查找,它要求数组有序,如其名字的含义一样在每一次查找的过程中折半查找可以排除一半的原创 2021-11-08 13:13:27 · 56 阅读 · 0 评论 -
哈夫曼算法的应用:对文档进行压缩和解压
根据字母出现的频率,运用哈夫曼树对字母进行编码,首先用哈夫曼算法建立一棵哈夫曼树。然后自下而上依次遍历每个叶子结点与根结点的路径,若当前结点是双亲结点的左结点,则编码字符串加0,右结点,加1。解码则依次将字符串前缀与编码表中的字母进行比对,若全部遍历完未找到,解码出错。难点在于哈夫曼树的构建,编码解码算法的设计。目的:假设某文档只包含26个英文字母,应用哈夫曼算法对该文档进行压缩和解压缩操作,使得该文档占用较少的存储空间要求:假设文档内容从键盘输入;设计哈夫曼算法的存储结构;设计哈夫曼编码的解码的算法;原创 2020-12-17 12:13:47 · 2458 阅读 · 0 评论 -
KMP算法解题思路
KMP算法解题思路BF暴力算法进行模式匹配由于需要回溯,导致算法效率低,KMP算法对其进行改进的一点就是在某趟匹配失败后,主串不进行回溯,而子串回溯到某一个位置k。子串的每一个位置都对应着一个k,要找出这些值,首先列出子串所有的前缀,分别对每个前缀找出其最长公共前后缀(需注意,最长公共前后缀必须小于原前缀且要相等),得到其长度。然后。在以0为初始下标的数组next当中,数组下标分别与子串下标相对应,数组next用于存储相应位置的k值。next[0](特殊位置)存放-1,即子串在第一个字符匹配就失败,下原创 2020-12-02 23:30:17 · 144 阅读 · 0 评论