Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 给定数学链接的2D数组(NxM),是否可以创建log(N)log(M)搜索算法_Algorithm_Search - Fatal编程技术网

Algorithm 给定数学链接的2D数组(NxM),是否可以创建log(N)log(M)搜索算法

Algorithm 给定数学链接的2D数组(NxM),是否可以创建log(N)log(M)搜索算法,algorithm,search,Algorithm,Search,我已经生成了这个2D数组(NxM),其中所有的列、行和对角线都可以由一个等式生成。我只是想知道我是否可以创建一个搜索算法,它在log(N)log(M)中运行 这个2D数组也是无限的,只显示前10行/10列 在这种情况下,使用的方程是z=2*d*x-2*x*y-y^2,d=22,顶轴是x,侧轴是y。所以(1,1)=41,(2,2)=76。目标是找到z,重复的值应该集中在最小的x上,尽管唯一的值总是搜索的焦点 请注意,所有行、列和对角线将生成唯一的方程式,将行、列或对角线带到无穷远 它看起来像是沿着

我已经生成了这个2D数组(NxM),其中所有的列、行和对角线都可以由一个等式生成。我只是想知道我是否可以创建一个搜索算法,它在log(N)log(M)中运行

这个2D数组也是无限的,只显示前10行/10列

在这种情况下,使用的方程是z=2*d*x-2*x*y-y^2,d=22,顶轴是x,侧轴是y。所以(1,1)=41,(2,2)=76。目标是找到z,重复的值应该集中在最小的x上,尽管唯一的值总是搜索的焦点

请注意,所有行、列和对角线将生成唯一的方程式,将行、列或对角线带到无穷远


它看起来像是沿着列增加,沿着行减少。如果是这样的话,答案将是沿着一条没有其他明显结构的对角线之字形路径


除非方程有更多的结构,否则我认为你最好还是找到那条路径。这个算法是O(n+m)也许我遗漏了什么,但是如果

z = 2*d*x - 2*x*y - y^2, d=22 
然后给定搜索目标z'你就可以解决

z' = 2dx - 2xy - y^2
z' + y^2 = 2x(d - y)
x = (1/2) (z' + y^2) / (d - y)
附加的约束条件是x,y是大于零的整数。这立即告诉您y将是从1到d-1的整数(假设d是整数),并且y必须具有与z相同的奇偶校验(要么都是偶数,要么都是奇数)


事实上,如果你可以根据上述标准选择y=d-1,那么x=(1/2)(z'+d^2-2d+1)就是一个解决方案;在你的例子中,考虑d=22和z′=103。然后y=21,x=272,解算出来(插入原始方程)。如果由于奇偶性问题而不能选择d-1,那么解决方案似乎就不那么简单了。我想这是有道理的,因为应该存在没有整数解的问题,例如,d=1和z'=1,d=2和z'=2,等等。可能有更多的快捷方式。

那么,为什么不能使用方程来定位元素?它使用坐标,计算值,表中的(0,0)坐标在哪里?在左下角还是左上角?另外,正如前面所说的,你可以试着解你的方程(如果它足够简单的话),找到给你所需要的值的坐标。你能分享一下你的方程式吗?你的例子中有重复的。我看到-4两次。20在里面有3次。你在寻找什么标准?它应该如何处理重复项?要搜索的值永远不会是重复项,即43。这是一个特定的案例,在一个范围内应该是独一无二的。你刚刚解决了这个案例,这是我试图避免的最糟糕的案例。回到43个例子。我想找到的答案是x=2,y=5。x=21和y=242是另一个答案,但不是我想要找到的情况。