Предположим, у меня есть двумерный массив, подобный следующему:
GACTG
AGATA
TCCGA
Каждый элемент массива взят из небольшого конечного набора (в моем случае, нуклеотидов ДНК - {A, C, G, T}
). Я хотел бы как-то случайным образом перемешать этот массив, сохраняя при этом частоты нуклеотидов столбцов и . Это возможно? Можно ли сделать это эффективно?
[EDIT] : Я имею в виду, что хочу создать новую матрицу, в которой каждая строка имеет одинаковое количество A
s, C
s, G
s и T
s как соответствующая строка исходной матрицы, и где каждый столбец имеет то же число A
s, C
s, G
s и T
s, что и соответствующий столбец исходной матрицы. Перестановка строк или столбцов исходной матрицы в общем случае не приведет к этому. (Например, для приведенного выше примера верхняя строка имеет 2 G
с и 1 каждый из A
, C
и T
; если эту строку поменять местами со строкой 2, верхняя строка в результирующей матрице будет иметь 3 A
s, 1 G
и 1 T
.)
Достаточно просто сохранить только частоты столбцов, перетасовывая столбец за раз, а также для строк. Но в общем случае это изменит частоты другого типа.
Мои мысли пока: Если возможно выбрать 2 строки и 2 столбца, чтобы 4 элемента по углам этого прямоугольника имели рисунок
XY
YX
для некоторой пары отдельных элементов X
и Y
, а затем заменить эти 4 элемента на
YX
XY
будет поддерживать частоты строк и столбцов. В приведенном выше примере это можно сделать для (как минимум) строк 1 и 2 и столбцов 2 и 5 (углы которых дают матрицу 2x2 AG;GA
), а также для строк 1 и 3 и столбцов 1 и 4 (чей углы дают GT;TG
). Ясно, что это можно повторить несколько раз, чтобы получить некоторый уровень рандомизации.
Обобщая немного, любой «под прямоугольник», индуцированный подмножеством строк и подмножеством столбцов, в котором частоты всех строк одинаковы, а частоты всех столбцов одинаковы, может иметь как свои строки, так и столбцы переставить, чтобы получить правильный полный прямоугольник. (Из них на самом деле интересны только те подпрямоугольники, в которых изменен хотя бы 1 элемент.) Большие вопросы:
- Все ли действительные полные матрицы достижимы серией таких "подстановочных прямоугольников"? Я подозреваю, что ответ - да.
- Все ли действительные преобразования под прямоугольников разложены в серию перестановок 2x2? [РЕДАКТИРОВАТЬ] : контрпример * mhum показывает, что ответом является нет . К сожалению, потому что это может затруднить создание эффективного алгоритма, но важно знать.
- Можно ли эффективно рассчитать некоторые или все действительные перестановки?
Этот вопрос касается особого случая, когда набор возможных элементов равен {0, 1}
. Решения, которые придумали люди, похожи на те, что я придумал сам, и, вероятно, пригодны для использования, но не идеальны, поскольку для правильной работы им требуется произвольное количество возвратов. Также меня беспокоит, что рассматриваются только свопы 2х2.
Наконец, в идеале мне бы хотелось решение, которое, как можно доказать, выбрало бы матрицу равномерно случайным образом из набора всех матриц, имеющих частоты строк и столбцов, совпадающие с исходными. Я знаю, я прошу много:)