【发布时间】:2019-12-08 20:57:49
【问题描述】:
我对 Big O 很陌生,我一直在努力评估我的两种算法的时间复杂度,我应该将其与学校项目进行比较。
二等分:
import time
tid_0 = time.perf_counter_ns()
x_0 = -20000 #Interval
x_1 = 20000
fortsæt = True
while fortsæt:
f_x0 = x_0**3+2*x_0+4 #f = x**3+2x
f_x1 = x_1**3+2*x_1+4 #Finder y værdier
x_m = (x_0+x_1)/2 #Midtpunkt
f_xm = x_m**3+2*x_m+4 #Midtpunkt y-værdi
if f_x0 * f_x1 > 0:
print("ERROR: Interval ugyldigt")
exit()
print(x_0, x_m, x_1)
if f_x1 * f_xm < 0: #Hvis = negativ tal
x_0 = x_m
elif f_x0 * f_xm < 0:
x_1 = x_m
if x_1-x_0 < 0.0009: #Stopper While-loopet
fortsæt = False
total = time.perf_counter_ns() - tid_0
print("total tid: " + str(total) + "ns")
牛顿法:
import time
tid_0 = time.perf_counter_ns() #Påbegynder tidtagning af programmet
x_0 = 20000 #Definere et startværdi x_0
fortsæt = True
while fortsæt:
f = x_0 ** 3 + 2 * x_0 + 4 #Funktion f(x)
f_d = 3 * x_0 ** 2 + 2 #Differentieret funktion f'(x)
x_n = x_0-f/f_d #Find x_0 - f(x_0) / (f'(x_0 )) = x_1
print(x_n)
if x_0 - x_n < 0.0009: #Stopper While-loopet, hvis forskellen mellem de to nulpunkter er 0,009
fortsæt = False
x_0 = x_n
total = time.perf_counter_ns() - tid_0
print("total tid: " + str(total) + "ns") #Printer den endelige køretid
根据我的最佳理解,我想我的牛顿法算法在最坏的情况下是 O(n),在最好的情况下是 O(1)。不过,我不太确定。
另外,这里的重要变量是x_0。
有人可以澄清并告诉我我是对还是错?提前致谢!
【问题讨论】:
-
你认为
n是什么? -
@Marat 抱歉,我认为 n 为 x_0
标签: python algorithm big-o bisection