我们是基于计算模型进行算法分析还是基于“常识”进行算法分析?

时间:2018-06-11 22:30:57

标签: algorithm complexity-theory analysis

最近,我正在阅读这些关于算法的书籍,特别是关于算法分析的部分:

  • 算法简介。第3版。 TCRC
  • 算法设计手册。第2版​​。 S. Skiena
  • 算法设计。 J.Kleinberg& Eva Tardos
  • 算法。第4版。 R. Sedgewick
  • 算法。 S. Dasgupta,C。Papadimitriou&瓦齐拉尼
  • 其他几本书

之后,我有点困惑,因为我不完全理解计算算法步骤的起源。

我的意思是,在“算法和算法设计手册”中,提到了一种称为RAM计算模型的东西。在这些书中,据说在该模型下我们计算步数,但在其他书中,没有提到这样的计算模型。

其他书籍谈论计算算法行进路径的步骤,即以常识或逻辑方式。所以,如果你们能帮我解决这些问题,我将不胜感激:

步数法(其他书籍)与使用计算模型(TCRC& S. Skiena)之间的关系(或差异)是什么? 当有人谈到计算分析算法的步骤时,我可以假设他指的是使用计算模型(RAM)吗?

1 个答案:

答案 0 :(得分:4)

我们的常识是基于可以是隐式或显式的计算模型。通常在介绍性课程中,它是隐含的。显然你使用的通常是RAM模型。这是基于顺序处理的想法,其中每个简单操作需要恒定的时间。所以你只需要步数。

您可以在http://people.seas.harvard.edu/~cs125/fall14/lec6.pdf找到该模型的正式说明。

当然,现实是相当不同的。正如https://gist.github.com/jboner/2841832所示,操作会花费大量不同的时间。通过切换到使用排序而不是哈希查找,我个人看到工作从5天到1小时。是的,哈希查找是O(1),但是当数据由磁盘支持时,哈希查找是一个可怕的常量。分布式计算具有并行运行的功能。只要所有计算都以完美的锁步方式运行,在GPU上进行计算将为您提供大量的并行性。我们正在努力构建量子计算机,理论上它可以给予我们许多,更多数量级的更多并行性......但是会失去像“if”这样不可逆转的操作。

我们可以创建处理所有这些复杂性的模型。但在了解基础知识之前,没有必要考虑任何问题。这是RAM模型中标准的“计数操作”。