算法与数据结构
文章平均质量分 70
大二算法与数据结构课程
飞翔的云中猪
这个作者很懒,什么都没留下…
展开
-
数据结构与算法理解
首先高级程序语言是模拟人的思考过程的。所以一个问题摆在你面前,首先你自己要想出方法会做,首先你要用人的思维来解决问题,暴力也好,找规律也罢,运用数学知识等等,首先你自己要先能有做出来的思路。其实数据无非就是增删改查的操作,操作都一样,你用任何一个数据都可以实现增删改查。不同就是不同的数据结构的增删改查操作的复杂度不同。然后的话,再去思考哪些方法适合机器来实现,哪些方法比较快。数据结构是数据之间的逻辑关系,算法是你解决问题的思路。数据结构与算法都是为了降低你解决问题的复杂度。最后再采取合适的数据结构来实现。原创 2023-09-17 13:16:39 · 61 阅读 · 0 评论 -
算法与数据结构--算法复杂性,时间与空间复杂度的计算
总而言之我们分析的时候,只需要考察当问题的规模充分大时,算法的复杂性在渐进意义下的阶。为此引入渐近意义下的记号O,Ω,这个量应该集中反映算法的效率,而从运行该算法的实际计算机中抽象出来。需要的时间资源的量称为时间复杂性,需要的空间资源的量称为空间复杂性。一般考虑复杂度的时候,我们会考虑最坏,最好,平均三种情况下的复杂度。二.算法复杂性的渐进性态【对算法复杂性表达式的两次化简,以便分析】,其中n表示算法要解问题的规模和算法的输入,用C表示复杂性。【2】当两个算法的阶不相同时候,,直观上,这个渐进表达式就是。原创 2023-07-08 23:02:43 · 1556 阅读 · 0 评论 -
算法与数据结构--前缀和
我们可以在输入的时候计算一下前缀和,也就是第1项的和,第1和2项的和,第1和2和3项的和。然后当计算从i到j之间元素的和时候,我们只需要将第1项到第j项的和减去第1项到第i-1项的和就可以了,这样每次查询的时间复杂度就从O(n)降到了O(1)。当查询的次数很多的时候,时间提升的特别明显。比如计算某个一维度数列从i到j之间元素的和。最开始的想法就是从i遍历到j,将这之间的元素相加。一维前缀和适用于计算某个一维数列某个数到某个数之间的累加和(或者乘积,又或者异或和)之类的。原创 2023-11-13 20:42:58 · 281 阅读 · 1 评论 -
算法与数据结构--线性表
这是因为在实现在位置k后插入元素和删除位置为k的元素这两个方法的时候,不实际移动元素而只移动指向元素的指针。虽然算法所需的计算时间O(n)仍然相同,但在每个元素占用的空间较大时,该算法比数组实现的表的插入算法快得多。2.实现代码(就是在编写上述七种基本运算的函数的基础上,又因为是动态数组,需要增加初始化函数和释放空间的函数,所以这里实现了九种函数)【这里存储的元素取int】用一组任意的存储单元存储线性表的数据元素,利用指针将其串联在一起,实现了用不相邻的存储单元存放逻辑上相邻的元素。,并返回被删除的元素。原创 2023-07-11 17:18:33 · 445 阅读 · 0 评论 -
算法与数据结构--循环链表与双链表
用一个表首哨兵结点header将双链表首尾相接,即将表首哨兵结点中的left指针指向表尾,并将表尾结点的right指针指向表首哨兵节点。表中任一元素的前驱和后继元素(就是该结点的后一个结点)所在的结点,可以在链表的每个结点中设置两个指针,一个指向后继结点,一个指向前驱结点。【1】概念:在单链表中,将终端结点的指针域NULL改为指向第一个结点,就使整个链表形成一个环,这种首尾详解的链表成为循环链表。【2】算法方面:单循环链表上实现表的各种运算的算法与单链表基本一致,只是循环条件不同。O循环链表p指向头指针。原创 2023-07-13 16:12:57 · 445 阅读 · 0 评论 -
算法与数据结构--栈与单调栈
栈是一种特殊的表,这种表只在表首进行插入和删除操作。因此,表首对于栈来说具有特殊的意义,称为栈顶。相应的,表尾称为栈底。不含任何元素的栈称为空栈。栈的修改遵循后进先出的原则,Last In First Out,可以想象成一个水桶。原创 2023-07-21 15:23:34 · 234 阅读 · 0 评论 -
算法与数据结构--队列和循环队列
队列的修改是按的规则进行的,所以队列又称为先进先出表,First In First Out,简称FIFO表。如示意图所示,a(1)就是队首元素,a(n)就是队尾元素。队列中的元素是按顺序进入的,退出队列也只能按照这个次序一次退出。原创 2023-07-24 13:07:45 · 270 阅读 · 0 评论 -
算法与数据结构--排序算法
可以发现,下面三种快的排序(平均情况下的时间复杂度都为O(nlogn))都使用了分治法,将一个大问题分为几个相同的小问题,分而治之。原创 2023-07-29 13:03:18 · 1629 阅读 · 1 评论 -
算法与数据结构--特殊有序集的线性时间排序算法
基本思想:统计每个输入元素的个数,然后根据这些计数值重构原数组。使用范围:需要知道元素大小范围,就是最大值是多少。时间复杂度:O(n)原创 2023-12-22 10:42:51 · 506 阅读 · 0 评论 -
算法与数据结构--树
树是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一颗倒挂的树,也就是说它是根朝上,而叶朝下的。树具有以下特点:1.每个结点有零个或多个子结点;2.没有父结点的结点为根节点;3.每一个非根结点只有一个父结点;4.每个结点及其后代结点整体上可以看做是一棵树,成为当前结点的父结点的一个子树;二叉树就是度不超过2的树(每个结点最多有两个子结点)一个二叉树,如果每一个层的结点树都达到最大值,则这个二叉树就是满二叉树。原创 2023-08-15 21:30:01 · 379 阅读 · 0 评论 -
算法与数据结构--二叉搜索树与自平衡二叉搜索树
二叉搜索树作为一种经典的数据结构,它既有链表的快速插入与删除操作的特点,又有数组快速查找的优势;所以应用十分广泛,例如在文件系统和数据库系统一般会采用这种数据结构进行高效率的排序与检索操作。根据插入元素的落点,调整策略分为四种情况,插入元素落入以下4个子树的情况分别对应着四种状态。注:字典的 "member运算" 指的是检查字典中是否存在某个特定的键的操作,即查询操作。A连接左子树的右子树,A称为B的右子树。注:上图的沿路径回溯检查指的是沿插入路径回溯检查。这时候对根结点使用左旋操作。原创 2023-12-25 17:51:37 · 620 阅读 · 0 评论 -
为什么要用递归以及递归如何书写?
一般的话写函数都是先确定函数的定义与输入,然后按照思路写输出。而递归函数的话我认为要先写思路和定义再写输入。//寻找第一个比根结点小的数是左子树的根结点,//寻找第一个比根结点大与或等于的数即时右子树的根节点i原创 2023-12-25 11:21:29 · 408 阅读 · 0 评论 -
算法与数据结构--堆与堆排序和优先队列
1.堆是完全二叉树,除了树的最后一层结点不需要是满的,其它的每一层从左到右都是满的,如果最后一层结点不是满的,那么要求左满右不满。原创 2023-10-15 17:58:51 · 142 阅读 · 0 评论 -
算法与数据结构--哈夫曼树与哈夫曼编码
演示视频:【1】【2】【3】求哈夫曼编码的步骤:1.根据字符及其权值(权值一般是数出现的次数)构造出哈夫曼树2.根据建立好的哈夫曼树求出哈夫曼编码。原创 2023-12-21 16:42:36 · 442 阅读 · 0 评论 -
算法与数据结构--并查集
并查集是一种树型结构,可以高效地实现合并分组,并且元素查询在哪一组中等问题。原创 2023-08-23 11:52:21 · 420 阅读 · 0 评论 -
算法与数据结构--图的定义和分类,图的表示以及图的遍历
图是由一组顶点和一组能够将两个顶点连接的边组成的。原创 2023-08-24 11:24:24 · 430 阅读 · 0 评论 -
算法与数据结构--最短路径Dijkstra算法
输入第一行包括四个整数N,M,S,E。表示有N个地点,M条道路,CYP当前所在的地点编号为S,要去的地点编号为E。假设他有一张地图,上面有N个点,M条路,他现在在编号为S的地方,想要去编号为E的地方,请你找到最短路径的长度。接下来M行每行两个整数u,v表示地点u到地点v之间有路可以走。学长经常迷路,现在他又遇到问题了,需要求救。输出一个整数表示最短的路线距离。好消息是,每条路的长度都是1。原创 2023-12-08 20:30:04 · 679 阅读 · 0 评论 -
算法与数据结构--最小生成树算法
图的生成树是它的一颗含有其所有顶点的无环连通子图。【简单说就是所有顶点连接在一起,并且没有环。因此有n个顶点,n-1的边】所有生成树中权值(树中所有边的权重之和)最小的生成树。解决之类问题实际上就是求出最小生成树,并计算它的权值之和。原创 2024-01-10 10:37:17 · 464 阅读 · 0 评论 -
算法与数据结构--拓扑排序
给定一幅有向图,将所有的顶点排序,使得所有的有向边均从排在前面的元素指向排在后面的元素,此时就可以。由一系列顶点组成,对于其中的每个顶点都存在一条有向边,从它指向序列中的下一个顶点。一条至少含有一条边,且起点和终点相同的有向路径。由某个顶点指出的边的个数称为该顶点的出度。有向图是由一组顶点和一组有方向的边组成的。指向某个顶点的边的个数称为该顶点的入度。如:指定合理的学习方案。原创 2023-12-14 10:17:00 · 471 阅读 · 0 评论