假设您得到一个数字(使用二进制编码中的位)。
您能在(找到(或确定不存在)n,k \的速度有多快
?
例如,给定输入,可以输出。
针对该问题的幼稚算法将遍历n的所有可能值,并搜索满足该属性的k值。
一个简单的观察结果是,无需检查小于\ log m或大于O(\ sqrt m)的n值。但是(即使我们只能检查每个n值O(1)个可能的k值),这最终导致效率低下的算法,该算法的输入大小成指数增长。
一种替代方法是遍历k的可能值(足以检查),并为每次检查确定可能的值。然后,我们可以使用:
因此,对于一个给定的我们只需要检查在范围内的值,使用二进制搜索(当固定时,在单调递增),这给出了在。
这对我来说似乎仍然效率低下,我想这可以在线性时间(输入大小)中解决。
4
你都尝试了些什么?提示:假设也给出了。那你能解决这个吗?的可能值范围是多少?或者,假设为给定值;在那种情况下你能解决吗?的可能值的范围是多少?Ñ ķ ķ
—
DW