【Python数据结构与算法】(一)基本概念和算法分析_python数据结构与算法分析

50 阅读2分钟

g

n

)

<

O

(

n

)

<

O

(

n

l

o

g

n

)

<

O

(

n

2

)

<

O

(

2

n

)

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

O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(2n),其中

O

(

l

o

g

n

)

=

O

(

l

o

g

2

n

)

O(logn)=O(log_2n)

O(logn)=O(log2​n)

具体的案例说明如下:
  • O(1):
print("Hello World")

  • O(n):
for i in range(n):
    print('Hello World')

  • O

(

n

2

)

O(n^2)

O(n2)

for i in range(n):
    for j in range(n):
        print('Hello World')

注意: 这里的时间复杂度相当于一个单位,因此我们只关注最高阶的情况。例如:

for i in range(n):
    print("Hello World")
    for j in range(n):
        print('Hello World')

上面这个虽然相当于是

n

2

n

n^2+n

n2+n个计算,但是我们记为

O

(

n

2

)

O(n^2)

O(n2)。可以看出一个循环相当于一个n,如果减半呢?

  • O

(

l

o

g

n

)

O(logn)

O(logn)

while n > 1:
    print(n)
    n = n//2

此时循环减半,它的复杂度是

O

(

l

o

g

n

)

O(logn)

O(logn),例如,当n=64时候,打印的输出为:64,32,16,8,4,2.一共六次,等价于

l

o

g

2

64

=

6

log_264=6

log2​64=6。

如何快速判断算法复杂度:

下面介绍最基本情况下如何判断算法复杂度。

  • 确定问题规模n

  • 如果有循环减半——

l

o

g

n

logn

logn

  • k层关于n的循环——

n

k

n^k

nk

主项定理:

上面的方法是判断一些最基本的简单的情况,下面我们介绍一种处理更复杂情况的判断方法:主项定理
假设

a

1

b

1

,

f

(

n

)

a\geq1,b>1,f(n)

a≥1,b>1,f(n)为一个函数,

T

(

n

)

T(n)

T(n)由递归式:

T

(

n

)

=

a

T

(

n

b

)

f

(

n

)

T(n) = aT(\frac{n}{b})+f(n)

T(n)=aT(bn​)+f(n)

T

(

n

)

T(n)

T(n)的渐进有如下情况:

(1)如果

f

(

n

)

<

n

l

o

g

b

a

f(n)<n^{log_ba}

f(n)<nlogb​a,

T

(

n

)

=

O

(

n

l

o

g

b

a

)

T(n)=O(n^{log_ba})

T(n)=O(nlogb​a)

(2)如果

f

(

n

)

=

n

l

o

g

b

a

f(n)=n^{log_ba}

f(n)=nlogb​a,

T

(

n

)

=

O

(

n

l

o

g

b

a

f

(

n

)

)

T(n)=O(n^{log_ba}f(n))

T(n)=O(nlogb​af(n))

(3)如果

f

(

n

)

n

l

o

g

b

a

f(n)>n^{log_ba}

f(n)>nlogb​a,

T

(

n

)

=

O

(

f

(

n

)

)

T(n)=O(f(n))

T(n)=O(f(n))

下面我们来看一下我们刚刚那个例子

while n>1:
    print(n)
    n = n//2

上面这个代码每一次都把数据分成两部分,然后打印。那么按主项定理,可以写出一下式子:

T

(

n

)

=

T

(

n

2

)

1

T(n) = T(\frac{n}{2})+1

T(n)=T(2n​)+1
此时

a

=

1

,

b

=

2

,

f

(

n

)

=

1

=

n

0

a=1,b=2,f(n)=1=n^0

a=1,b=2,f(n)=1=n0,计算

img img img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取