无论是什么语言,归根结底它还是电平的变化,虽然做软件不需要深入了解到那么深入,但是我们需要了解程序的本质。
程序是什么,程序=数据结构+算法;什么叫算法,算法简单说就是计算机的操作;什么叫数据结构,数据结构就是计算机操作对象。
我是一个高要求的人,所以如果同样希望做出更好的程序,不满足于现在的语言的同学们可以和我一起讨论。本系列文章将从最基本的数据结构讨论起,直到常用的算法为止。最基本会包括六度空间算法,红黑树等等。
闲话不多说。我们进入正题。
这一个部分我想总结一下关于算法设计的基本目标和算法分析。
算法的基本目标 是什么?各个地方的说法总结各种什么性什么性的我不喜欢。
第一、算法就是用来解决问题的。所以它最基本的就是要能够解决问题。
第二、算法就是用来提高效率的。所以它要能够在更小的内存上、用更快的速度去解决问题。至于如何平衡空间和时间这是根据实际情况考虑的问题。
第三、算法能够提高运行的能力。简单说两个算法,一个出错了能跑回来,一个出错就当机,当然我们想要选择这个能跑回来的。
至于书本上说的可读性等等,都是相对的,如果连基础的数学运算都没法理解,如何理解一个高等工程函数?如果能理解高等工程函数,还有基础函数不理解的么?
然后就是关于算法分析 了。仅仅从程序上看算法的效率是由他的运行时间决定的。比如说循环次数,分支等等。但是这里在实际中存在另一种可能性,就是使用率 。我认为,使用率去决定算法的最终实现,在实际中的效果会比其他的分析方法更加的高效。所以我们要在成为一个好的程序员的同时成为某一个领域(比如金融、比如医药)方面的能手。
当然基本的分析方法还是要谈谈:
1.时间分析(效率分析):分析基本运算次数的数量级。
2.空间分析:考虑最坏的情况。
在现在商务中,由于存储的价格降低,我们可以认为空间是无限大的,然后去设计算法。而且我们还有云计算。
综上所述,我们设计一个算法,一个程序,基本需要考虑的问题:
1.团队的知识能力。也就是说能看懂哪个层次的算法。
2.程序面向的主要使用者的使用方式。
3.软硬件资源。到底是空间更多,还是计算能力更快,合理利用这些资源。