我们是基于计算模型进行算法分析还是基于"common sense"进行算法分析?



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

  • 算法导论. 第3版.
  • 算法设计手册. 第2版. S. 斯基耶纳
  • 算法设计。J.Kleinberg & Eva Tardos
  • 算法. 第4版 R. 塞奇威克
  • S. Dasgupta, C. Papadimitriou & Vazirani
  • 其他几本书

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

我的意思是,在算法导论和算法设计手册中,提到了一种叫做RAM计算模型的东西。在这些书中,据说在该模型下我们计算步骤,但在其他书籍中没有提到这样的计算模型。

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

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

我们的常识是基于一个可以隐式或显式的计算模型。 通常在入门课程中,它是隐含的。 明确地,您使用的通常是 RAM 模型。 这是基于顺序处理的思想,其中每个简单的操作都需要恒定的时间。 所以你只是计算步数。

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

当然,现实是完全不同的。 正如 https://gist.github.com/jboner/2841832 所示,操作所需的时间大不相同。 我个人看到通过切换到使用排序而不是哈希查找,作业从 5 天增加到 1 小时。 是的,哈希查找是O(1),但是当数据由磁盘备份时,有一个可怕的常量。 分布式计算使事物并行运行。 在 GPU 上计算为您提供了大量的并行性。只要所有计算都完美同步运行。 我们正试图建造量子计算机,理论上它可以给我们带来很多很多数量级的并行性。以失去像"如果"这样的不可逆转的操作为代价。

我们可以创建处理所有这些复杂性的模型。 但是,在您了解基础知识之前,无需考虑其中任何内容。 这是RAM模型中的标准"计数操作"内容。

最新更新