在将经典计算与量子计算进行比较时,“忽略常数”的常用计算机科学用法是否有用?


14

丹尼尔·桑克(Daniel Sank)在评论中提到,对我的观点是,在接纳多项式时间算法的问题上,恒定加速是微不足道的,108

复杂性理论过于痴迷于无限的缩放比例限制。在现实生活中,重要的是您以多快的速度得到问题的答案。

在计算机科学中,通常会忽略算法中的常量,并且总的来说,这种方法效果很好。(我是说,好的,实用算法。我希望你能给予我(理论)算法的研究产生了相当大的手在这!)

但是,我确实知道情况与现在略有不同:

  1. 不是比较同一台计算机上运行的两种算法,而是比较两台非常不同的计算机上的两种(略有不同)算法。
  2. 现在,我们正在使用量子计算机,对于这些计算机,传统的性能测量可能不足。

特别地,算法分析的方法仅仅是方法。我认为全新的计算方法要求对我们当前的性能评估方法进行严格的审查!

所以,我的问题是:

将量子计算机上的算法性能与经典计算机上的算法性能进行比较时,“忽略”常数的做法是否是一种好习惯?


在经典计算中,忽略常数甚至不总是一个好主意。这是一个量子计算问题,而不是关于如何思考算法资源缩放的问题?换句话说,在谈论运行计算所需的时间或其他资源时,计算是量子计算还是经典计算似乎与您是否关心亿倍提速的问题无关。
DanielSank

1
@DanielSank正如我所提到的,对于经典计算,忽略算法分析中的常量非常有效。它也是算法研究人员的实际标准。我对听到所有显然不同意的算法研究人员很感兴趣。我问这个问题的主要原因是,对于几乎所有算法研究人员而言,“忽略常量”更多是一条规则。正如我确定的那样,该站​​点将吸引有用的人员,因此在比较量子与经典时是否应该调整这种思维可能会很有趣。
离散蜥蜴

3
关于这个问题的有趣聊天在这里
DanielSank

Answers:


9

计算机科学中“忽略常量”的常用用法仅在通过一点点按摩就可以忽略各种硬件体系结构或软件的性能差异的情况下才有用。但是,即使是在经典计算中,如果要解决难题或大问题,也必须了解架构的影响(缓存行为,硬盘使用情况)。

从实现的角度来看,忽略常量的做法并非出于动机(在不断得到肯定的意义上)。它主要是受到对算法研究方法的兴趣的驱使,该方法在组合下表现良好,并以类似于纯数学的方式接受简单的特征描述。图灵机的加速定理意味着,任何明智的定义都不能试图精确地解决问题的复杂性,从而无法得出明智的理论。此外,在寻找解决难题的好的算法的过程中,常数因素并不是数学上有趣的部分。

这种更抽象的算法研究方法曾经并且在很大程度上取得了成果。但是现在我们面临着两种计算模型

  • 一个处于技术成熟度(经典计算)的高级状态;和
  • 一个处于非常不成熟的状态,但是正在尝试实现一种理论模型,该模型可能导致显着的渐近改进(量子计算)。

在这种情况下,我们可以问一下在考虑或不仔细考虑常量因素的情况下考虑渐近收益是否有意义。由于执行可伸缩量子计算可能需要付出额外的努力,因此,一旦考虑了实现量子算法的所有开销,不仅标量因子而且理论性能的多项式 “加速”都可能被淘汰。

在早期,对于量子架构的不同方法,其性能可能也存在显着差异。这可能会使体系结构的选择对算法的性能比渐近分析重要(如果不是更重要的话),就像您在von Neumann机器还是高度分布式的网络上进行常规计算对您来说都非常重要具有很大的延迟。

在实际计算中实际上重要的是-而且一直-不只是算法,但算法的实现:一种算法以某种方式实现,在一定的架构。渐进分析的常见做法忽略了常量因素,这使我们能够注意算法性能差异的系统,数学原因,并且实际上是出于那些架构差异不太大而无法支配实际性能的场合。

关于量子技术,我们还没有处在任何实际情况下都能安全地掩盖恒定因素的那种幸福的境地。但是也许有一天我们将能够做到。这是量子信息技术的漫长游戏-到目前为止,就量子信息技术而言,几乎是学术计算机科学家曾经玩过的唯一游戏。展望量子技术找到立足之地的那一天,对我们来说,继续进行渐近分析将是一件好事,这是对量子算法性能的研究之一。


所以,最后,你似乎是赞成“不扔掉的常量”,现在,虽然我们仍然在舞台的实施是至关重要的。有趣。我喜欢您的推理方式,但略有不同意。我很快将对此做出自己的回答。
离散蜥蜴

1
@Discretelizard:我赞成不要在常量产生实际差异的情况下丢弃常量。显然,诸如1e8之类的常数在经典计算中也很重要。但是我们可能会忽略此类常量,以便尝试查找其他细节,这也可能非常有趣。但是,在当今的量子技术和经典技术之间进行比较时,1e8的重要性远大于经典计算中的重要性。
Niel de Beaudrap,

5

ØF[ñ]ñ

1010

300


2

将量子计算与经典计算进行比较时,您不能忽略常数因素。他们太大了。

例如,这是我去年展示的一些幻灯片的图像:

量子与门

底部的东西是魔术状态工厂。它们占地150K物理量子位。由于“与”门使用150K量子位持续0.6毫秒,因此我们推测量子“与”门的时空量约为90量子位秒。

我的同事的目标之一是在执行纠错时每100量子位使用1 cpu。因此,我们可以说90 qubit秒需要0.9 cpu的工作时间。自上图制作以来,我们使量子构造的效率提高了数倍,因此我们将其称为0.1 cpu秒。

(这些估计有很多假设。什么样的体系结构,错误率等。我只是想传达一个数量级的想法。)

它需要63个AND门来执行64位加法。63 * 0.1 cpu秒〜= 6 cpu秒 从根本上讲,添加64位的成本要比CPU秒高。传统上,添加64位的成本不到CPU纳秒。这里的常数因子差很容易达到100亿。如果将其与并行经典计算机(例如GPU)进行比较,则数字会变得更糟。您不能忽略这么多位数的常数。

例如,考虑Grover算法,该算法允许我们在函数的sqrt(N)评估中搜索函数的满意输入,而不是N评估。加上100亿的常数,并求解量子计算机开始需要较少评估的位置:

ñ>1010ññ>1020

Grover的算法无法并行化评估,并且评估至少需要一个AND门,因此,基本上,您只有在进行数千万年的搜索时才开始看到CPU时间的收益。

除非我们使常数因子好得多,否则没人会使用Grover搜索来寻找有用的东西。目前,量子VS经典的情况是指数优势或萧条。


1

虽然其他答案也很不错,但我仍然有些不同意。因此,我将在这一点上分享自己的想法。

简而言之,我认为以不变的原样呈现特征充其量是一个浪费的机会。也许这是我们目前能够获得的最好成绩,但远非理想。

但是首先,我认为简短的旅行是必要的。

什么时候有有效的算法?

106

  1. P
  2. P2P
  3. P2

P2PPP2

因此,我们的垃圾算法似乎巧合地出现了“奇迹般的”加速并非没有道理。现在,当然有许多可以减轻风险的实验设计技术,但是也许更聪明的“快速”算法在许多情况下仍然失败,但是没有足够的例子可以欺骗我们!(还要注意,我假设没有研究人员是恶意的,这会使情况更糟!)

因此,我现在将回答:“有更好的性能指标时叫醒我”。

那我们该怎么做呢?

如果我们有能力在所有情况下测试我们的“黑匣子”算法,那么我们就不会被上述方法所迷惑。但是,对于实际情况这是不可能的。(这可以在理论模型中完成!)

相反,我们可以做的是为某个参数化的运行时间(通常针对输入大小)创建统计假设,以对此进行检验,也许改编我们的假设并再次进行测试,直到获得我们喜欢的假设并且拒绝零值似乎是合理的为止。(请注意,我可能忽略了其他一些因素。我实际上是数学家。实验设计不是我的专长)

Øñ3

那么,如何处理常量呢?

109

我认为将好奇常数视为异常是最有用的,也就是说,它本身就值得进一步研究。我认为,基于比“我们的算法需要X倍的时间”简单得多的通用模型创建假设是一个很好的工具。因此,尽管我认为我们不能在这里简单地接管CS约定,但是完全不理会常量的“鄙视”也是一个坏主意。

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.