由于最近在复习数据结构,本人呢对于python也比较熟悉了解,加上python近年来比较火所以想写一系列关于python数据结构的内容
和严蔚敏老师书的结构类似,我也会从以下几种数据结构来写
从整体上来讲,python写数据结构和算法肯定是比C/C++简单许多的,所以学习成本不会那么大,希望每个人都能先学习一下python的基础知识,然后再来看这个系列的内容。
今天是这个系列的第一篇博客,所以我不会直接讲数据结构或者算法,而是讲讲一些必须要了解的东西,然后举点小例子让大家感受一下。
我们使用计算机编程的最终目的只有一个,用计算机去解决实际问题。而且我们写的程序不应该仅仅只能解决一个问题,而是需要解决一系列的问题,因此我们在写代码之前不要着急去动手,而是应该这样做:
以上其实是需求分析和代码设计,我也就不提那么多软件工程相关的了,毕竟还是想着让大家学习成本尽可能降低,说这个只是想让大家多思考,别急着盲目写代码。
有了设计好的算法之后,我们用编程写出相应的代码就解决了问题,至于后面的测试和优化这里暂时也就不讨论了。所以我们可以看到编程其实最难的地方在于思考如何设计出让计算机能解决问题的计算方法。
来举个例子吧:
假如我现在想求一个正数的平方根,有什么办法吗?
分析一下这个问题,我们首先想到的就是求平方根,也就是对x,算出一个y,使得y*y=x
这个想法很好,然后继续,那我们如何得到y呢
那有了第二种思路,我们就可以设计算法来实现了:
然后把算法用代码实现
def mysqrt(x):
E=1e-8
y=1.0
while abs(y**2-x)>E:
y=(y+x/y)/2
return y
print(mysqrt(2))
尽管我们实现了代码,但是我还是要强调另外一件事,那就是不要重复造轮子,注意效率。我一开始就说了python简单,为什么?因为python已经把常用的数据类型都给我们内置好了,基本的运算操作也已经都写好了或者有相关的库可以调用,所以不用我们那么麻烦的再去像C一样自己去写代码去构造集合,字典这样的结构,同时也就需要我们会用这些已经有的东西。
基本的数据类型:
所以需要大家先去了解这些数据类型的使用方法,比如:list的切片,append操作,set与dict的使用。当然对于计算来说,math库中的函数或者numpy中的函数都要有所了解。
上面例子中的函数,其实我们用内置的函数就一句话
import math
print(math.sqrt(2))
#或者使用numpy
import numpy as np
print(np.sqrt(2))
效率更高,代码量也更少。所以我们要学会利用现有的东西去解决新的问题,重点是我们要有写代码之前的思考过程!!!
这篇博客的最后,我想提一下常见的算法设计模式:
还有算法性能的评价,时间复杂度,空间复杂度等等,很多内容我就不全部赘述一遍了,有很多优质博客大家有兴趣可以自己去查看。
大家可以想想下面这段代码有哪些信息。
a=[1,2,3,4]
print(id(a[0]),id(a))
print(id(a[1])-id(a[0]))
b=[]
import sys
print(sys.getsizeof(a),sys.getsizeof(a[1]),sys.getsizeof(b),sys.getsizeof([1]))
额,提一点题外话。为什么不更新flask相关的内容,第一是因为最近在复习没什么太多时间,第二就是感觉没多少人想看,所以就没什么动力更新。等明年稍微闲下来了我会慢慢去把flask,django还有关于go gin相关的博客全部补上的。java web相关的内容我还得去学一段时间,感觉计算机这个专业吧知识面太广,每个知识深度又很深,只能坚持努力一点点地去学了。