去年末啃了一点数据结构的书和视频,感觉收获蛮多的,趁着最近学python刚好学到相关内容,就整理一下分享给大家。
其实一个问题通常有很多种答案和解法,虽说计算机运行速度已经够快了,但是要处理比较非常复杂的问题时,计算时间往往就没有那么乐观了。
比如百度搜索引擎,如果要我们自己做一个的话,你会怎么设计?面对互联网茫茫宇宙数据,如何在比较短的时间内,为客户提供相对满意的搜索结果,这就不是几十行代码就能实现的。就需要运用到高效的算法,下面就简单聊一下算法吧。
1
什么是算法
算法就是解决问题
问题是什么 Problem
我们有什么 Input
我们想要得到什么 Output
尝试最简单的方法 Simple Solution
看看如何改进 Develop Incrementally
是不是很简单的说,的确,算法就是从简到复杂,面对不同的数量级,不断优化自己的代码,举个简单的例子,随机给一个100以内的数字,要用多少次可以猜中(每次都会提示偏大还是偏小,或者猜中),最快捷的方法就是每次从中间的数字猜,不断缩小范围。2的七次方是128,也就是最多7次就可以猜中100以内的数字。
如果你要用其他天马星空的方法去猜,比如从1数到100,最多可能要猜100次。
上述2种方法都能猜中数字,但是孰优孰劣一目了然。这就是算法。
当要猜的数字范围不断变大,比如猜100万以内的数字,折中取数字猜,最多只需要20次即可(2的10次方是1024,20次方刚好100万多一点),如果再用第二种思路去猜,就费劲了。
2
一个常用的计时器函数
#!/usr/bin/env python3.6
# _*_ coding:utf-8 _*_
# __author__: Ed Frey
# DATE: 2019/3/14
from time import clock
def timer(f):
def _f(*args):
t0 = clock()
f(*args)
return clock() - t0
return _f
def func(date):
for i in range(10):
print(i**3,date)
if __name__ == "__main__":
time = timer(func)("2019-3-14")
print(time)
通过上面的timer来运行func函数,就可以直接get到func函数的运行时间。至于timer后面两个括号,第一个是函数名,第二个相应的函数参数,会稍微有点绕哈。
大家以后就可以通过这种方式来检测自己代码运行效率,记得收藏哦!
对于业余码农来讲,如果要有质的飞跃,学习算法和数据结构是必不可少的。这许多年来,虽然我也做过不少脚本、代码,但是如果扪心自问一下,有技术含量吗?微乎其微,能认识到这点,我觉得就很弥足珍贵了。