算法复杂性中的隐藏常数


9

对于许多问题,渐近复杂度最佳的算法具有很大的常数因数,而该常数因O表示法而被隐藏。这发生在矩阵乘法,整数乘法(特别是最近的Harvey和van der Hoeven的O(n log n)整数乘法算法),低深度排序网络和查找图的次要情况中。这种算法有时称为银河算法。

注意,对于其他算法,例如常规排序和整数加法,已知算法具有最佳渐近复杂度和较小的常数因子。

从理论的角度,在将前一种算法与后一种算法分离方面进行了哪些研究?

我知道,隐藏常量经常被省略以隐藏不同计算模型之间的区别。但是,我有信心在各种不同的模型下,例如,对于10亿规模的输入,这些Galactic算法将比渐近差的算法更慢。在某些情况下,这种区分不是很细微的。做得严格吗?

例如,可以发明一种非常简单的计算模型,例如具有非常简单的ISA的von Neumann机器,然后实现这些算法,并用显式常量限制其运行时间。是否已针对多种算法完成了此操作?


1
快速整数乘法算法不是银河系。实际上,它们实际上是常用的。
EmilJeřábek,

2
@EmilJeřábek可能是OP在谈论David Harvey和Joris van der Hoeven的最新突破,“整数乘法 Øñ日志ñ时间”,这是银河系(例如,请参阅立顿博客的此条目:rjlipton.wordpress.com/2019/03/29/…
拉明

1
正如作者自己写的那样(并在Lipton的博客上提到),为简单起见,本文并未尝试优化常量,但很可能可以使它们变得实用。
EmilJeřábek'19

@EmilJeřábek的确是我在说的那篇论文。本文确实描述了可以进行的改进,但是非常令人怀疑的是,在给定log log n很小的情况下,该算法是否会比目前在实践中使用的当前O(n log n log log n)算法有实际的改进。用于实际输入。
isaacg

4
@EmilJeřábek具体来说,只要数量小于,则本文中介绍的算法都会针对基本情况采用一种更简单的算法 2d12 位,他们目前在哪里 d=1729。他们描述的优化可能允许他们使用d=9 相反,但是 2912位仍然超过宇宙中粒子的数量,因此实用性仍然是不可能的。参见其论文的5.4节。
isaacg

Answers:


2

对于某类算法和组合问题,以一种有趣的方式进行处理的地方是解析组合学。所描述的主要方法与您所建议的类似:从算法的一些具体实现开始,确定一些重复的操作(通常是最繁琐的操作),这些操作将用于关联显式可数的复杂度来执行给定输入尺寸N 以数字的形式 CN 所选操作已执行。

尽管该方法当然很有用,但该方法不需要修复任何特定的计算模型。另请注意,您可以尝试计算最坏情况的行为或预期的行为,或者进行其他计算。

该方法中最重要的组成部分是对这些值的生成函数的分析。有时,您可以使用复杂分析中的方法获得非常精确的渐近逼近。

书中讨论的一个简单示例是quicksort。这是二次方最坏情况下的运行时间,但实际上胜过大多数情况O(nlogn算法。在对快速排序的预期成本进行精确分析并将其与mergesort进行比较时,如果我没有记错的话,您会发现它的大小要比后者大10左右。为了能够计算这种事情,您当然不能无视隐藏的常数。

实际上,在quicksort中,您通过对子列表进行递归排序来对列表进行排序,这样,如果对小于10的列表使用mergesort,则会对所有大小都有改善。该书中的一个有趣的注释提到在某些开源Microsoft库中,通用排序算法被实现为快速排序,直到您减小到10个大小为止,然后使用mergesort。在代码注释中,提到性能测试表明该值是最佳的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.