Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.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 n位矩阵的算法_Algorithm_Matrix_Data Structures_Divide And Conquer - Fatal编程技术网

Algorithm n位矩阵的算法

Algorithm n位矩阵的算法,algorithm,matrix,data-structures,divide-and-conquer,Algorithm,Matrix,Data Structures,Divide And Conquer,给出了两个函数P1、P2,它们取输入n位x,并计算y1=A1*x,y2=A2*x。A1和A2是n*n位矩阵。这两个函数返回n位数组y1、y2。我们不知道关于这些矩阵的任何信息,但知道A1和A2是相同的,除了一个槽i,j。我和j对我们来说是未知的。我们可以为不同的x值调用P1和P2,然后比较这两个函数的输出。我想知道有多少电话能找到I,j 简而言之,我们的书写道:记录n次呼叫。有什么提示或想法吗?谢谢大家 编辑:有人说,首先x是1的列矩阵。然后计算y1和y2,找出不同的行。那么x是一个矩阵,其中n

给出了两个函数P1、P2,它们取输入n位x,并计算y1=A1*x,y2=A2*x。A1和A2是n*n位矩阵。这两个函数返回n位数组y1、y2。我们不知道关于这些矩阵的任何信息,但知道A1和A2是相同的,除了一个槽i,j。我和j对我们来说是未知的。我们可以为不同的x值调用P1和P2,然后比较这两个函数的输出。我想知道有多少电话能找到I,j

简而言之,我们的书写道:记录n次呼叫。有什么提示或想法吗?谢谢大家


编辑:有人说,首先x是1的列矩阵。然后计算y1和y2,找出不同的行。那么x是一个矩阵,其中n/2个上元素为1,n/2个下元素为0。如果y1和y2相等,则差值为n/2+1到n,否则为1到n/2

如果可以转置A1和A2,可以在两次调用中完成:

您可以通过一次调用来确定i,主要检查y1和y2中的哪个条目不同。那会给你我的

转置A1和A2,做同样的事情,不同的条目是j的索引

没有转置:你仍然做一次乘法来确定i。现在,只需进行一次二进制搜索,搜索区域将由x向量项中的1标识

第一步:用1填充x向量的一半,用0填充另一半,进行乘法,检查索引i处的条目是否不同,如果不不同,那么j在下半部分的某个位置,如果不同,那么它在上半部分,就是你感觉到的1

第二步:将上一步中的一个选定零件一分为二,一半为1,另一半为0,重复相同的逻辑,直到只剩下一个条目。那是你的j的索引

由于您总是在2中拆分,因此您将有确切的logn调用


位的运算+和*是如何定义的?我认为这并不重要。当然,如果它们总是返回0,而与输入无关,那么你就无法了解有关矩阵的任何信息。亲爱的@Henry,我编辑了我的问题,但在书中,没有细节。@Henry我认为矩阵和向量必须在Z/2Z以上。请描述一个伪代码好吗?这对我来说很难理解?多谢。
Determine `i` entry by doing one call. (trivial)
length = n/2
start = 0
while(not found)
    var x[start..start+length) = 1 (0 all otter entries)
    do function calls
    if result1[i] == result2[i]
        start = 0
        length = length/2
    else
        start = length+1
        length = length/2
    if length == 1
        found.
        start is your index j