在分析我正在研究的算法之后,这就是运行时间
N Time
1000 0.019123315811157227
10000 0.11949563026428223
100000 1.4074015617370605
1000000 16.07071304321289
该算法简单地返回2个2D数组中的公共点('a'和'b')
这是已使用的代码
def common_points(a,b):
start=time.time()
specialSuperSorting(a) #Insertion Sort - ~1/4 N^2
specialSuperSorting(b) #Insertion Sort - ~1/4 N^2
common=[]
for i in range(len(a)):
x=a[i]
#BinarySearch coordinates(x,y)-Returns True if found, false if not
y=specialBinarySearch(b,x)
if(y):
common.append(x)
end=time.time()
print(len(a),' ',end-start)
return common
我知道我可以使用更快的排序算法...但我只是采取了更简单的方法来节省我的时间,因为这只是一个练习
这是次二次时间吗?我怎样才能根据N对T(N)的表来决定......没有算法本身
答案 0 :(得分:1)
算法的运行时将由其最慢的组件支配。插入排序已经是O(n^2)
或二次方,因此您的算法至少会这么慢。假设specialBinarySearch为O(log n)
,并且您运行n
次,算法的这部分将为O(n log n)
。
总之,您的算法在O(1/4 n^2 + 1/4 n^2 + n log n) = O(n^2)
中运行。它是二次的。 1/4
不会改变这一点。您可以在数据中看到此趋势,如果您要将其绘制在图表中,则趋势会比线性或n log n
快得多。