这是次二次时间吗?

时间:2016-10-16 20:32:14

标签: algorithm time

在分析我正在研究的算法之后,这就是运行时间

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)的表来决定......没有算法本身

1 个答案:

答案 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快得多。