
【数据结构与算法】
文章平均质量分 77
Root_Smile
这个作者很懒,什么都没留下…
展开
-
【数据结构与算法】贪心算法
贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,只做出在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。解题的一般步骤是:1.建立数学模型来描述问题;2.把求解的问题分成若干个子问题;3.对每一子问题求解,得到子问题的局部最优解;4.把子问题的局部最优解合成原来问题的一个解。贪心算法的基本要素:1.贪心选择性质。原创 2024-04-18 16:06:27 · 735 阅读 · 0 评论 -
【数据结构与算法】回溯(backtracking)
搜索与回溯是计算机解题过程中常用的算法,很多问题无法根据某种确定的计算机法则来求解,可以利用搜索与回溯的技术求解。回溯是搜索算法中的一种控制策略。它的基本思想是:为了求得问题的解,先选择某一种可能的情况向前探索,在探索过程中,一旦发现原来的选择是错误的,就退回一步重新选择,继续向前探索,如此反复进行,直至得到解或证明无解。如迷宫问题:进入迷宫后,先随意选择一个前进方向,一步步向前试探前进,如果碰到死胡同,说明前进方向已无路可走。这时,首先看其他方向是否还有路可走:如果有,则沿该方向再次向前试探;转载 2024-04-17 18:12:53 · 123 阅读 · 0 评论 -
【数据结构与算法】最大公约数与最小公倍数
(英语:highest common factor,hcf)也称(英语:greatest common divisor,gcd)是词汇,指能够多个非零的最大正整数。例如8和12的最大公因数为4。表示:gcd(8,12) = 4(英语:least common multiple,lcm)是中的一个概念。若有一个数X,可以被另外两个数A,B,且X同时大于或等于A和B,则X为A和B的。A和B的公倍数有无限个,而所有正的公倍数中,最小的公倍数就叫做最小公倍数。例如8和12的最小公倍数为24。原创 2024-04-16 18:02:58 · 1683 阅读 · 0 评论 -
【数据结构与算法】素数(质数)判定
也就是说,先分别做好[2,根号b)上的表和[a,b)上的表,然后从第一个表里筛得素数得同时,也将其倍数从第二个表中划去,因为b是右区间临界点,sqrt(b)显然是最大的质因子的上界,所以a~b这个区间里边的合数只可能被小于等于根下b的素数筛掉,最后剩下得便是所求区间内得素数。同理,依次类推,每次表中剩下的最小数字m都是素数,然后将表中所有的m的倍数划去。暴力算法虽然可以判断某个数是否为素数,但是当它面对大量需要判断的数据时,它的效率会显得十分低下,我们也有更好地方法来求一定范围里的素数,它就是我们的。原创 2024-04-16 15:55:32 · 780 阅读 · 0 评论 -
【数据结构与算法】递归
To Iterate is Human,to Recurse,Divine.(人理解迭代,神理解递归) ——L.Peter Deutsch递归,在数学与计算机科学中,是指在方法的定义中使用方法自身。也就是说,递归算法是一种直接或间接调用自身方法的算法。其中,直接调用自己称为直接递归,而将a调用b,b又调用a的递归叫做间接递归。简言之:在定义自身的同时又出现自身的直接或间接调用。**注意:**递归必须要有一个退出的条件。递归的数学模型:数学归纳法。原创 2024-04-16 14:32:09 · 1104 阅读 · 0 评论 -
【数据结构与算法】递推
来源:《信息学奥赛一本通》所谓递推,是指从已知的初始条件出发,依据某种递推关系,逐次推出所要求的各中间结果及最后结果。其中初始条件或是问题本身已经给定,或是通过对问题的分析与化简后确定。无论顺推还是逆推,其关键是要找到递推式。这种处理问题的方法能使复杂运算化为若干步重复的简单运算,充分发挥出计算机擅长于重复处理的特点。递推法是一种重要的数学方法,在数学的各个领域中都有广泛的运用,也是计算机用于数值计算的一个重要算法。的首要问题是得到相邻的数据项间的关系(即递推关系)。原创 2024-04-15 21:09:24 · 1256 阅读 · 1 评论 -
【数据结构与算法】时空复杂度(时间复杂度和空间复杂度)
记为T(n).一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。计算公式S(n)=O(f(n)).其中,n为问题的规模,f(n)为语句关于n所占存储空间的函数。显然T(n)=T(n-1)+T(n-2)是一个斐波那契数列,通过归纳证明法可以证明,当n>=1时T(n)4时T(n)>=。纯粹的递归操作的空间复杂度也是线性的,原创 2023-09-22 18:11:23 · 329 阅读 · 0 评论 -
【数据结构与算法】队列
队列 queue队头 队尾 入队 出队插入只能在表尾,删除只能在表头先进先出(FIFO)结构。原创 2024-04-06 17:04:36 · 258 阅读 · 0 评论 -
【数据结构与算法】栈
栈 Stackana1插入只能在表尾,删除只能在表尾后进先出(LIFO)结构。原创 2024-04-05 14:43:02 · 976 阅读 · 0 评论 -
【数据结构与算法】线性表的合并(伪代码)
【代码】【数据结构与算法】线性表的合并(伪代码)原创 2023-10-28 16:54:11 · 165 阅读 · 1 评论 -
【数据结构与算法】循环链表和双向链表
由于循环链表中没有NULL指针,故涉及遍历操作时,其终止条件就不再像非循环链表那样判断p或p->next是否为空,而是判断它们是否等于头指针。在单链表的每个结点里再增加一个指向其直接前驱的指针域prior,这样链表中就形成了有两个方向不同的链,故称为双向链表。让头结点的前驱指针指向链表的最后一个结点,让最后一个结点的后继指针指向头结点。头尾相接的链表,即表中最后一个结点的指针域指向头结点,整个链表形成一个环。的存储位置:R->next->next,时间复杂度为O(1)的存储位置:R,时间复杂度为O(1)原创 2023-10-28 15:48:48 · 154 阅读 · 1 评论 -
【数据结构与算法】链表
链表访问时只能通过头指针进入链表,并通过每个结点的指针域依次向后顺序扫描其余结点,所以寻找第一个结点和最后一个结点所花费的时间不等。便于首元结点的处理(首元结点的地址保存在头结点的指针域中,所以在链表的第一个位置上的操作和其他位置一致,无需进行特殊处理)便于空表和非空表的统一处理(无论链表是否为空,头指针都是指向头结点的非空指针,因此空表和非空表的处理也就统一了):是在链表的首元结点之前附设的一个结点(此结点不计入链表长度值):存储直接后继结点的存储位置(最后一个结点的指针域为NULL)原创 2023-10-01 20:01:07 · 169 阅读 · 0 评论 -
【数据结构与算法】顺序表
其实参不会随着形参的改变而改变。所以,结构改变,并且需要传回这种改变的要用引用型参数,否则用一般参数。,其实参会随着形参的改变而改变;不带&的参数是一般参数,是。存储密度大(结点本身所占存储量/结点结构所占存储量)顺序表查找、插入、删除的时间复杂度都是O(n)属于静态存储形式,数据元素的个数不能自由扩充。在插入、删除某一元素时需要移动大量元素。带&的是引用型参数,它是。可以随机存取表中任一元素。原创 2023-09-22 19:26:42 · 96 阅读 · 0 评论 -
【数据结构与算法】简介
可以先看一下这篇博客数据(data)是对客观事物的符号表示。在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。数据元素(data element)是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。数据对象(data object)是性质相同的数据元素的集合,是数据的一个子集。数据结构(data structure)又称逻辑结构,是相互之间存在一种或多种特定关系的数据元素的集合。通常有以下四类基本结构:集合、线性结构、树形结构、图状结构或网状结构。原创 2023-09-22 19:13:19 · 67 阅读 · 0 评论