次のような 2D 配列があるとします。
GACTG
AGATA
TCCGA
各配列要素は、小さな有限セット (私の場合、DNA ヌクレオチド -- {A, C, G, T}
) から取得されます。行と列の両方のヌクレオチド頻度を維持しながら、この配列を何らかの形でランダムにシャッフルしたいと思います。これは可能ですか?それは効率的に行うことができますか?
[編集] : これは、各行が元の行列の対応する行と同じ数のA
s、C
s、G
s およびs を持ち、各列が同じ数のsを持つ新しい行列を作成したいということです。元の行列の対応する列としての s、s、およびs。元の行列の行または列を並べ替えても、一般にこれは達成されません。 (例えば、上記の例では、一番上の行には が 2つあり、とがそれぞれ 1 つずつあります。この行が行 2 と交換された場合、結果の行列の一番上の行には1と 1の 3 つが含まれます。)T
A
C
G
T
G
A
C
T
A
G
T
一度に列をシャッフルすることで列の頻度だけを保持するのは簡単で、行についても同様です。しかし、これを行うと、一般に他の種類の周波数が変更されます。
これまでの私の考え: この長方形の角にある 4 つの要素がパターンを持つように、2 行 2 列を選択することが可能であれば
XY
YX
X
異なる要素とのいくつかのペアに対してY
、これらの 4 つの要素を
YX
XY
行頻度と列頻度の両方を維持します。上の例では、これは (少なくとも) 行 1 と 2 と列 2 と 5 (角が 2x2 行列 を与えるAG;GA
) に対して、および行 1 と 3 と列 1 と 4 (角が を与えるGT;TG
)に対して行うことができます。 . 明らかに、これを何度も繰り返して、ある程度のランダム化を行うことができます。
少し一般化すると、すべての行の頻度が同じで、すべての列の頻度が同じである、行のサブセットと列のサブセットによって引き起こされる「サブ長方形」は、行と列の両方を並べ替えて生成することができます有効な完全な長方形。(これらのうち、実際に興味深いのは、少なくとも 1 つの要素が変更されているサブ長方形だけです。) 大きな疑問:
- このような一連の「サブ長方形の再配置」によって、すべての有効な完全行列に到達できますか? 答えはイエスだと思います。
- すべての有効な部分長方形の再配置は、一連の 2x2 スワップに分解できますか? [編集] : mhum の反例は、答えがnoであることを示しています。残念ながら、これにより効率的なアルゴリズムを考え出すことが難しくなるように思われるため、知っておくことは重要です。
- 有効な再配置の一部またはすべてを効率的に計算できますか?
この質問は、可能な要素のセットが である特殊なケースに対処します{0, 1}
。人々が思いついた解決策は、私が思いついたものと似ており、おそらく使用可能ですが、正しく機能するには任意の量のバックトラックが必要になるため、理想的ではありません. また、2x2 スワップのみが考慮されることも懸念しています。
最後に、元の行列と同じ行周波数と列周波数を持つすべての行列のセットから行列を一様にランダムに選択することを証明できるソリューションが理想的です。私は知っています、私はたくさん求めています:)