证明没有一种算法能够在少于N次比较中解决任务

时间:2014-03-11 18:13:30

标签: algorithm

我们得到数组A [1..n] [1..n]和值X. 如果符合以下条件,我们将调用一个数组:
对于每个k,l A [k] [l]&gt; = A [i] [j],其中i <= k,j <= l。 我们也得到了一个事实,A正在增加。

任务是证明,没有一种算法能够在少于N次比较中确定X是否是A的元素。

我发现自己完全陷入了那个问题,所以我将不胜感激。

2 个答案:

答案 0 :(得分:2)

我证明至少对于一个矩阵,你有最坏的n次比较情况,为此我创建了一个特定的矩阵A.

考虑从A [1] [n]到A [n] [1]的对角线,这包括所有值

A[i][j] for i+j=n+1

将该对角线左侧的所有元素设置为0:

A[i][j]=0 for i+j<n+1

和所有剩余的元素,包括对角线本身,到2:

A[i][j]=2 for i+j>=n+1

您可以根据所需条件轻松检查这是一个有效的矩阵。现在,您可以将对角线上的任何值设置为1:

A[z][n+1-z] = 1

结果如下:

0 0 0 2
0 0 2 2
0 1 2 2
2 2 2 2

这仍然是一个有效的矩阵。现在搜索X = 1。为了检查对角线上的任何值是否为1,您必须查看每个值,因为它们是独立的。对角线上有n个值,你必须检查每个值才能找到1,所以你需要进行n次比较。

答案 1 :(得分:0)

@pentadecagon的一个变体:你可以自由地在对角线上设置N个任意值,在某个范围内包含X的min..max,并且填充阵列的其余部分,一边低于min,高于max。另一个。

两侧的值无法提供有关X位置的信息,N值不会互相提供任何信息。所以你需要搜索N个未排序的元素。