Python入门习题(63)——OpenJudge百练习题:DNA排序

本文介绍了一个基于逆序对数量的DNA串排序算法,详细解释了算法的实现过程,包括逆序对计数方法及稳定排序策略,适用于生物信息学领域的数据处理。

OpenJudge百练第1007号习题:DNA排序

题目描述

来源
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

解题思路

  1. 输入m个DNA字符串,依次存入dnas列表中。
  2. 按DNA字符串逆序对数目,从小到大排序。这一步通过调用列表的sort方法做到的。sort方法采用的排序算法是稳定的,能保证对于逆序对数目相同的DNA串,按输入顺序输出。排序算法分稳定的和不稳定的两种,详情参阅各种排序算法比较(1):稳定性
  3. 如何求出DNA串的逆序对数目?做法是,对于第 i 个字符(i = 1, 2, …, n-1),与其后的字符逐个比较,发现逆序对,则增1。这里,n是DNA串的长度。
  4. 第三步采用的算法的时间开销级别是O(n2) 。由于n小于等于50,m小于等于100,程序运行不会超过1000ms这一时间限制。

参考答案


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值