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.个人关于比赛的看法

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章