【问题标题】:Is it possible to shuffle a 2D matrix while preserving row AND column frequencies?是否可以在保留行和列频率的同时对 2D 矩阵进行洗牌?
【发布时间】:2011-07-02 11:50:55
【问题描述】:

假设我有一个如下所示的二维数组:

GACTG
AGATA
TCCGA

每个数组元素都取自一个小的有限集(在我的例子中,是 DNA 核苷酸 -- {A, C, G, T})。我想以某种方式随机打乱这个数组,同时保留行 列的核苷酸频率。这可能吗?能不能高效完成?

[编辑]:我的意思是我想生成一个新矩阵,其中每一行都有相同数量的As、Cs、Gs 和 @987654328 @s 作为原始矩阵的对应行,其中每一列的As、Cs、Gs 和Ts 的数量与原始矩阵的对应列相同。 置换原始矩阵的行或列一般不会实现这一点。(例如,对于上面的示例,顶行有 2 个Gs,A、@987654335 各有 1 个@ 和 T;如果此行与第 2 行交换,则结果矩阵的顶行将有 3 个As、1 个G 和 1 个T。)

通过一次改组一列来保留列频率非常简单,对于行也是如此。但这样做通常会改变另一种频率。

到目前为止我的想法:如果可以选择 2 行和 2 列,以便这个矩形角的 4 个元素具有图案

XY
YX

对于一对不同的元素 XY,然后将这 4 个元素替换为

YX
XY

将保持行频和列频。在顶部的示例中,这可以针对(至少)第 1 行和第 2 行以及第 2 和第 5 列(其角给出 2x2 矩阵AG;GA)以及第 1 行和第 3 行以及第 1 和第 4 列(其角落给GT;TG)。显然,这可以重复多次以产生某种程度的随机化。

概括地说,任何由行子集和列子集诱导的“子矩形”,其中所有行的频率相同,所有列的频率相同,可以同时具有行和列置换以产生一个有效的完整矩形。 (其中,只有那些至少改变了 1 个元素的子矩形才是真正有趣的。)大问题:

  1. 是否所有有效的完整矩阵都可以通过一系列此类“子矩形重排”得到?我怀疑答案是肯定的。
  2. 所有有效的子矩形重排都可以分解成一系列 2x2 交换吗? [编辑]mhum's counterexample 表明答案是。不幸的是,因为这似乎使提出有效算法变得更加困难,但了解这一点很重要。
  3. 能否有效计算部分或全部有效重排?

This question 解决了可能元素集为{0, 1} 的特殊情况。人们提出的解决方案与我自己提出的解决方案相似,并且可能可用,但并不理想,因为它们需要任意数量的回溯才能正常工作。我还担心只考虑 2x2 交换。

最后,理想情况下,我希望有一个解决方案,可以证明可以从具有与原始相同行频率和列频率的所有矩阵集中随机均匀地选择一个矩阵。我知道,我要求很多:)

【问题讨论】:

  • 似乎很适合遗传算法(没有双关语)。
  • @Paulo:您的意思是生成一组随机矩阵并根据其行和列频率与理想值的距离来对它们的适应度进行评分吗?它可以工作,但你将如何组合 2 个矩阵?我可以看到你如何通过寻找增加一致性的“移动”,从一个单一的起始矩阵爬上山,直到不再有改进的移动是可能的。
  • 拆分和合并来自多个个体的列,比如说,就像一个 5 性别的外星种族?
  • 当您说要保留行频时,您的意思是要保留每一行的频数吗?换句话说,在您的示例中,您的第一行有 1A、1C、1T 和 2G。你需要你的洗牌矩阵来维持第一行的分布吗?排列行(例如:交换第一行和第二行)是不可接受的改组吗?
  • @mhum:是的,我想保留 each 行的频率。看起来我更新的时间和你的评论差不多,希望现在很清楚。 :)

标签: algorithm random shuffle


【解决方案1】:

没有线索,但你所说的基本上是一个广义的数独求解器。试试http://scholar.google.com/scholar?q=sudoku

【讨论】:

    【解决方案2】:

    编辑:哎呀错过了 OP 问题的最后一段,让我重新措辞。

    简单来说,您所链接的问题对所选解决方案的随机性“级别”进行了非常有趣的讨论,请允许我解释一下:

    “...我真的需要尽可能随机的矩阵...”

    "...代码中实现的算法是非常随机的..."

    "...如果选择这种方法,另一种提高随机性的方法是重复随机化过程数次(随机次数)..."

    这些 cmets 没有任何意义,没有“更多”随机之类的东西,这一切都与这个可爱的 Daily WTF entry 完全一样。也就是说,最后的报价几乎是关于某事的。众所周知,如果你模拟一个马尔可夫链,比如随机交换算法,你最终会开始从steady state distribution 生成样本。正是该分布的样子,谁知道...

    无论如何,根据您的目标,您可能并不真正关心此分布的外观,只要它包含足够的元素即可。所以某种交换算法可能有用,但我真的不希望这很容易,因为问题是 NP-Complete(比数独更通用)。

    考虑到这一点,您可以考虑使用任何适用于solving Sudoku 的方法来解决您的问题,如果您在 Acadamia,我建议您获取一份免费供学术使用的 IBM CPLEX 12 副本。您可以用他们的 CP 语言 (OPL) 编写一个类似数独的求解器,并作为整数线性程序求解器为您生成解决方案。我认为他们甚至有解决数独问题的示例代码,你可以借鉴。

    这是我能想到的从此类矩阵中采样的唯一真正随机且无偏的方法:首先让 CPLEX 找到给定数独问题的 所有 N 个解决方案。在你有了这组 N 个解之后,在 1 和 N 之间画一个随机数并使用那个解,如果你想要另一个,就画另一个数字。由于生成所有解决方案可能有点慢,您可以通过告诉求解器在一定数量的解决方案或时间过去后停止并且仅从该集合中采样来近似这样的事情。

    【讨论】:

    • 你想在什么分布下对一个新矩阵进行采样?我认为提问者在这一点上很清楚:“我希望有一个可以证明的解决方案从具有与原始相同行频率和列频率的所有矩阵的集合中随机均匀地选择一个矩阵”。
    • 我的倒数第二句给出了你第一句话的答案:“最后,我希望有一个解决方案,可以证明可以从行频率和列频率与原始矩阵相同的所有矩阵的集合。”
    • 马尔可夫链、数独和 CPLEX 建议都很好,谢谢,如果你一开始就放弃不相关的东西,我会 +1。
    • 另外,如果您无法获得 CPLEX 的免费副本,您可能想尝试 GLPK
    【解决方案3】:

    问题 2 的答案是否定的。考虑以下 2 个矩阵:

    A B C   C A B
    C A B   B C A
    B C A   A B C
    

    它们显然具有相同的行频和列频。然而,不存在具有公共角的 2x2 子矩阵。

    【讨论】:

      【解决方案4】:

      事实证明,对于 0-1 矩阵,2x2 交换足以从一个矩阵到另一个矩阵。 H J Ryser 在一篇名为“零和一矩阵的组合特性”的论文中证明了这一点,即定理 3.1:http://cms.math.ca/cjm/v9/cjm1957v09.0371-0377.pdf。一段时间以来,人们一直试图证明基于 2x2 互换的马尔可夫链可以快速混合;这篇论文http://arxiv.org/pdf/1004.2612v3 似乎是最接近的。

      如果有人可以证明 Ryser 定理的推广适用于您的情况(可能有多达 4x4 的“交换”),那么考虑到交换的对称性,获得稳定状态的链不会太难在感兴趣的矩阵上分布是均匀的。我认为目前证明它对于所有可能的行/列分布都可以快速混合没有任何希望,但是也许您对我们不了解的分布有所了解...

      【讨论】:

      • 谢谢!尤其是 Ryser 论文看起来非常平易近人,我很快就会好好复习一下。有一些理论基础真好!
      猜你喜欢
      • 2017-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-23
      • 1970-01-01
      • 2017-02-09
      • 1970-01-01
      • 2020-07-01
      相关资源
      最近更新 更多