【发布时间】:2014-09-28 05:06:14
【问题描述】:
我有一个 GB 大小的虚拟数组,它是 m x 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
有什么想法吗?
【问题讨论】:
-
澄清'较高的值在右侧和顶部"。A[10,0] 是否比 A[0, 1] 或多或少。值是否向右上升,然后向上,或从 A[0,0] 向外上升
-
换句话说,是一行明显小于下一行,还是单独排序的行但如果将它们连接起来就不一定要排序?
-
正确,连接不起作用。请参阅编辑。