【发布时间】:2016-07-01 10:43:03
【问题描述】:
除了渐近复杂度(Big-O notation)之外,用于评估算法的最常用的概念是什么?
示例:
假设我有以下算法调用函数 func,复杂度为 O(1)。那么这个算法将具有复杂度 O(N1 x N2)。但是,如果我事先知道 N1 是有限的 [1,5],那么最坏情况的复杂度将是 O(5 x N2),根据定义,它也是 O(N2)。
for i in range(N1):
for j in range(N2):
func(i,j)
如果我可以使用函数 func2 遇到此算法的不同实现,同样复杂度为 O(1),但现在使用不同的外部循环范围 N3。该算法预计为 O(N3 x N2)。但是,如果我知道 N3 的范围是 [10,50],那么最坏情况的复杂度将是 O(50 x N2),也就是 O(N2)。
for i in range(N3):
for j in range(N2):
func2(i,j)
问题:
所以,这是一个简单的证明渐近符号是有用的,但对于一些更具体的情况可能不是最合适的比较方法。如何比较这两种算法?最常用的方法有哪些?仅使用算法所需的迭代次数是技术上严格的指标吗?
有什么推荐的参考吗?
【问题讨论】:
标签: python algorithm performance complexity-theory