【发布时间】:2013-01-14 13:19:18
【问题描述】:
我需要将随机论文分配给班级的学生,但我有以下限制:
- 每个学生应分配两篇论文。
- 每篇论文应分配给(大约)相同数量的学生。
是否有一种优雅的方式来生成具有此属性的矩阵?即它被洗牌但行和列的总和是恒定的?举例说明:
Student A 1 0 0 1 1 0 | 3
Student B 1 0 1 0 0 1 | 3
Student C 0 1 1 0 1 0 | 3
Student D 0 1 0 1 0 1 | 3
----------------
2 2 2 2 2 2
我想先用正确的行/列总和构建一个“初始矩阵”,然后先随机排列行,然后是列,但是如何生成这个初始矩阵?这里的问题是我将在(例如)以下替代方案之间进行选择,并且有两个学生分配了相同的论文(在左侧设置中)这一事实不会通过行/列改组而改变:
INITIAL (MA): OR (MB):
A 1 1 1 0 0 0 || 1 1 1 0 0 0
B 1 1 1 0 0 0 || 0 1 1 1 0 0
C 0 0 0 1 1 1 || 0 0 0 1 1 1
D 0 0 0 1 1 1 || 1 0 0 0 1 1
我知道我可以想出一些快速/肮脏的东西,并在必要时进行调整,但这似乎是一个有趣的练习。
【问题讨论】:
-
首先,证明这个命题。令 C 为允许矩阵的集合。 (1) 如果 A 和 B 在 C 中,则存在一系列行/列置换矩阵 P1...Pn 其中 A = P1 P2 ... Pn B。 (2) 如果 B 在 C 中,则对于任何序列行/列置换矩阵 P1...Pn, A = P1 P2 ... Pn B 也在 C 中。由此,您知道初始矩阵是什么并不重要。只需将其设为 n 对角线,角三角形为 1,如示例所示。
-
这听起来很合理,但你所说的“行/列置换矩阵”是什么意思?在我看来,仅通过改组行和列就无法在我的帖子中从 MA 转到 MB。 IE。总会有两行在相同的地方有 1。我错了吗?
-
在我看来,在我的帖子中,仅通过随机排列行和列是无法从 MA 转到 MB。 这意味着你盯着它看的时间不够长。您可以使用某种形式的高斯消元法。对于您的示例,请使用 C = [1 0 0 0; 1 0 0 0;0 0 1 0; 0 0 1 0],然后 C * B = A。
-
你是对的!但是您的 C 是 不是置换矩阵,因为它在每列中都没有 1?它是否仍然保留行/列总和? (即,您正在从 MB 中“删除”第 2 行和第 4 行)。似乎在纯置换矩阵下 MA 和 MB 属于不同的“组”?
-
那是因为 A 和 B 不是正方形的。
标签: algorithm math random shuffle