【问题标题】:how to efficiently search a structured numeric array如何有效地搜索结构化数值数组
【发布时间】: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] 向外上升
  • 换句话说,是一行明显小于下一行,还是单独排序的行但如果将它们连接起来就不一定要排序?
  • 正确,连接不起作用。请参阅编辑。

标签: arrays search


【解决方案1】:

如果目标数仅是两个数(质数)的乘积,则这等效于因式分解{在发布时并不清楚}。 众所周知,因式分解是 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/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 2015-03-26
    相关资源
    最近更新 更多