题目描述
来源
OpenJudge网站 – 百练习题集-第1007号习题
建议学编程的人士利用好这个网站。
总时间限制: 1000ms 内存限制: 65536kB
描述
现在有一些长度相等的DNA串(只由ACGT四个字母组成),请将它们按照逆序对的数量多少排序。
逆序对指的是字符串A中的两个字符A[i]、A[j],具有i < j 且 A[i] > A[j] 的性质。如字符串”ATCG“中,T和C是一个逆序对,T和G是另一个逆序对,这个字符串的逆序对数为2。
输入
第1行:两个整数n和m,n(0<n<=50)表示字符串长度,m(0<m<=100)表示字符串数量
第2至m+1行:每行是一个长度为n的字符串
输出
按逆序对数从少到多输出字符串,逆序对数一样多的字符串按照输入的顺序输出。
样例输入
10 6
AACATGAAGG
TTTTGGCCAA
TTTGGCCAAA
GATCAGATTT
CCCGGGGGGA
ATCGATGCAT
样例输出
CCCGGGGGGA
AACATGAAGG
GATCAGATTT
ATCGATGCAT
TTTTGGCCAA
TTTGGCCAAA
解题思路
- 输入m个DNA字符串,依次存入dnas列表中。
- 按DNA字符串逆序对数目,从小到大排序。这一步通过调用列表的sort方法做到的。sort方法采用的排序算法是稳定的,能保证对于逆序对数目相同的DNA串,按输入顺序输出。排序算法分稳定的和不稳定的两种,详情参阅各种排序算法比较(1):稳定性。
- 如何求出DNA串的逆序对数目?做法是,对于第 i 个字符(i = 1, 2, …, n-1),与其后的字符逐个比较,发现逆序对,则增1。这里,n是DNA串的长度。
- 第三步采用的算法的时间开销级别是O(n2) 。由于n小于等于50,m小于等于100,程序运行不会超过1000ms这一时间限制。

本文介绍了一个基于逆序对数量的DNA串排序算法,详细解释了算法的实现过程,包括逆序对计数方法及稳定排序策略,适用于生物信息学领域的数据处理。
——OpenJudge百练习题:DNA排序&spm=1001.2101.3001.5002&articleId=104471865&d=1&t=3&u=2e67309209d147faae46833990f8c0d9)
1万+

被折叠的 条评论
为什么被折叠?



