算法Day1
算法 Day1
算法和数据结构
算法是解决问题的方法,一个优秀的算法通常具备两点:
- 高效
- 正确
我们小时所学习到的田忌赛马、曹冲称象这些历史中用于解决办法的方法,非常巧妙的解决了问题,而且收获到了很好的效果(结果正确,内耗少)
数据结构是解决问题过程中所使用的容器
容器是用于存放数据的地方,同时容器还具备一定的处理数据的能力,可以帮助我们高效的完成任务。
但在编程之中,数据结构是一个抽象的概念,例如我们经常使用的队列结构,只能在一端加入数据,并只能在另一端移除数据,这样看似简单的数据结构,在编程的世界中,发挥了巨大的作用。
数据结构是缓存。
我们在解决问题的时候,通常不是把数据一股脑的全部处理完,而是将数据封装到一个容器中,等待到需要的时候,再拿出来使用。
恰当的使用数据结构,可以帮助我们高效的处理数据。
没有完美的算法和数据结构,只有合适的。
因为某一个算法不可能解决所有问题,某一种数据结构无法存储和处理所有数据。
数据接口例如:栈、队列、哈希表、二分搜索树、并查集、优先队列、字典树……
为什么我们需要这么多的数据结构呢?因为没有完美的数据结构,编程世界中面对的数据是各种形状的,不可能有某一种数据结构可以完美的解决各种数据结构所面临的问题。
如何学习
- 按标签刷题
同类的问题一起刷,这样在学习过程中,可以反复巩固知识点,进而总结解决这类问题的一般规律。
- 由易到难
其实这点,对学习任何知识都是通用的,从简单的问题开始解决,这样有利于培养信心,建立好学习的兴趣。
-
注意编码规律、可读性
-
不需要一下将所有的问题都弄清楚
-
前期练习为主,理论为辅
-
多练习、多思考、多总结
需要了解一下显性知识和隐性知识的概念
显性知识通常是指那些容易懂的知识,例如书面文字,图文介绍,动画介绍等
隐形知识
我不是通过看说明书来学会如何使用手机的,也不是看自行车教程学会骑自行车的。
这类实践出来的知识,被称为隐形知识。