博主是一个喜欢胡思乱想的蠢蛋,我无论学什么都在想:
1.我为什么要学这个:到底是为了考试升学,还是为了面试找工作,还是想在其他人面前装b
2.学这个知识能给我带来哪些提升?
3.为什么别人学的比我轻松?到底是因为笨,还是因为方法不对?还是有认知上的差距?
已经刷了600+题,却还是感觉在原地踏步,学了后面忘了前面,和刚入门速成的新手一个样。
本文就是博主的内心os,希望大家看了就当图一乐。
算法是什么,为什么要学习算法?
我们写一段程序,是希望让计算机去代替我们完成一些,具有一定流程或在特定规则下的一组操作。做出一个动作或操作是由一系列的判断和计算完成的。在同样的计算资源下,我们希望可以优化程序在解决某一问题的计算次数,即希望让程序在解决该问题时计算次数减少。
计算机思维和人思维的差别
人是通过知识+认知做出判断和决策的。
计算机是通过计算,并根据计算产生的概率去做出决策的。
比如去判断一个最值,人通过知识+认知可以很快的做出来,计算机则是要把所有相关的数据进行计算,通过计算结果进行判断。
算法优化的途径只有2个:
1.通过数学来减少计算次数
2.通过记录某些关键信息,可以减少计算一些情况,从而减少计算次数
前者是最本质的算法优化(根据数的性质和规律)。后者是通过以空间换时间,这一思想,来进行优化。
我们所谓的算法,其实多数为第二种,因为90%的问题无法通过数学优化
问题的关键:所以几乎所有的算法题,大方向都是:存下关键信息,减少计算次数
把问题聚焦在这两句话上,我们可以发现我们在算法信息中最需要在思维上提升的几个问题:
1.这个问题抽象出来的模型是什么?
2.解决问题的一个方案是什么?
3.这个方案一些步骤中,我们要枚举哪些信息?
4.在枚举这些信息时,我们可不可以通过,预处理,数据结构,将问题分类,数据的一些数学特征,等,去减少我们的枚举情况
5.我们要去存哪些信息?
6.我们要怎么存这些信息?
7.题目中的边界问题
我们在做每一道题时,如果你想明白了所有的以上7个问题,做这道题才是有效的,否则等于白做。
尤其是模板题,这7个问题必须清晰明了。如果在使用时有某点遗忘,应尽快复习,搞清楚模板的这7个问题。
标签:思维,思考,信息,问题,次数,算法,计算,我们 From: https://www.cnblogs.com/oiart/p/18226883