假设我有一个如下所示的2D数组:
GACTG
AGATA
TCCGA
每个数组元素取自一个小的有限集(在我的例子中,DNA核苷酸 - {A, C, G, T}
)。我想以某种方式随机洗牌这个数组,同时保留行和列核苷酸频率。这可能吗?可以有效地完成吗?
[编辑] :我的意思是我想生成一个新矩阵,其中每一行的A
s C
s G
,{{1} } s和T
s作为原始矩阵的对应行,并且每列具有相同数量的A
s,C
s,G
s和{ {1}} s作为原始矩阵的对应列。 置换原始矩阵的行或列通常不会实现此目的。(例如,对于上面的示例,顶行有2 T
个,G
各1 },A
和C
;如果此行与第2行交换,则结果矩阵中的第一行将包含3 T
s,1 A
和1 {{ 1}}。)
通过一次改变列来保持列频率是很简单的,同样对于行也是如此。但这样做通常会改变另一种频率。
到目前为止我的想法:如果可以选择2行和2列,以便此矩形角落的4个元素具有模式
G
对于某些不同的元素T
和XY
YX
,然后用
X
将保持行频和列频。在顶部的示例中,这可以针对(至少)第1行和第2行以及第2列和第5列(其角部给出2x2矩阵Y
)以及第1行和第3行以及第1列和第4列完成(其角落给出YX
XY
)。很明显,这可以重复多次,以产生一定程度的随机化。
推广一点,由行的子集和列的子集引起的任何“子矩形”,其中所有行的频率相同并且所有列的频率相同,可以具有其行和列置换以产生有效的完整矩形。 (其中,只有那些至少改变了1个元素的子矩形实际上很有趣。)大问题:
This question解决了一个特殊情况,其中可能的元素集合为AG;GA
。人们提出的解决方案与我自己提出的解决方案类似,可能是可用的,但并不理想,因为它们需要任意数量的回溯才能正常工作。此外,我担心只考虑2x2掉期。
最后,我理想地想要一种解决方案,可以证明从具有与原始行频率和列频相同的所有矩阵的集合中随机均匀地选择矩阵。我知道,我要求很多:)
答案 0 :(得分:3)
编辑:oops错过了OP问题的最后一段,让我重新措辞。
简单地说,您所关联的问题对所选解决方案的随机性“级别”进行了非常热闹的讨论,请允许我解释一下:
“......我真的需要尽可能随机的矩阵......”
“......在代码中实现的算法非常随机......”
“......如果选择这种方法,改善随机性的另一种方法是多次重复随机化过程(随机次数)......”
这些评论都没有任何意义,没有“更多”随机的东西,这就像这个可爱的Daily WTF entry。也就是说,最后一句话几乎就是什么。众所周知,如果您模拟马尔可夫链,就像随机交换算法一样,您将最终开始从steady state distribution生成样本。正是这种分布看起来如何,谁知道......
无论如何,根据您的目标,只要它包含足够的元素,您可能并不关心这个分布是什么样的。所以某种交换算法可能会有用,但我真的不希望这很容易,因为问题是NP-Complete(比数独更普遍)。
考虑到这一点,您可以考虑使用适用于solving Sudoku的任何方法解决您的问题,如果您在Acadamia,我建议您获取IBM CPLEX 12的副本,该副本可免费用于学术用途。您可以使用CP语言(OPL)编写类似Sudoku的求解器,并作为整数线性程序求解器为您生成解决方案。我认为他们甚至有解决可以借用的数独的示例代码。
这是我可以想到的从这样的矩阵中采样的唯一真正随机且无偏见的方式:首先获得CPLEX以找到针对给定数独问题的所有 N解决方案。在获得这组N个解决方案后,在1和N之间绘制一个随机数并使用该解决方案,如果您想要另一个,则绘制另一个数字。由于生成所有解决方案可能有点慢,您可以通过告诉解算器在经过一定数量的解决方案或时间后停止并仅从该集合中进行采样来近似这样的事情。
答案 1 :(得分:3)
问题2的答案是否定的。考虑以下2个矩阵:
A B C C A B
C A B B C A
B C A A B C
它们显然具有相同的行频和列频。然而,没有2x2子矩阵具有共同角落。
答案 2 :(得分:2)
毫无头绪,但你所说的基本上是一个普遍的数独求解器。试试http://scholar.google.com/scholar?q=sudoku
答案 3 :(得分:2)
事实证明,对于0-1矩阵,2x2交换足以从一个矩阵到达任何其他矩阵。 H J Ryser在一篇名为“零和矩阵的矩阵的组合性质”的论文中证明了这一点:http://cms.math.ca/cjm/v9/cjm1957v09.0371-0377.pdf。人们一直试图证明基于2x2互换的马尔可夫链迅速混合;本文http://arxiv.org/pdf/1004.2612v3似乎最接近。
如果有人可以证明Ryser定理对你的情况的推广(可能有高达4x4的“掉期”),那么由于掉期的对称性,得到一个稳态的链就不会太难了在感兴趣的矩阵上分布是均匀的。我认为目前没有任何希望证明它可以快速混合所有可能的行/列分布,但也许您对我们不支持的分布有所了解......