我正在读这本书"算法导论"我对此部分感到困惑:
我们还假设每个数据字的大小有限制。例如,当使用大小为n的>输入时,我们通常假设整数由c lg n位表示,对于某些>常数c> = 1。我们要求c> = 1,这样每个单词都可以保存n的值,使我们能够>索引单个输入元素,并且我们将c限制为常量,这样单词> size就不会随意增长
这个常数c的目的是什么?
答案 0 :(得分:3)
常数c的原因是您在大型字机上使用小输入的情况。例如,如果您正在使用64位计算机但只处理大小的输入,例如2 12 ,则lg n的值将为12,但计算机是64位计算机。假设字大小恰好是12位,这是不正确的。 c的附加因素允许我们假设机器字大小至少为lg n,但可能更大,而不会弄乱分析。
希望这有帮助!
答案 1 :(得分:0)
考虑关注
import firebaseui from './npm__{LANGUAGE_CODE}';
上述数字的二进制值为2 ^ 12,因此至少需要12位存储。现在考虑您正在使用的计算机在32位体系结构上运行。 现在问你一个问题 == lg n ==在这里用于计算存储输入大小所需的位数。这里不需要的位是12,如图所示
long long int num = 4096;
但是现在我们知道总空间为32位,因此如果我们愿意,我们可以占用更多的空间,但可以少于12位吗? 绝对不会,无论如何我们至少需要12位,这就是为什么我们需要一个常数c这样的原因
c> = 1
这是为了确保我们获得的实例不少于12位,让我们考虑一下
c = 0.5
然后在这种情况下,分配的总位将为
lg n = lg 2^12 = 12 bits
,它小于要求的值,因此即使c = 2(大于1)也不会造成问题,并且分配了总共24位(足够多的12位但小于32位),因此c应该大于1最大字数的位数 因此,c至少用于获取存储单词的最小大小,而实际上在实际情况下,它始终是最小的。