我有一个GB大小的虚拟数组,其中m为n,其中较高的值位于右侧和顶部。虚拟意味着返回值是从给定坐标的另一个程序提供的,但程序员不知道给定运行的函数。保证给定的数字在数组中。
{现在证明这个数字是两个素数的乘积,因此NP很难}
我看了Efficient search of sorted numerical values 但它没有我需要反映的多行结构。我试过一个"螺旋"方法,但有时需要很长时间才能遍历。 (查看超过一半的可能插槽)通常行具有规则间隙,但每行会有不同。列往往具有(不同的)算术级数。 行已排序。一行中最左边的值小于下一个较高行中最左边的值。一行中最右边的值小于下一个较高行中最右边的值。见下面的示例数据。 我试过的是首先消除不能保持目标值的行,然后选择"中间"那些剩余的价值行。在该行上进行二进制搜索,然后根据下一行是否(猜测)在范围内具有更多值来上升或下降。目标值可能随机放置在可用的可用插槽中。 这是一些示例数据
1008 1064 1120 1176 1232
999 1053 1107 1161 1215
988 1040 1092 1144 1196
975 1025 1075 1125 1175
960 1008 1056 1104 1152
有什么想法吗?
答案 0 :(得分:0)
如果目标数字只是两个数字(素数)的乘积,则相当于因子分解,结果证明是{在发布时不清楚}的情况。 已知因子分解是NP难的。 分解和决策理论的一个有趣的侧面就在这里 https://cstheory.stackexchange.com/questions/25466/factoring-as-a-decision-problem 和这里 http://rjlipton.wordpress.com/2011/01/23/is-factoring-really-in-bqp-really/