算法与数据结构入门

算法与数据结构是程序员的内功之一,要想写出高质量高性能代码,优秀的算法基础是不可或缺的。这个系列将以python实现,探讨一些常用的算法与数据结构。

​首先何为算法,将解决问题的方法共性进行的高度抽象,从思想的层面而言,便是道。数据结构则是在数组或链表的基础上附加特定的属性方法以获得性能的提升与所占空间的优化。为了量化程序的执行效率与存储空间的额外使用情况,引入了时间复杂度与空间复杂度。

时间复杂度是对代码执行效率的量化指标,即程序的执行次数,当程序的执行次数会由于某个变量变化时,我们以以变化函数来表示其复杂度。

​ 我们输出一个正整数n:

print(n)

​ 此程序的只需一次执行便可完成操作,我们可将其时间复杂度记为O(1)。

​ 我们再来写一个简单的for循环输出1~n(正整数):

for i in range(1,n+1):
    print(i)

​ 这个程序得运行次数取决于n值的大小不断变化,但始终为常数次,其时间复杂度我们便可记为O(n)。

​ 怎么样,是不是很简单?我们再来一题,输出n*n的矩阵:

for i in range(n):
    print("\n")
    for j in range(n):
        print("*", end=" ")

​这个程序的执行次数为ij,由于i与j相等于n,执行次数为n\n,复杂度便可记为O(n2)。

​以上的程序由于都没有额外开辟空间,所以空间复杂度皆为0。接下来我们举个简单的例子看下利用到额外空间的情况,换位:

z=x
x=y
y=z

​此时我们运用到一个额外的空间,那么空间复杂度记为O(1)。

有没有感到复杂度的计算十分简单?当然,这才刚刚开始,之后会根越来越复杂,逐渐深入。以下是常见复杂度的大小效率排序。

​ O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n)

​学习算法与数据结构是一件不是很令人愉快的事,那我们什么时候可以不用学算法与数据结构呢?
现代科技的进步让设备的性能快速提升,但至少就现在而言,性能依然是远远不够的,在实现相同结果的情况下,经过算法与数据结构加持的代码在效率与存储空间的利用上往往远强于未经优化的代码,如之后会提到的排序算法。
我想等到设备的性能强悍到可以忽略代码上的优化提升(量子计算机),存储的成本变得极其低廉吧,希望有生之年可以实现。

你可能感兴趣的:(数据结构,算法,python)