算法
文章平均质量分 95
学习算法
随便想的
这个作者很懒,什么都没留下…
展开
-
排序3
简单选择排序又称为直接选择排序,是一种最简单的选择排序算法,每次从待排序序列中选择一个最小的放在最前面。堆排序是一种树形选择排序算法,简单选择排序算法每次选择一个关键字最小的记录需要O(n)的时间,而堆排序选择一个关键字最小的记录只需要O(logn)的时间堆可以看作一棵完全二叉树的顺序存储结构,在这棵完全二叉树中,如果每一个结点的值都大于等于左右孩子的值,称为最大堆。如果每一个结点的值都小于等于左右孩子的值,称为最小堆。如下图所示,使用顺序存储一棵最大堆(不是链式存储)原创 2024-08-19 13:42:23 · 778 阅读 · 0 评论 -
排序+分治
快速排序是比较快速的排序方法。它的基本思想是将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此使所有数据变成有序序列。分解:先从数列中取出一个元素作为基准元素。以基准元素为标准,将问题分解为两个子序列,使得小于或等于基准元素的子序列在左侧,使大于基准元素的子序列在右侧。治理:对两个子序列进行快速排序。【治理就是递归】合并:将排好序的两个子序列合并在一起,得到原问题的解。原创 2024-08-18 16:42:42 · 1026 阅读 · 0 评论 -
简单排序
直接插入排序是最简单的排序方法,每次将一个待排序的记录,插入到已经排好序的数据序列中,得到一个新的长度增1的有序表。插入到有序序列时,可以用第0个空间暂存这个数据(作为哨兵,免去数组越界的判断),也可以用一个temp变量保存冒泡排序是一种最简单的交换排序算法,通过两两比较关键字,如果逆序就交换,使关键字大的记录像泡泡一样冒出来放在尾部。重复执行若干次冒泡排序,最终得到有序序列。原创 2024-08-17 23:48:56 · 674 阅读 · 0 评论 -
字符串模式匹配(查找算法)
KMP算法——著名的模式匹配算法。KMP算法的特点是i不回退,如果S[i]=T[j]时,则i++,j++,继续比较;如果S[i]≠T[j],j回退到next[j],重新开始比较。算法关键是计算next[]数组。此例从图中观察可看出T的前两个字符无需比较,那么一般情况怎么确定T的前几个字符不需要比较了呢?i指向字符的前两个字符和T串中j指向字符的前两个字符一样,不一样就不会i++,j++比较当前位置元素了。那么T的前几个字符无需比较可以根据T串确定。继续探究不需要比较几个字符。原创 2024-08-16 13:38:42 · 678 阅读 · 0 评论 -
二叉搜索树(树表查找)
32>30,从32结点的左子树查找,左子树为空,查找不成功,创建一个新的结点插入为32结点的左节点。二叉查找树删除的特殊情况:p==q,p的左子树的右节点为空,即p的左节点就是p的直接前驱s(左子树的最右结点,不用到最右结点了),那么删除s时,q的左孩子是s的左孩子。第二层:2(1,3)、6(5,7)、 10(9,11)、14(13,15)【num(num-2^1+1,num+2^1-1)】①若二叉查找树为空,创建一个新的结点s,将待插入关键字放入新结点的数据域,s结点作为根结点,左右子树均为空;原创 2024-08-14 21:49:21 · 719 阅读 · 0 评论 -
哈希表(查找+分治)
线性表和树表的查找都是通过比较关键字的方法,查找的效率取决于关键字的比较次数。有没有一种查找方法可以不进行关键字比较,直接找到目标?是根据关键字直接进行访问的数据结构。散列表通过将到,建立了关键字和存储地址之间的一种直接映射关系。,又称为哈希函数,是将关键字映射到存储地址的函数,记为hash(key)=Addr。例如,关键字key=(17,24,48,25),散列函数H(key)=key%5,散列函数将关键字映射到存储地址下标,将关键字存储到散列表的对应位置。原创 2024-08-12 00:11:29 · 827 阅读 · 0 评论 -
拓扑排序
一个无环的有向图称为。有向无环图是描述一个工程、计划、生产、系统等流程的有效工具。一个大工程可分为若干个子工程(活动),活动之间通常有一定的约束,例如先做什么活动,什么活动完成后才可以开始下一个活动。用顶点表示活动,用弧表示活动之间的优先关系的有向图,称为顶点表示活动的网,简称。在AOV网中,若从顶点i到顶点j之间存在一条有向路径,称顶点i是顶点j的,或者称顶点j是顶点i的。若是图中的弧,则称顶点i是顶点j的,顶点j是顶点i的。原创 2024-08-05 21:20:48 · 801 阅读 · 0 评论 -
哈夫曼编码
当 R=2 时,编码过程分几个步骤,每个步骤中,有两个最低频率的源字符 S 1 、 S 2 ,合并成一个新的“组合字母”,频率为 S 1 、 S 2 的频率之和。(如果一个合并中,每个字母有相同的频率,最早出现的分配 0,出于比较的目的,组合字母的值为合并中最早出现的字母的值。根据算法选择的N 个代码的长度,找所有字符总数的最小值。哈夫曼树对于第 i 层的节点的权重大于等于第 i + 1 层的节点,不然就可以把这两个节点互换,可以得到更优的哈夫曼树,因此,上层叶子节点的权重是下层各节点权重的最大值。原创 2024-07-09 23:58:51 · 854 阅读 · 0 评论 -
二叉树遍历
例如,“DBACEGF ABCDEFG”,通过先序遍历知道根节点为D,根据中序遍历可知,左子树中序遍历为ABC,右子树中序遍历为EFG,然后通过先序遍历得到左右子树的先序遍历(BAC、EGF)和根节点D的左右节点(B、E),继续对左右子树(“BAC ABC”、“EGF EFG”)进行上述操作,直至结束。基于先序序列和中序序列的节点数目相同,得到k-il=x-pl,所以x=k-il+pl,那么左子树先序序列[pl+1,k-il+pl];注意:访问根,先序遍历左子树,左子树为空或已遍历才可以遍历右子树。原创 2024-07-07 16:59:36 · 621 阅读 · 0 评论 -
STL(三)
map中所有元素都是pair。pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)。所有元素都会根据元素的键值自动排序。map/multimap属于关联式容器,底层结构是用二叉树实现。优点:可以根据额key值快速找到value值。map和multimap区别:map不允许容器中有重复的key值,multimap允许有重复的key值。原创 2024-02-07 21:03:03 · 825 阅读 · 1 评论 -
STL(一)
容器嵌套容器可以看作是一个二维数组。原创 2024-02-07 00:23:45 · 787 阅读 · 1 评论 -
链栈+队列
队列是先进先出的线性序列,也是一种线性表,操作受限的线性表,只能在两端操作:从一端进,从另一端出。进的一端被称为队尾(rear),出的一端被称为队头(front)。队列可以顺序存储,也可以链式存储。顺序存储静态定义}sqQueue顺序存储动态定义//使用基地址}sqQueue。原创 2024-01-30 15:55:13 · 855 阅读 · 1 评论 -
顺序表+单链表
int length;}sqList;int *elem;//定义基地址int length;}sqList;int data;原创 2024-01-27 20:56:05 · 186 阅读 · 0 评论 -
背包问题
背包问题是动态规划的经典问题之一。根据物品限制条件的不同,背包问题可分为01背包、完全背包、多重背包、分组背包和混合背包(前4种背包的混合)等。原创 2024-01-01 19:23:13 · 1561 阅读 · 0 评论