2

サブセット反転に基づくソート アルゴリズムを探しています。これはパンケーキの並べ替えのようなものですが、へらの上にすべてのパンケーキを取る代わりに、必要なサブセットを反転させることができます. サブセットの長さは問題ではありません。このように: http://www.yourgenome.org/sites/default/files/illustrations/diagram/dna_mutations_inversion_yourgenome.png したがって、すべてを反転させずに単純に数値を交換することはできません。

これは、ショウジョウバエの 1 つの亜種が他の亜種にどのように変異するかを判断するために行っています。どちらも同じ遺伝子を持っていますが、順序が異なります。2 番目の亜種のゲノムは「ソート」されています。つまり、遺伝子番号は 1 ~ 25 です。最初の亜種ゲノムはソートされていません。したがって、ソートアルゴリズムを探しています。

これは、私たちが見ている「ゲノム」です (ただし、すべての数字のリストでこれを機能させることができるはずです):

[23, 1, 2, 11, 24, 22, 19, 6, 10, 7, 25, 20, 5, 8, 18, 12, 13, 14, 15, 16, 17, 21, 3, 4, 9];

2 つの別々の問題を検討しています。

1) 反転の少ない 25 個の数字のリストを並べ替えるには

2) 25 個の数字のリストを並べ替えるには、移動する数字の数が最も少なくなるようにします。

左から右に移動し、次に低い値を検索し、その間のすべてを反転させることで、このように並べ替える方法を既に見つけましたが、これをより高速に実行できるはずであることは間違いありません。しかし、まだ他の方法が見つからないので、あなたの助けを求めています!

UPDATE: the method we currently use is based on the above method 
but instead works both ways. It looks at the next elements needed 
for both ends (e.g. 1 and 25 at the beginning) and then calculates 
which inversion would be cheapest. All values at the ends can be 
ignored for the rest of the algorithm because they get put into the 
correct place immediately. Our first method took 18/19 steps and 148 
genes, and this one does it in 17 steps and 101 genes. For both 
optimalisation tactics (the two mentioned above), this is a better 
method. It is however not cheaper in terms of code and processing.

現在、私たちは Python で作業していますが、これは Python での経験が最も多いためですが、より効率的にこれに取り組む方法についての疑似コードのアイデアがあれば喜んで提供します。別の言語の方が適していると思われる場合は、お知らせください。疑似コード、アイデア、考え、実際のコードはすべて大歓迎です!

前もって感謝します!

4

2 に答える 2

0

2番目の質問で探しているのは、シーケンスをソートするための隣接する要素のスワップの最小数であり、シーケンス内の反転の数に等しいと思います (ここで、a[i] > a[j] および i < j)。

最初の質問は、私にはかなり複雑に思えます。可能性のあるヒューリスティックの 1 つは、サブセットの反転を複数の要素の隣接スワップに似ていると考えることです。たとえば、この位置にシーケンスを取得できた場合、

5,6,1,2,3,4,7,8

インデックス [0,1] を [2,3] と「隣接スワップ」することができます ([0,1,2,3] を反転します)。

2,1,6,5,3,4,7,8

[2,3] と [4,5] ([2,3,4,5] の反転)、

2,1,4,3,5,6,7,8

要素の反転が大幅に少ないシーケンスに到達します。つまり、並べ替えを完了するために必要な単一の隣接スワップが少なくなります。

したがって、単一の要素ではなくセクションの反転 (a[i] > a[j] および i < j の意味で) を定量化しようとすると、最初の質問の方法を推定または構築する方向に進むのに役立つ可能性があります。

于 2016-04-22T09:17:48.610 に答える