在分析计算机算法时理解关于机器字大小的假设

Gee*_*eek 11 algorithm integer

我正在阅读Thomas H. Cormen,Charles E. Leiserson,Ronald L. Rivest,Clifford Stein的"算法导论 "一书.在"分析算法"的第二章中,提到:

我们还假设对每个数据字的大小进行限制.例如,当使用大小为n的输入时,我们通常假设整数由c lg n位表示,对于某些常数c> = 1.我们要求c> = 1,这样每个单词都可以保存n的值,使我们能够索引各个输入元素,并且我们将c限制为常量,这样单词大小就不会随意增长.(如果单词大小可以任意增长,我们可以在一个单词中存储大量数据,并在恒定时间内对其进行操作 - 显然是不切实际的情况.)

我的问题是为什么这个假设每个整数应该由c lg n位表示,以及c> = 1的情况如何允许我们索引各个输入元素?

and*_*oke 6

首先,lg它们显然意味着日志基数2,所以lg n是位数n.

那么他们所说的是,如果他们有一个算法来获取一个数字列表(我在我的例子中更具体,以帮助使其更容易理解),1,2,3,...n那么他们认为:

  • 记忆中的"单词"足以容纳任何这些数字.

  • 内存中的"单词"不足以容纳所有数字(在一个单词中,以某种方式打包).

  • 当计算算法中"步数"的数量时,对一个"单词"的操作需要一步.

他们这样做的原因是为了保持分析的真实性(你只能在"原生"类型中存储一些大小的数字;之后你需要切换到任意精度库)而不选择特定的例子(如32位整数)在某些情况下可能不合适或过时.