如何高效地搜索一个结构化的数值数组

3
我有一个虚拟的大小为GB的数组,它是m×n的,高值在右侧和向上。虚拟意味着从给定坐标提供返回值,但在给定运行中,程序员不知道函数。保证给定数字在数组中。
{现在结果表明这个数字是两个质数的乘积,因此是NP难问题}
我看了一下已排序数字值的高效搜索,但它没有我需要反映的多行结构。我尝试了“螺旋”方法,但有时遍历需要很长时间(查看超过可能槽的一半)。通常,行之间有规则的间隔,但每行的间隔都不同。列倾向于具有(不同的)算术进度。这些行是已排序的。一行中最左边的值小于下一行中最左边的值,一行中最右边的值小于下一行中最右边的值。请参见以下示例数据。我的尝试是首先消除不能容纳目标值的行,然后选择剩余行中的“中间”值行。在该行上进行二进制搜索,然后根据下一行是否可能(猜测)具有更多的范围内的值而上下移动。目标值可能随机放置在可用的插槽中。以下是一些示例数据。

请问有什么想法吗?

988 1040 1092 1144 1196

975 1025 1075 1125 1175

960 1008 1056 1104 1152


1
请澄清“较高的值在右侧和向上方”的含义。A[10,0]比A[0,1]大还是小?数值是向右上方升高,还是从A[0,0]向外升高? - James Curran
换句话说,一行是否明显比下一行小,或者每行都是单独排序的,但如果将它们连接起来,则不一定会排序? - La-comadreja
正确的,连接不起作用。请看编辑的版本。 - ocopa
1个回答

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接