目录
算法的特性
在开始真正接触算法之前,我们需要先知道算法有哪些特性,这些特性不需要记,不需要背,你会说不出来,但,这些特性却会完美的体现在你的编码里。
有穷性
指的是我们写出来的程序,我们写出来的算法,是能够执行完的,不是说是一个死循环,永远执行不完
确定性
指的是一定会有一个结果,一定会有一个确定的结果
可行性
这个就如同字面意思,写的这个程序,这个算法,是可行的,你要是不可行,写了有什么用,你说对吧~
有输入
这个,就相当贴切了,你写的程序,你写的算法,得有输入吧,你不能凭空就能跑吧
有输出
至于这个么,上面都说了,有输入,那你经过了一系列的运算,你总得有输出吧,不然你把我的数据吃了?
设计原则
上面说完了特性,当然就会有设计原则,任何程序,任何事情的开始,都一定有一个标准,算法也是一样的
正确性
这个不用我强调叭?我们写的程序啊,算法啊,都是为了解决问题的,那首先肯定是得正确,不然就得改,重写,对于问题来说,没法解决的程序,就是垃圾,没有任何用途,你不能说我用你写的代码,我卡卡的编译都过不去,或者启动还没跑呢就给我报错了,这是不是不得行
可读性
这个你看到的时候,可能会下意识的 ‘切’ 一声,然后缓缓的鄙视本楼主:‘喵的,锤子的可读性,只要能解决问题就行,只要老子写的舒服就行’
介个,老实说,可读性这个不属于硬性要求,虽说有什么开发手册啊,开发规范啊,但是,你就算写的任何人都读不懂,也不影响使用
但是!注意啊,但是来了,说明有别的
写的那么反人类,谁都看不懂,你确定你自己过一段时间能看懂?万一有修改呢?程序算法这玩意修修补补的,很正常对吧,再者说了,你写的反人类的,谁都看不懂,别人怎么接
呐呐呐,你可能会说这你都不关心,那你想想,你写的好了,自己看起来不爽吗?耶?这是我写的代码吗,帅啊,真是和我本人一样帅,如果你写的可读性很好,还可能被拉去大家都能看到,向你学习,你可能因此收获无数小迷妹,小迷弟,有可能突然就被哪个大机构大组织看上了,高薪聘请你去工作,这不香么,你的代码就是源码级别的玩意,倍儿有成就感对不对!
健壮性
至于这个健壮性吧,就是说,BUG少一点,问题少一点,那不能一会一个BUG,一会一个BUG,这个感觉你自己体会.......
高效率
这个高效率吧,直白一点,你的程序快一点,那不能我让你算个1+1等于几,好么,你给我算了一个小时,我上去就是几个大耳帖子
低消耗
这一点你可能会笑,你可能会说,啊,我们服务器内存很大,好几个T呢,不够?不够就扩容啊,啥?CPU?我们可是最强的至强U
停停停停停!行行行,你是土豪,你们公司牛逼,但是兄弟啊,你怎么知道你的代码会在什么机器,什么场景状态下运行呢?
如果就是不能给充足的内存呢?而且,一台服务器会跑n个服务,你的占用那么多,别的还玩不玩了,大家都占那么多怎么办,资源可不是无限的
人类的科技发展到现在,不可否认的是,内存这种的,还是属于稀缺资源
所以,可长点心吧,我不信你一个程序占用80%的CPU和内存,运维同事们能同意你这么搞,你的leader能同意你这么搞,除非公司你家的,那当我没说
算法评价指标
评价算法的两个指标就是:时间复杂度、空间复杂度
时间复杂度,就是一个程序运行所需要耗费的时间
空间复杂度,就是一个程序运行所需要消耗的内存