引言:
本人今年刚毕业,由于大学期间没好好学,基础非常薄弱,所以到现在都没找到工作。只好投应届生或硬着头皮去投实习生,这些天对我打击非常大,连个面试的资格都没有,笔试就被刷掉了。笔试考的都是算法题,每次大脑都是一片空白,回来之后就是当下很忧郁啊。闲得无聊的时候就在心里吐槽,为毛老考算法,不能考我实践能力吗?或面试问问我技术和项目方面的不好吗?这几天没事就在论坛上看大家对待要考算法这一问题的看法,有支持的,有认为没用的。然而,有些奇怪的是,支持的基本都是播客等级较高的大神,这下就要思考了,算法到底有没有用,我到底漏掉了什么?
今天一直在想这个问题,晚上也睡不着,就写一篇关于数据结构与算法方面的博客,跟大家分享一下这几天思考的成果。
数据结构与算法:
我们知道:程序 = 数据结构 + 算法。为什么这么说呢?
数据结构:
假设现在有一个新建的图书馆,引入了很多的书,没人管理它们,大量的书籍都在地上杂乱无章的摆放着,整个图书馆无处落脚,就别说在里面学习了,这么大的空间这不浪费资源吗?想借书去哪找?怎么找?找到天荒地老?既然这样,引进一些书架,将这些书放在书架上,再对这些书架有规律的分布,这就解决了空间浪费的问题,其余的空间可以供同学们在这里学习。那么这时又有问题有来了,怎么找到一本具体的书呢?对书进行分类,将相同种类的书放在同一书架上,在填上细化的标签(这里同学们可以回忆大学图书馆是如何排列的),我们通过找到同一种类型的书籍存放的书架的位置,在通过书名找到具体的书。这下问题就解决了。这里,我们可以认为“图书馆”就是电脑中的磁盘和内存。而有效的利用空间存放和快速的取出书籍就是“数据结构”的作用。无论是书籍、论坛、百度百科都解释数据结构就是“存放”数据的一种方式。但在我学过的所有的数据结构来看,我不认同这一观点,无论是数组、链表、栈、堆、红-黑树、散列表等等。他们都提供了“存放”和“取出”数据的方法。所以在这里,我认为:数据结构是有效的利用空间“存放”和“取出”数据的一种方式(希望这里不要误导大家,我只是把我自己的想法表达出来,尽量理解官方的解释,毕竟人家是权威)。
算法:
算法是解决问题的思路。
假设今天要从北京去纽约,想要尽快的到达,怎么办呢?
有两种交通方式:
第一种方式 m1:坐动车去有港口的城市,在打的去港口,之后坐轮船去纽约。
第二种方式 m2:打的去机场,坐飞机直接飞到纽约。
有两种交通线路(这里就不具体举例了,就用长、短表示吧)
第一种线路 r1:长
第二种线路 r2:短
通过组合,形成了4种去纽约的方式:m1+r1,m1+r2,m2+r1,m2+r2。
我们知道m2+r2这种方式是最优解,m1+r2是最劣解,假设将这种情形搬到程序中,如果不熟悉算法,大量的使用m1+r1,这就会造成大量的系统资源浪费,性能会大打折扣,用户体验感极差,如果我们相出了最优解,系统性能就会大大提高,处理用户请求就会变快。用户体验好了,带来什么,你懂的。
这就是算法的作用,用较少的资源去快速的解决问题,这是一种思路,需要常年累月的积累。
在回来说程序 = 数据结构 + 算法。
我们做每件事情都需要相应的资源和相对应的方法完成,程序也不例外。
写程序的原因就是利用资源去解决问题,如何快速的“存取”资源和如何高效的利用这些资源快速的解决问题,需要我们不断的总结经验和思考。
总结:
大家仔细想一下,计算机的解决思路都和我们现实生活有联系,将写程序当做自己在计算机里指挥。当然,这不是简单就做到的,需要多想,多练。
第一次写博客,表述的有些问题,有不对的地方希望大家指点出来,互相学习、进步。