算法
郊眠寺山雀
你其实没那么努力 你永远可以做得更好
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
深度搜索中的迭代与递归
深度搜索常常用来判断连通性,是因为这一思想的回溯性回溯性的本质就是循环遍历作为横向搜索,递归作为纵向搜索,回溯就体现在‘归’在深度搜索中,递归不仅要设置递归结束点(纵向搜索结束,开始回溯)也要设置整个搜索的结束点(成功搜索到目标),用以结束整个搜索以经典迷宫举例递归结束点就是无法继续前进,也就是前后左右都被堵上,以当前坐标为基础,上下左右循环结束,回溯到前一个点,进行上下左右的循环搜索结束点就是当搜索到目标时,返回1,每次回溯返回值都进行判断是否为1,如果是就一直回溯出递归原创 2021-11-25 15:21:44 · 378 阅读 · 0 评论 -
关于栈和队列固定结构的标记思想
因为栈和队列都是只能从端口操作数据的结构,并不能直接对中间段数据进行操作,所以具有某种固定的数据连续性,例如:栈内数据分别为 2, 3, 4, 7, 5,那么2,3,4可以看做一段数据,因为后续的7, 5 和它并没有联系,那么在这种固定连续数据结构中寻找特殊数据时,就可以对每段进行标记,例如:输出栈内最大数据,2,3, 4最大数据为4, 但2,3, 4, 7, 5最大数据为7,所以最后标记栈内最大元素为 2, 3, 4, 7, 7核心思想:这种连续结构的访问范围是,当前数据及以下,优先弹出栈顶,所以当.原创 2021-10-29 12:41:43 · 102 阅读 · 0 评论 -
遍历思想进阶(标记)
思考一个问题:需要在50位数里面去寻找极少量特殊数据我们可以一个个遍历,设置一堆筛选条件分支,然后优化分支,缩减遍历区间等等操作可是50位数的超大型数据,且不说上述操作的优化难度,光是50位数必须使用大数存储这一难点就可以筛掉大部分方法那么我们可以想想高中时排列组合问题时,经常需要找到特别的数据一种方向是筛除非目标数,另一种就是直接找到目标数可以观察特殊数据本身,然后进行生成或者标记区间思想关键:不从给定区间去寻找,而是根据目标数据特点自行生成...原创 2021-10-27 12:19:27 · 233 阅读 · 0 评论 -
遍历思想进阶(高斯)
来思考一个问题,1+...+100 = ?遍历:1+2+3+4+5+6.........+100问题复杂度O(n)高智商人类高斯表示我只需要一半复杂度大家熟知的 (100 + 1) * (100 / 2)所以当遇到遍历时,例如 : 二分查找, 双指针, 多数前缀和问题等等 因为遍历问题无处不在,所以高斯思想非常可贵,也可以使我们换一种角度看待问题...原创 2021-10-27 11:36:28 · 240 阅读 · 0 评论 -
分析一个问题模型(两人过河)
核心问题:往返次数增加,效率反而提高??第一个要点:有两段时间,第一段是 过河时间 第二段是 返回(送手电)时间第二个要点:找到两者时间最短,或者能平衡? 的方法 过河时间:因为过河时间是按最慢的人来计算,那么就无法避免最慢的人一定会被计算进入总时间,那么可以规避的就是次慢的人可以不被计算,所以尽量是 最慢 + 次慢 过河组合 效率最高 返回时间:当然是越快越好,所以优先选择最快的人 冲突:如果要由最快的人往返送手电,那么就会导致过河时间进...原创 2021-10-11 15:56:26 · 526 阅读 · 0 评论 -
杨氏矩阵-双指针结合二分优化
杨氏矩阵是由两列相同有序数据相加得到,最后形成的矩阵也符合行列皆是有序序列,如要查找一个数,只需要两个序列不断向前交叉遍历,因为数据相同,所以不用担心重复,最后的遍历路线为蛇形当数据不同,但依然有序时,此时的数据关系变为了大于关系,例如下图中终点13大于10和4等等结合二分时在给定范围内缩小范围的思想,起点从最大序列开始,将大于和小于的部分不断排除,如下图,第一次减去15的一列,第二次减去11的一行,第三次减去12的一行,使矩阵不断缩小二分优化:每次缩减的时候都是依次比较,当从小到大遍历原创 2021-10-08 16:05:26 · 154 阅读 · 0 评论 -
关于二分答案的二次思考与总结
遇到数据时,去观察它的特点,然后就可能会找到一些错误的联系,比如经典的切木头问题,余下的木头如何处理,我自作聪明地将余下木头当做可以一次性减去的多余材料,但其实随着每次切割长度的增大,余下材料也是变化的,这不是一个线性问题,余下材料其实是因变量。然后进一步思考,发现可以从最大切割长度往下递减遍历,每次进行O(n)的计算,来分析此时的算法,是找到尽量靠近答案的点,然后遍历,这就是一种简单优化的查找1.找到离答案尽量近的起点2.进行遍历照着这两条模板二分!!!!1.找到答案的起点和终点(原创 2021-10-07 16:40:16 · 125 阅读 · 0 评论 -
二分答案思想(利用映射的虚拟数组折半查找)
折半查找只需要比较三个数(l,r,mid)的大小,就可以删除即时的一半空间的数据,如果这些数据全都进行存储,那是一种无谓的消耗,如果可以以一种映射的方式存储数据的顺序,然后需要比较大小的时候再对应计算出数据,就非常的nice!!!比如接下来这道题我们用二分答案的方法,因为我们要进行查找的是...原创 2021-10-04 22:04:22 · 111 阅读 · 0 评论 -
大数运算
整数加法模拟高精度加法运算 将数据存放在字符串里,然后反向存放到数组中,再对应下标操作进位,反向存放的目的就在于数组往后扩张更方便,往前无法扩张就得移动整个数组附Euler-13代码#include<iostream>#include<cstring>using namespace std;char str1[55], str2[55];int num1[55], num2[55], sum[55];int main(...原创 2021-10-02 13:36:48 · 120 阅读 · 0 评论 -
递归与循环
递归好处:代码更简洁清晰。一般来说,一个人可能很容易的写出前中后序的二叉树遍历的递归算法,要写出相应的非递归算法就比较考验水平了,恐怕至少一半的人搞不定。所以说递归代码更简洁明了。递归坏处:由于递归需要系统堆栈,所以空间消耗要比非递归代码要大很多。而且,如果递归深度太大,可能系统撑不住。一般尾递归(即最后一句话进行递归)和单向递归(函数中只有一个递归调用地方)都可以用循环来避免递归,更复杂的情况则要引入栈来进行压栈出栈来改造成非递归,这个栈不一定要严格引入栈数据结构,只需要有这样的思路,用数组什么的就转载 2021-10-01 14:34:08 · 299 阅读 · 0 评论 -
欧拉计划 算法日记
1.相同特性的数据,可以看做等差/等比数列,然后运用求和公式原创 2021-09-29 12:41:31 · 196 阅读 · 0 评论
分享