最小算法的渐近时间复杂度作为n

时间:2015-10-07 10:48:38

标签: algorithm big-o time-complexity asymptotic-complexity

我们已经知道一些算法的渐近时间复杂度是n的函数,例如

<0> O(log * n),O(log n),O(log log n),O(n ^ c),其中0

我可以知道最小算法的渐近时间复杂度是n的函数吗?

  • 更新1:我们用n来寻找渐近时间复杂度函数。 O(1)是最小的,但它没有n。
  • 更新2:O(1)是我们可以达到的最小时间复杂度,但是n的下一个最小的众所周知的函数是什么?据我研究:

    O(alpha(n)):逆Ackermann:使用不相交集合的每次操作的摊销时间

    或O(log * n)迭代对数Hopcroft和Ullman在不相交集上的查找算法

3 个答案:

答案 0 :(得分:5)

除了琐碎的O(1)之外,答案是:没有一个。

如果某些内容不是O(1)(即n -> infinity,则计算时间会变为无穷大),无论您找到n的任何边界函数,总会有一个较小的函数:只是取一个边界函数的对数。你可以无限地做到这一点,因此没有最小的非常数边界函数。

然而,在实践中,当你到达inverse Ackermann function时,你应该不必担心:)

答案 1 :(得分:1)

  1. 给定算法的复杂性不必通过众所周知的函数表达。另请注意,big-oh不是 给定算法的复杂性。这是复杂性的上限。
  2. 您可以根据需要构建增长速度的函数,例如对于任何k,n 1 / k
  3. O(1)在复杂性方面尽可能低,严格来说1是一个有效的函数,它只是常数。
  4. 编辑:我能想到的一个非常缓慢的增长函数是iterated logarithm作为disjoint set forest的复杂性,通过路径压缩和按行级联合实现。

答案 2 :(得分:1)

无论建议什么,总会有一个“较小的算法”。

O(log log log log(n)) < O(log log log(n)) < O(log log (n)) < O(log(n)). 

您可以根据需要添加logO(1)。但我不知道这些是否有现实生活的例子。

所以我的回答是你会越来越接近-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if (editingStyle == UITableViewCellEditingStyleDelete) { RSRecord *ar = [self.audios objectAtIndex:indexPath.row]; [self.audios removeObject:ar]; [tableView deleteRowsAtIndexPaths:[NSMutableArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; } }