POJ_1007_DNASorting分析
DNA序列由四个字母的组合来表示,四个字母分别是A、C、G、T。每个序列都可以定义一个无序的度,比如GCA的无序度为3,计算方法为:G比后面2字母大,C比后面1个字母大,因此GCA的无序度为3。
输入要求:
第一行输入两个数字,第一个数字表示序列的长度,第二个数字表示序列的个数,如下:
10 6
AACATGAAGG
TTTTGGCCAA
TTTGGCCAAA
GATCAGATTT
CCCGGGGGGA
ATCGATGCAT
输出要求:
按DNA序列的无序度由低到高输出,如果DNA无序度相同,则按输入的先后顺序输出。
这道题可分为两个部分,第一,计算DNA序列的无序度;第二,根据DNA序列的无序度进行排序。
计算DNA序列无序度的时候,如果该字母和前一字母相同,那么其无序度也和前一字母的相同,可以直接娶前一个字母的无序度值,减少计算量。
排序的时候由于数据量较小,所以选择什么排序都可以,推荐希尔排序。使用java的同学可以直接调用Arrays中的sort()方法。
Arrays.<String>sort(strArray, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
// TODO Auto-generated method stub
int len = o1.length();
int[] v1 = new int[len];
int[] v2 = new int[len];
char c1 = o1.charAt(0);
char c2 = o2.charAt(0);
for (int i = 1; i < len; i++) {
if (c1 - o1.charAt(i) > 0) v1[0]++;
if (c2 - o2.charAt(i) > 0) v2[0]++;
}
int value1 = v1[0], value2 = v2[0];
for (int i = 1; i < len; i++) {
if (o1.charAt(i) - o1.charAt(i - 1) == 0) {
v1[i] = v1[i - 1];
value1 += v1[i-1];
continue;
}
if (i == len - 1) {
v1[i] = 0;
break;
}
if (o1.charAt(i) == 'A') {
v1[i] = 0;
continue;
}
for (int j = i; j < len; j++) {
if (o1.charAt(i) - o1.charAt(j) > 0) v1[i]++;
}
value1 += v1[i];
}
for (int i = 1; i < len; i++) {
if (o2.charAt(i) - o2.charAt(i - 1) == 0) {
v2[i] = v2[i - 1];
value2 += v2[i - 1];
continue;
}
if (i == len - 1) {
v2[i] = 0;
break;
}
if (o2.charAt(i) == 'A') {
v2[i] = 0;
continue;
}
for (int j = i; j < len; j++) {
if (o2.charAt(i) - o2.charAt(j) > 0) v2[i]++;
}
value2 += v2[i];
}
System.out.printf("%s, length:%d %s, length:%d\n", o1, value1, o2, value2);
if (value1 < value2) {
return -1;
} else if (value1 == value2) {
return 0;
} else {
return 1;
}
}
});
分享到:
相关推荐
【标题】"POJ1007-DNA Sorting"是一个编程竞赛题目,源自北京大学的在线判题系统POJ(Problem Online Judge)。这个题目要求参赛者编写程序,对DNA序列进行排序,具体而言,就是对一系列由ATCG四种碱基组成的DNA字符...
DNA Sorting Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 34868 Accepted: 13480 Description One measure of ``unsortedness'' in a sequence is the number of pairs of entries that are ...
通过阅读和分析poj_1699.txt文件,我们可以学习到如何分析问题、设计算法、编写代码以及验证解决方案的正确性,这对于提高编程和算法能力非常有帮助。同时,这也是一个很好的实例,展示了在面对实际问题时,如何运用...
标签"poj poj_27 poj27 poj2775"进一步确认了这是一道关于POJ平台的编程挑战,其中"poj_27"可能是表示第27类问题或者某种分类,而"poj27"可能是对"poj2775"的简写。 压缩文件中的"www.pudn.com.txt"可能是一个链接...
标题中的"poj_2682(3).rar"是一个指向编程竞赛问题的引用,通常这类问题在网站如POJ(Programming Online Judge)上出现,供程序员解决并提交代码进行测试。这个问题的编号是2682,可能涉及到特定的数据结构或算法...
标题"Poj_1102_.rar_poj11"暗示了这是一个关于解决Poj_1102问题的资源包,通常在编程竞赛或在线判题系统如POJ(Problem Set of Judge Online)上遇到。POJ是中国的一个在线编程训练平台,提供了各种算法题目供用户...
标题中的“POJ_3131.zip_POJ 八数码_poj”指的是一个与编程竞赛网站POJ(Problem Set Algorithm)相关的项目,具体是针对3131号问题的解决方案,该问题涉及到了八数码游戏。八数码游戏,又称滑动拼图,是一个经典的...
2遍dp poj_3613解题报告 poj_3613解题报告
【标题】"poj_3310.rar_3310_poj"是一个与编程竞赛相关的压缩包,其中包含了对POJ(Problem Online Judge)3310问题的解决方案和详细解析。POJ是一个著名的在线编程竞赛平台,提供各种算法题目供参赛者练习和提交...
标题 "ACM.zip_ACM_poj_poj3187_poj3669" 提供的信息表明,这个压缩包包含的是与ACM(国际大学生程序设计竞赛)相关的编程题目解决方案,具体是POJ(Programming Online Judge)平台上的两道题目,编号分别为poj3187...
《POJ 1010 Stamps:解题思路与陷阱分析》 POJ 1010,也被称为“邮票问题”,是编程竞赛中的一道经典题目,旨在考察参赛者的动态规划和数学思维能力。这个题目在编程爱好者中具有较高的知名度,因为它涉及到有趣的...
标题中的“pku_poj_2187.rar_poj 2187_凸包问题”表明这是一个关于北京大学(Peking University, PKU)编程竞赛平台POJ上的第2187题,题目主要涉及凸包问题。描述中的“O(nlogn)凸包问题 poj2187”提示我们解决这个...
【标题】"poj_1002_487.rar_poj 1002"指的是北京大学在线编程平台上的第1002道题目,这道题目涉及到计算机科学中的算法设计与实现,特别是字符串处理和哈希映射。在这个问题中,我们需要编写一个程序,该程序能够...
标题中的“POJ3277.rar_3277 poj_poj3277_多个面积_线段树”是指一个与编程竞赛相关的压缩文件,特别提到了POJ(Problemset Online Judge)的第3277号问题。POJ是一个著名的在线编程竞赛平台,参与者需要解决各种...
描述中提到的"三道几何题:hdu 1007、hdu 2289、poj 3714"暗示了这是一个关于几何算法的题目集,涉及到三个不同的在线判题系统:HDU(杭州电子科技大学在线评测系统)的1007题和2289题,以及POJ的3714题。...
C_(POJ_1854)(分治).cpp
《POJ 1990:树状数组解题策略详解》 在编程竞赛的世界里,POJ(Programming Online Judge)是一个备受瞩目的在线评测系统,它提供了丰富的编程题目供参赛者挑战。其中,编号为1990的题目是一道涉及数据结构与算法...
D_(POJ_1723)(思维)(sort).cpp
现在,让我们逐个分析压缩包中的文件名,尽管没有提供具体的题目和代码细节,但我们可以基于常见的POJ题目类型推测可能涉及的知识点: 1. 13295.cpp:可能是一个关于排序或查找的问题,因为这类问题在编程竞赛中很...
D_(POJ_1723)(思维)(第k大数).cpp