[难题征解] 反求线性相关数组

gxqcn 2004-06-29 01:29:30
为了引出该问题,特自定义一个概念以方便阐述(可能叙述得不够严谨,或与现有的术语相冲突,欢迎指正):

【线性相关数组】已知一个二维数组 C={c[i][j]}mxn,如果存在两个一维数组 A={a[i]}m、B={b[j]}n,使得 c[i][j]=a[i]+b[j] (0≤i≤m-1,0≤j≤n-1)均成立,则称 C 与 A、B 线性相关,记作“C = A⊙B”。

问题如下:已知二维数组 C 的某个排列 C'(即其 mxn 个元素被随机打乱了),请反求出对应的 A、B,使得 C = A⊙B。

输出要求:
1、A、B均按升序排列(A⊙B 可能得到的仍是 C 的某个排列,但已不影响结果的价值了);
2、如果 m==n,则附加要求 A≤B(按字典排列)。

可简化条件:
1、已确知确实存在 A、B,使 C = A⊙B 成立;
2、规定 C (或 C')所有元素为非负整数,且两两不等,最小元素为 0。

讨论:
1、如果有人可迅速判定“是否存在 A、B,使得 C = A⊙B 成立”的快速算法,欢迎提供;
2、如果满足上述“简化条件”2,则对应的 A、B 也具有相应的性质(所有元素为非负整数,且两两不等,最小元素为 0),欢迎讨论;
3、如果满足上述“简化条件”,在依“输出要求”的前提下,A、B 是否具有唯一性,也欢迎讨论。

备注:不要求给出代码,但须将算法思路阐明。
...全文
607 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzwu 2004-09-15
  • 打赏
  • 举报
回复

如果不考虑效率,问题是不难找到解决方案的.

建议重开一个,让大家再仔细想下去.

gxqcn 2004-09-13
  • 打赏
  • 举报
回复
依 CSDN 的公告,这个帖子将于近日结贴。

多么希望在结贴前能有高手前来“揭贴”啊。。。
zzwu 2004-08-06
  • 打赏
  • 举报
回复
例如,将:

A\B┃ 0 3 7
━━╋━━━━━━━
0 ┃ 0 3 7
1 ┃ 1 4 8
2 ┃ 2 5 9

改为:

A\B┃ 0 . . 3 . . . 7
━━╋━━━━━━━━━━
0 ┃ 0 . . 3 . . . 7
1 ┃ 1 . . 4 . . . 8
2 ┃ 2 . . 5 . . . 9

则将表中的值看成二元函数z=f(x,y)在对应位置(x,y)的函数值,则所有点{(x,y,f(x,y))}在同一平面.
zzwu 2004-08-06
  • 打赏
  • 举报
回复
例如,将:

A\B┃ 0 3 8
━━╋━━━━━━━
0 ┃ 0 3 8
1 ┃ 1 4 9
2 ┃ 2 5 10

改为:

A\B┃ 0 . . 3 . . . 7
━━╋━━━━━━━━━━
0 ┃ 0 . . 3 . . . 7
1 ┃ 1 . . 4 . . . 8
2 ┃ 2 . . 5 . . . 9

则将表中的值看成二元函数z=f(x,y)在对应位置(x,y)的函数值,则所有点{(x,y,f(x,y))}在同一平面.
zzwu 2004-08-05
  • 打赏
  • 举报
回复
这个题目很有意思!

从几何学的观点看,就是把正整数N放在平面格点(X,Y)上,使X+Y=N,且把N看作Z坐标后,则所有的空间点{(X,Y,N)}都位于空间的一个平面上.
gxqcn 2004-08-02
  • 打赏
  • 举报
回复
非常感谢您!
47 份发送起来需要足够的耐心,我非常感激!
刚才我到邮箱收了一下,比较可惜的是附件全是乱码,遗憾之至!
所以,请您用 WinRAR 进行压缩分割,直接发送到我所在公司的邮箱里,
具体 eMail 地址我将给您发短消息告诉您。
如果未查看到短消息,请及时给我留言,谢谢!
loisdcs 2004-08-01
  • 打赏
  • 举报
回复
文件比较大,分成了47封。
gxqcn 2004-07-30
  • 打赏
  • 举报
回复
mailto:gxqcn@163.com
3QU!
loisdcs 2004-07-30
  • 打赏
  • 举报
回复
如果你找不到,如何给你?
我时间紧张,还是没有看完这篇文章
loisdcs 2004-07-30
  • 打赏
  • 举报
回复
http://springer.lib.tsinghua.edu.cn/app/home/journal.asp?wasp=nntrylrumg0j46lx8ue3&referrer=parent&backto=subject,59,82;
或者
http://134.76.163.65/agora_docs/129237TABLE_OF_CONTENTS.html
找第261卷。。。。。
gxqcn 2004-07-22
  • 打赏
  • 举报
回复
to loisdcs(安全密码):
你说的那篇文章在哪里可以下载到,可以给我寄一份吗?谢谢!
pcs_starfish 2004-07-11
  • 打赏
  • 举报
回复
A,B求C是唯一的,但是C求A,B不一定有解呀。
loisdcs 2004-07-09
  • 打赏
  • 举报
回复
是我胡涂了。如果A=B那么是容易的。楼主很聪明啊:24=8/(3-8/3)。
另一个方法是把它们变为单变量多项式各分量的指数,比如C0={0,1,2,3,4,5,8,9,10,12,15,17,18,19,20,29},变为C(x)=1+x^1+x^2+x^3+...+x^{29}。然后在Z[x]中分解C(x),一般想起来不应是多项式算法,但有篇文章(Factoring Polynomials with Ration Coefficients, Math. Ann. 261, 515-534。即LLL算法)提到一个方法,时间复杂度为O(n^{12}+n^9(log|f|)^3)。当然实际运行起来多少有点不同的。我正在琢磨这篇文章。想来,楼主提出的问题应该有多项式算法。
gxqcn 2004-07-07
  • 打赏
  • 举报
回复
“A[i] + B[j]=A[j] + B[i]”,谁说的?

建议先用楼上那个简单的例子(写于 2004-06-30 09:39:00)印证一下吧。。。
loisdcs 2004-07-07
  • 打赏
  • 举报
回复
如果C各元素两两不等,那么问题是无解的。因为A[i] + B[j]=A[j] + B[i],C中至少两个元素是等的。
实际上,楼主快胡涂了。
如果C中元素顺序被打乱了,但保持行和列,问题是容易的。
如果不保持行和列,那么考虑C中的最大最小元可以顺序确定A,B.
gxqcn 2004-07-02
  • 打赏
  • 举报
回复
to kerbcurb():
可令:a[0]=b[0]=0.
现在的问题是:矩阵 C 的元素顺序被打乱了,而且很难预测恢复回去。所以上述推理虽然合理,但并不有效,因为问题的关键点和难点还没触及。

请大家关注我于 2004-06-29 21:24:00 写的修订提法,规定了 A、B、C 均为非负整数数组,且 C 各元素两两不等,最小元素为 0.
kerbcurb 2004-07-02
  • 打赏
  • 举报
回复
这样问题要复杂
看来你的意思是这样:
已知有m * n个整数的一维数组C,并且:元素均为非负整数,且两两不等,最小元素为零。要求构造出两个一维数组A[m]和B[n],使得A[i] + B[j](i=0,1,...m - 1,j=0,1,...,n - 1)可以在C中找到,并且要求A、B的元素分别两两不等,非负。
好像是NP问题,我对NP不了解,爱莫能助。
kerbcurb 2004-07-01
  • 打赏
  • 举报
回复
没有说清楚,sorry

我的意思是这样:
c[0][1] - c[0][0] = b[1] - b[0],c[0][2] - c[0][1] = b[2] - b[1],...,
c[0][m - 1] - c[0][m - 2] = b[m - 1] - b[m - 2];

c[1][1] - c[1][0] = b[1] - b[0],c[1][2] - c[1][1] = b[2] - b[1],...,
c[1][m - 1] - c[1][m - 2] = b[m - 1] - b[m - 2];
......
c[n - 1][1] - c[n - 1][0] = b[1] - b[0],c[n - 1][2] - c[n - 1][1] = b[2] - b[1],...,
c[n - 1][m - 1] - c[n - 1][m - 2] = b[m - 1] - b[m - 2];

对于a[i]也有类似的关系,如果你能构造出a[0],b[0],问题很容易解决



levinjoe 2004-06-30
  • 打赏
  • 举报
回复
算法其实很简单的:
由于C可乘以任何算子变化,不妨考虑将A B均不降排序;
对应的C'满足如下情况
C’【0】【0】最小,C’【0】【1】与c'【1】【0】有一个为次小。
考虑以上两种情况,由于具有对称性,不妨考虑一种,C'【0】【1】次小,
则由等差数列的性质,可得到B+A[0],检查是否均在C‘中。
去掉以上元素,则C'[1][0]为以下元素中最小的。
从而可以确定A+B【0】,这样便完全生成C’的一种新排列,检测是否是就可以判断能否分解。
并且有C’[0][0]+1种分解方法。
如果两种考虑都行,就有2*(C’【0】【0】+1)种!
gxqcn 2004-06-30
  • 打赏
  • 举报
回复
为了更好的理解本问题,我再举一个简单点的例子:

大家都知道“乘法表”,其实还有更简单的“加法表”:),如下:

A\B┃ 0 3 8 17
━━╋━━━━━━━━━━
0 ┃ 0 3 8 17
1 ┃ 1 4 9 18
2 ┃ 2 5 10 19
12 ┃ 12 15 20 29

我们把右下角的矩阵记为 C,左列记为 A,上行记为 B(如上图),

如果已知 A={0,1,2,12}、B={0,3,8,17},很容易计算出 C=A⊙B;

反过来,如果已知 C 的某个排列 C0={0,1,2,3,4,5,8,9,10,12,15,17,18,19,20,29},
又该如何反求出上述的 (A, B)?!

to BlueSky2008(懒惰是程序员的美德):
恕我直言,上述链接,打的牌子很大,但很多研究的层次较低(协会里的成员很多是退休的教师,对现代数学和计算机都不太了解),真正可供参考的资料非常有限,而我的站点则专注于相应的学术研究和交流,所以在国际上的影响远高于前者。
加载更多回复(8)

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧