以下算法检查数字是否为素数:
Given a number n,loop over all numbers smaller than n and check whether they divide n.
If one of them divides n, answer no. Otherwise, answer yes.
现在,在以下两种情况下,我必须分析算法执行的除法运算的数量作为其输入长度的函数:
1)数字以一元编码(即4为1111)。如何显示分割数是多项式的?
2)数字以二进制编码(即4为100)。如何显示分割数是指数?
答案 0 :(得分:1)
假设我们将n
1
串在一起(标注为1^n
)。 n
显然是我们输入的长度。我们将所有整数从11
,111
,...,1^(n-1)
分成1^n
。作为1^n
的函数,您将分成多少个数字n
?这是多项式吗?
请注意,log_2(x)
(x
的日志基数2)位代表x
,大约用二进制表示。另请注意,我们将执行x-2
分部(2
,3
,4
,5
,...,x-1
将被分割进入x
)。因此,对于log_2(x)
位,我们使用x-2
个分区。相反,假设我们让n
成为我们输入的大小。所以我们有n = log_2(x)
。那么,就n
的函数而言,我们会采取多少分歧?
答案 1 :(得分:0)
提示:
将问题大小n
定义为数字的(二进制|一元)表示中的位数。
现在考虑一下您可以用n
数字编码多少个不同的数字。