在头条逼逼赖赖很久了,终于下定决心写一些专业的内容。看了很多程序员35岁遇到的危机,左思右想,大部分是算法与数据结构的核心技能不牢固,终日淹没在业务代码中。那就从这里入手,权做抛砖引玉。
很多人一提到算法与数据结构,会产生天生的恐惧感,很多非计算机专业的人也会有惯性思维就是编程是对数学要求很高的事情,事实上,绝大部分编程工作和数学关系非常小,大部分算法和数据结构也不涉及复杂的数学。
1、什么是算法和数据结构呢?
首先我们先忘掉什么算法、数据结构,来欣赏下吴彦祖的巅峰颜值。
然后我们看下阿祖在做什么?对的,组装手枪。
手枪被拆成了很多零部件,阿祖凭借对手枪的了解,快速的拼合这些零部件,使它最终成为一把具有*伤性功能的武器。
如果你能理解这个行为,你也就理解了算法和数据结构
N多个零件就是数据结构,他们各不相同
算法就是阿祖拼合手枪的思路,先拼这,再拼那
在算法的指导下,各种数据结构不断组合,最终形成一个具有一定功能的模块。
当然,相同的数据结构,使用的算法不同,结果也不一样。
由这个例子,稍微发散一下,你会发现你的生活小到炒菜做饭、打扫卫生、洗衣服,大到宇宙飞船、粒子对撞全部都可以拆分成算法和数据结构的思维。
总结一下,简单来看,算法就是你做一件事的逻辑,数据结构就是计算机系统中数据存储的一种方式。
2、理论定义一下算法和数据结构
「算法 Algorithm」是在有限时间内解决问题的一组指令或操作步骤。算法具有以下特性:
- 问题是明确的,需要拥有明确的输入和输出定义。
- 解具有确定性,即给定相同输入时,输出一定相同。
- 具有可行性,可在有限步骤、有限时间、有限内存空间下完成。
- 独立于编程语言,即可用多种语言实现。
数据结构 Data Structure」是在计算机中组织与存储数据的方式。为了提高数据存储和操作性能,数据结构的设计原则有:
- 空间占用尽可能小,节省计算机内存。
- 数据操作尽量快,包括数据访问、添加、删除、更新等。
- 提供简洁的数据表示和逻辑信息,以便算法高效运行。
3、算法和数据结构的关系
数据结构是基石
数据结构为算法提供存储数据的方式和操作数据的方法。对比来想,阿祖要组装枪,他得先知道他装的是手枪,狙击枪还是加特林,不同的枪,组装方法并不一样,不同的数据,也需要用不同的算法
算法是完成特定功能的灵魂
不管是什么枪,这个人必须知道怎么组装,而且他知道的方法越多,他才有可能选到最优的方式,组装的最快。
也就是一旦数据结构确定,算法逻辑最多的人,大概率能最高效的完成最终的功能
算法和数据结构有最优解
当确定算法,指定完成一个功能,一般都可以有多种数据结构去选择,但是不同的数据结构最终效率会相差很大,反之,确定数据结构,用不同的算法,效率也会相差很大。也就是确定了功能后,算法、数据结构存在一个最优解。
就像阿祖想要完成组装枪,如果是比谁最终完成组装,一定是他的算法赢了,但是最后成龙比的是谁的子弹先顶到对方头上,那成龙的算法赢。所以任何算法和数据结构的最优解前提都是先确定功能。
在真正的开发过程中,都是先确定功能,然后我们说的算法其实就是包含了数据结构和算法。