1.遍历法,时间复杂度为:O(n)
import random
import numpy as np
import time
def fun1():
start = time.time()
a=np.random.uniform(1,100)
random_list=[x for x in range(1,100)]
x=random.shuffle(random_list)
print(random_list)
first=random_list[0]
local_list=[]
time1=0
for i in range(1,len(random_list)):
if first<random_list[i]:
time1+=1
first=random_list[i]
print("第{}个局部最高点为{}".format(time1, random_list[i]))
end=time.time()
# print("n=10000000时运行时间为{}".format(end-start))
fun1()
def time1():
start=time.time()
fun1()
end=time.time()
times=end-start
print("时间为:{}".format(times))
time1()
运行结果:
2.二分法 时间复杂度为 O(log(n))
def fun2(a):
if len(a) == 1:
return 0
if len(a) == 2:
return int(a[0] < a[1])
middle = len(a) // 2
if a[middle - 1] <= a[middle] >= a[middle + 1]:
return middle
elif a[middle - 1] > a[middle]:
return fun2(a[:middle])
else:
return middle + 1 + fun2(a[middle + 1:])
if __name__ == '__main__':
# A = [1, 5, 2, 3, 4, 0]
import numpy as np
A=np.random.randint(0,100,10).tolist()
i = fun2(A)
print(A)
print("则复杂度为O(log(n))的局部最高点为{}".format(A[i]))
def time1():
start = time.time()
A = np.random.randint(0, 100, 10).tolist()
i = fun2(A)
print(A)
print(A[i])
end=time.time()
print("时间为{}".format(end-start))
time1()
运行结果: