前往
大廳
主題

ZeroJudge - f437: 1368 - DNA Consensus String 解題心得

Not In My Back Yard | 2020-12-10 00:00:04 | 巴幣 0 | 人氣 225

題目連結:


題目大意:
輸入第一列給定一正整數 T ,代表有 T 筆測試資料。

每筆測資第一列給定兩正整數 M 、 N (4 ≦ M ≦ 50 , 4 ≦ N ≦ 1000),代表有 M 個字串,每個字串長度 N 個字元(只由「A」、「T」、「G」和「C」四個字元組成)。

請找到一個長度為 N 字元的字串,其與這 M 個字串的漢明距離(Hamming Distance)總和為所有可能中最小的。如果有多組解,則請取出其中字典序最小的字串。

注:兩個長度相同的字串之漢明距離定義為兩字串對應位置相同但其字元互不同之個數。



範例輸入:
3
5 8
TATGATAC
TAAGCTAC
AAAGATCC
TGAGATAC
TAAGATGT
4 10
ACGTACGTAC
CCGTACGTAG
GCGTACGTAT
TCGTACGTAA
6 10
ATGTTACCAT
AAGTTACGAT
AACAAAGCAA
AAGTTACCTT
AAGTTACCAA
TACTTACCAA


範例輸出:
TAAGATAC
7
ACGTACGTAA
6
AAGTTACCAA
12


解題思維:
因為要讓所求的字串(令該字串為 S)與其他字串的漢明距離為最小。因此可以看到 S 的第 i 個字元是這 M 個字串之第 i 個字元中種類數量最多的。例如:
TATGATAC
TAAGCTAC
AAAGATCC
TGAGATAC
TAAGATGT
這五個字串,第一個字元有 A 、 T 兩種字元,數量分別為 1 個與 4 個。因為要讓漢明距離盡量小,所以 S 的第一個字元不可能為 C 或是 G(因為沒有這兩個種類),而也不會是 A (這樣漢明距離總和會是 4),所以會是 T (此位置字元漢明距離總和為 1)。

而其他位置的也是同理。

因此,對於每個位置我們只要統計相同位置的每個字元種類之數量,然後看哪個多就在 S 的相應位置放哪個字元。

如果數量有持平的,則代表有多個可能,此時能選 A 的話盡量選 A 、 其次是 C 、再來是 G ,最後是 T(這樣字典序才會盡量小)。

最後輸出 S 即可。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作