算法
文章平均质量分 87
从基础开始总结ACM和OI赛制常见的算法,水平有限,不断进步~
Lyric群青
江湖一笑浪滔滔 红尘尽忘了 俱往矣 何足言道
展开
-
《算法笔记》总结No.10——链表
但这恰恰是链表的“几何意义”:顺序表的定义就很符合人类的思维惯式,对吧,一个表,或者说是一个有顺序的集合一样,物理上就应该是连续的一堆东西连在一起——计算机的内存中实际上也是这么存放的,因此在定义的时候直接定义成和数组“原创 2024-07-21 16:46:12 · 949 阅读 · 0 评论 -
《算法笔记》总结No.9——高效配招
而如果进行预处理,即把所有Fibonacci数预先计算并存在数组中,那么每次查询就只需要O(1)的时间复杂度,对Q次查询就只需要O(n+Q)的时间复杂度(其中O(n)是预处理的时间)。这种用法般是当程序的一部分过程消耗的时间过多,或是没有想到好的算法,因此在另一个程序中使用暴力算法求出结果,这样就能直接在原程序中使用这些结果。例如对皇后问题来说,如果使用的算法不够好,就容易超时,而可以在本地用程序计算出对所有来说2皇后问题的方案数,然后把算出的结果直接写在数组中,就可以根据题目输入的来直接输出结果。原创 2024-07-20 20:20:31 · 311 阅读 · 0 评论 -
《算法笔记》总结No.8——双指针
去年发表过较简单的双指针案例,建议先行阅读~C++实现双指针算法_c++ 双指针排序-CSDN博客文章浏览阅读154次。本贴介绍双指针的入门典例~_c++ 双指针排序https://jslhyh32.blog.csdn.net/article/details/129829790相比说双指针是一种算法,他更倾向是一种编程技巧,话不多说直接看一个引例:如下,给定递增序列【1,3,5,7,9】,寻找到两个相加为16的元素。如果使用暴力的思想,相当于是一个双层循环:外层下标i对应的A[i]和内层下标为j的A[j]之原创 2024-07-17 19:27:47 · 1049 阅读 · 0 评论 -
《算法笔记》总结No.7——二分(多例题详解版)
目前有一个有序数列,举个例子,假设是1~1000,让我们去查找931这个数字,浅显且暴力的做法就是直接从头到尾遍历一遍,直到找到931为止。当n非常大,比如达到100w时,这是一个非常大的量级,考虑到效率的优劣这是不能接收的。 二分查找是基于有序序列的一种查找算法,所谓的有序是序列严格递增:每次根据当前查找区间的中位数来判断是否与目标相同,如果不同就根据当前大小以上个区间的中点作为区间的某一端,继续执行这个二分查找过程~ 高效的点在于,二分的每一步都可以去除区间中一半的元素,其时原创 2024-07-15 20:05:44 · 825 阅读 · 0 评论 -
《算法笔记》总结No.6——贪心
不过对平常使用来说,也许没有时间或不太容易对想到的策略进行严谨的证明(贪心的证明往往比贪本身更难),因此一般来说,如果在想到某个似乎可行的策略之后,并且自己无法举出反例,那么就勇敢地实现它。而对于上面这种情况,比如1和2这种重叠的区间,不难发现,如果选了最靠左的1区间,只会占到9号位,而选了2号区间则会占到8号位——这显然不符合贪心尽可能少花钱(少花区间)的思想,因此要选得尽可能靠左,这样右边空的会更多~如上,我们手算可以看出来最多有4个不相交的。下面来说说为什么要这样做,如上图:不难发现,原创 2024-07-10 21:29:05 · 1216 阅读 · 0 评论 -
《算法笔记》总结No.5——递归
将行列式视为从矩阵的不同行和不同列中选取元素并相乘的代数和。每一项的符号由列标的逆序数决定,即如果列标的逆序数为奇数,则该项为负;若为偶数,则该项为正——其实就是全排列~不过不同的是,行列式可以在对角线上选择元素,而对于可以斜线行走的皇后,这一点显然也是不行。因此可以基于全排列的代码,然后对每一个全排列的结果进行单独判断是否存在对角线元素,即可完成~原创 2024-07-08 16:15:04 · 1020 阅读 · 0 评论 -
《算法笔记》总结No.4——散列
散列的英文名是hash,即我们常说的哈希~该知识点在王道408考研的教材里面属于的范围。即便各位并无深入了解过,也听说过散列是一种更高效的查找方法。原创 2024-07-07 21:29:52 · 755 阅读 · 0 评论 -
《算法笔记》总结No.3——排序
侧重应用,408中要求的种类更加繁多,此处先不扩展难度~总结最常用的两种排序。原创 2024-07-07 11:04:28 · 428 阅读 · 0 评论 -
《算法笔记》总结No.2——模拟
业务要求是:第一行输入正整数N,代表车手的总个数;接下来的N行每行键入两个数字:分别是车队编号和该车手得分。,至于这3种转换为10进制的函数,要考虑很多情况——比如二进制的输入方式,是int、还是vector<int>、string型,这要。博主本人习惯用STL库了,其实用普通的数组和简单的最大值搜索亦可实现~小范围的查找直接遍历,范围大时可以使用二分查找(本帖暂不展开~),然后图省事直接调用STL的reverse逆转一下即可~,不涉及算法:一类题目怎么说你就怎么做的类型~大一C语言常见的阴阳类题目,原创 2024-06-19 10:15:39 · 945 阅读 · 0 评论 -
《算法笔记》总结No.1——C/C++重点细节(超详细!可应对期末)
原因是函数内部申请的局部变量来自系统栈,太远不需要申请的空间较小,而函数外部申请的全局变量来自静态存储区,允许申请的空间较大~原创 2024-06-13 09:55:02 · 873 阅读 · 0 评论