来自here
的代码ub4 additive(char *key, ub4 len, ub4 prime)
{
ub4 hash, i;
for (hash=len, i=0; i<len; ++i)
hash += key[i];
return (hash % prime);
}
他们说这需要5n + 3条指令。他们是如何计算的?我该如何计算?
答案 0 :(得分:3)
进行此计算您需要一些基本原语系统。例如,在计算机编程艺术中,Knuth使用MIX计算机进行这些计算。不同的基础计算机可能具有不同的指令,并且这种计算的结果不同。在您的特定示例中,设置它的常用方法是:
这将总计为5n + 3。
变化可能与以下几行有关:
hash
和i
可能非常耗时。正常的cpu可能不需要做额外的工作,因为声明,认为寄存器/堆栈存储。 hash += hash + key[i]
可能被视为基本系统上的一个操作,依此类推。 编辑:请注意,这些计算主要用作假设硬件的思想实验。除非在极少数情况下,现实生活中的处理器很可能不会像这些计算那样完全表现。
答案 1 :(得分:1)
在循环内部,每次迭代都有5个操作:
i<len
key[i]
hash + key[i]
hash
++i
你的循环运行n
次,因此5n
在循环之外,您有3个操作:
hash=len
i=0
hash % prime
因此,5n + 3
。
答案 2 :(得分:0)
让我们开始计算说明。
加起来,我们得到约2 +(1或2)+(4或5)n,因此3 + 4n <= T(n)<= 4 + 5n。 3 + 5n是合理的;确切的答案取决于您如何计算个别指示。更详细的模型可能将简单的分配计为需要比例如时间更短的时间。模数运算......