acm思维随笔

关于思维的个人两种半冲突的理解

第一种理解:

天赋+思维训练+第一次思考方式,主要由本人自己思考形成思维

第二种理解:

天赋+脑中知识图形式+已有知识熟练度,主要由学习过的事物形成思维

思维随笔:(不定时更新)

1.查找

|||||||||||当需要查找时,无论查找的是什么,都可以这样考虑:直接计算=数组下标>前后缀状态,二分,哈希,离散,map。
|||||||||||也突然发现了关于暴力枚举的优化
我们没有必要进行全部数据范围的枚举,可以只枚举可能是答案的点。
||||||||||我的意思是,比如数据的范围是1e9,然后这个数列的某一个值造成了最优答案,可以枚举数列的单个值来求,说起来很基础,但确实可能会忘记。

2.个人算法理解

差分:将数组转换成条形统计图,利用前后缀和思想。
动态规划:实质仍是贪心,本质上是将贪一次变成贪n次。个人认为是“状态叠加”的味。
于2020/3/14更新:
所谓动态规划,实质是状态转移,我一直不懂到底什么是状态转移,最近做了一道题,豁然开朗。
动态规划不能仅仅局限于背包之类的问题上,接下来我会用比较笼统的话去叙述以我的视角去看待动态规划。
所谓动态规划,其实就是因为一个状态从另一个状态得来。(这也是我之所以不能理解的地方){开始:
如果你已经知道了大概的动态规划是怎么回事

dp[i][j]=max{dp[i-1][j],dp[i][j’]+val}

一直没能理解其中的含义,现在终于知道了。为了方便,我用几何类比一下。
对于第i个状态,再进行动态规划的时候,其实是这样的。
i个状态的获取方式一般不只一个,那么我们怎么办?
全存,是的,动态规划就是在暴力过程中储存所有可能的结果。
比如典型的背包问题。
其归咎于n个,每个包有选不选两种情况。
怎么全存?全存就是2^n的问题。
于是我们转化,因为每个情况之后,肯定会有相同的。
什么是相同的?
比如,有重为2,3的包和一个重为5的包。他们就是相同的。
但是,存的时候就只会存2,3的包,因为只有2,3的包是同一情况下的较优解,这就是我前边说的贪心概念了,只存较优解,较优解永远覆盖弱的解,因为只有这样才能从较优解不断较优从而达到整体最优。
}

假如你已经会递归了(递归其实就是动态规划的逆向思维,那么递归的逆向思维也就动态规划)
典型的动态规划问题,是将一个本来暴力需要a的b次方的问题去转换到a*(值域)的问题。
可以这样想,对于任何一个选择,其始终会落在值域,那么对于一个值(设为A),由于另一个值(设为B)是有这个值(A)进行操作得到的,所以只需要用这个值(A)去模拟操作,然后将原来的B与操作得到的新值去比较,仅保留最优。得到了的B可能不止一个,因为有很多个A可以得到。
动态规划对于算法小白来说可以说是比较难理解的(比如我)
贪心:是暴力优化,优化掉了看上去不是好的方法。可能需要用到前后缀,并不一定是和或者差,也可能最大值,最小值。
并查集:借用数组下标迅速查找来保证时间效率。

3.个人关于比赛的看法

可能是错误的结论,但是我觉得以后比赛中的板子题会越来越少,算法题的门槛会越来越高。思维题将会作为铜牌题占更大的比例。入门算法数论或者数据结构题太水,高级一点的又只有大触能做出来,平常一点的又怕被喷水。但出思维题就没什么好说的。

4.竞赛怎么学

2020/4/6日更新
以下为本人想象中关于理想情况下的竞赛学习模式:
1)系统性的学习基础理论知识(群巨都推荐的那种书):
----①先进行原理理解,比如kmp是怎么减少比较次数,线段树是怎么进行logn级操作,动态规划是最优状态保留,迪杰斯特拉最短路是因为正数加正数一定大于原来的正数。
----②进行简单练习,比如把它当做黑盒用,再进阶一点就是拿着板子去改。
----③进行专题训练,在进行专题训练的时候,不必考虑是不是用这个知识点,而是只使用这个知识点。就算其他方法更简单,也是用专题的解法进行求解。
2)练习(推荐网络练习赛,不推荐没有明确目标的漫无目的的做[因为你无法热血起来])
----①首先推荐codeforces知名度高,也适应各个水平,最重要的是赛后可以查看别人代码,测试数据以及每场都有题解,思维扩展收益很大,每道题不止一种解法,2小时的时限可以促进你的专注力,打的时候一定要有危机感,当做真正的比赛。其次是国内的牛客和洛谷,这两个偏重于算法,适合进行算法的理解和转换。说白了就是作为数据结构和高级算法练习很好。
----②当你打完一场网络比赛的时候,最重要的结束后,你一定要补题和看看别人怎么做的以及查看题解,补题重要性不言而喻,你经常会遇到没有学过的知识点,纵使你看过很多的书。但是你打的比赛越多,补得题越多,你的知识面就越广。万一正式比赛的时候刚好撞见了呢?
----③悟悟是反思,是发散思维,寻找其他解法,把你的脑子想成一个电脑,进行dfs寻找可行解法。每找到一个可行解
3)端正心态(心态很重要)
----①比赛是为了拿奖
----②拿奖其实很简单,区域铜,省银(河南弱省,感觉银还是很简单的)
----③每做一道题是一定有收获的,可能有些题你想到了,就很简单,可能有些题你没想到,就很困难。但是,实力是一定不会凭空消失的。
最终条:无论什么时候(线上还是现场),不要心态炸掉,坚持,仔细检查,思考,绝杀是一定有可能的!

展开阅读全文

30天c++leetcode算法训练

06-17
作为要准备踏入码农行业的人来说,怎么能不去刷刷LeetCode呢?LeetCode收录了许多互联网公司、IT企业的笔试题目,被称为刷题神器。同样的,不少非计算机专业的科班出身的学员朋友,做的编程还是挺多的,在编程过程中或多或少觉得自己的“野路子”实在太多,有时不仅写得煎熬,而且书写很多时候都非常不规范。因此,学习、借鉴、模仿高手的代码套路,不仅仅有助于提升职业技能,更进一步的也能增加自己求职的底气和心气。Leetcode是面向职场就业的,而非追求高度思维技巧的ACM竞赛,特别是LeetCode的基础题目并不多,目前大概有358道,而且其题型都非常简单明了,并不需要的复杂的理解,一般都在50行左右就可以解决。这有助于广大的求职朋友建立自信,提升技能。本门课程分类精选了30道题目,从vs code刷题环境搭建起手,手把手的进行了课程引导,以期能帮助广大求职人员,积累知识,提升技能,不过有些题是加锁的,好像有付费才能使用,能做的题应该有150多道吧,这也是完全足够了。   另外,如果你写了上百行代码,就肯定说明你想太多了或太复杂,虽然都能用很短的代码就能解决,但并不意味着LeetCode的题目非常简单,实际上LeetCode基本上涉及到了所有常规的算法类型。   关于LeetCode的刷题时间:个人认为大概是要一个月左右,如果你是大神的话,也许大概能在两到三个星期间刷 完,不过做为新手,除了埋头做题,更重要的是去讨论区看看别人的代码或思路。一道一道刷题虽然速度慢了点,不过会学到了许多。为了帮助广大学员朋友切实提升程序开发技巧,积累学习信心,克服畏难情绪,丁宋涛和夏曹俊老师共同精心设计了本门课程。希望通过本门课程可以分享知识,掌握技能。
©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值