`
linx_bupt
  • 浏览: 15750 次
  • 来自: 北京
社区版块
存档分类
最新评论

POJ_1007_DNASorting分析

 
阅读更多

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;
				}
			}
			
		});
 
0
0
分享到:
评论

相关推荐

    POJ1007-DNA Sorting

    【标题】"POJ1007-DNA Sorting"是一个编程竞赛题目,源自北京大学的在线判题系统POJ(Problem Online Judge)。这个题目要求参赛者编写程序,对DNA序列进行排序,具体而言,就是对一系列由ATCG四种碱基组成的DNA字符...

    poj 1007 DNA Sorting

    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.rar_1699_poj_poj1699

    通过阅读和分析poj_1699.txt文件,我们可以学习到如何分析问题、设计算法、编写代码以及验证解决方案的正确性,这对于提高编程和算法能力非常有帮助。同时,这也是一个很好的实例,展示了在面对实际问题时,如何运用...

    poj2775.rar_poj_poj 27_poj27_poj2775

    标签"poj poj_27 poj27 poj2775"进一步确认了这是一道关于POJ平台的编程挑战,其中"poj_27"可能是表示第27类问题或者某种分类,而"poj27"可能是对"poj2775"的简写。 压缩文件中的"www.pudn.com.txt"可能是一个链接...

    poj_2682(3).rar_C++ 数组扩充_poj 26_poj 2682_poj26

    标题中的"poj_2682(3).rar"是一个指向编程竞赛问题的引用,通常这类问题在网站如POJ(Programming Online Judge)上出现,供程序员解决并提交代码进行测试。这个问题的编号是2682,可能涉及到特定的数据结构或算法...

    Poj_1102_.rar_poj11

    标题"Poj_1102_.rar_poj11"暗示了这是一个关于解决Poj_1102问题的资源包,通常在编程竞赛或在线判题系统如POJ(Problem Set of Judge Online)上遇到。POJ是中国的一个在线编程训练平台,提供了各种算法题目供用户...

    POJ_3131.zip_POJ 八数码_poj

    标题中的“POJ_3131.zip_POJ 八数码_poj”指的是一个与编程竞赛网站POJ(Problem Set Algorithm)相关的项目,具体是针对3131号问题的解决方案,该问题涉及到了八数码游戏。八数码游戏,又称滑动拼图,是一个经典的...

    poj_3613解题报告

    2遍dp poj_3613解题报告 poj_3613解题报告

    poj_3310.rar_3310_poj

    【标题】"poj_3310.rar_3310_poj"是一个与编程竞赛相关的压缩包,其中包含了对POJ(Problem Online Judge)3310问题的解决方案和详细解析。POJ是一个著名的在线编程竞赛平台,提供各种算法题目供参赛者练习和提交...

    ACM.zip_ACM_poj_poj3187_poj3669

    标题 "ACM.zip_ACM_poj_poj3187_poj3669" 提供的信息表明,这个压缩包包含的是与ACM(国际大学生程序设计竞赛)相关的编程题目解决方案,具体是POJ(Programming Online Judge)平台上的两道题目,编号分别为poj3187...

    1010_stamps.zip_1010_POJ 1010_poj_poj stamps_poj10

    《POJ 1010 Stamps:解题思路与陷阱分析》 POJ 1010,也被称为“邮票问题”,是编程竞赛中的一道经典题目,旨在考察参赛者的动态规划和数学思维能力。这个题目在编程爱好者中具有较高的知名度,因为它涉及到有趣的...

    pku_poj_2187.rar_poj 2187_凸包问题

    标题中的“pku_poj_2187.rar_poj 2187_凸包问题”表明这是一个关于北京大学(Peking University, PKU)编程竞赛平台POJ上的第2187题,题目主要涉及凸包问题。描述中的“O(nlogn)凸包问题 poj2187”提示我们解决这个...

    poj_1002_487.rar_poj 1002

    【标题】"poj_1002_487.rar_poj 1002"指的是北京大学在线编程平台上的第1002道题目,这道题目涉及到计算机科学中的算法设计与实现,特别是字符串处理和哈希映射。在这个问题中,我们需要编写一个程序,该程序能够...

    POJ3277.rar_3277 poj_poj3277_多个面积_线段树

    标题中的“POJ3277.rar_3277 poj_poj3277_多个面积_线段树”是指一个与编程竞赛相关的压缩文件,特别提到了POJ(Problemset Online Judge)的第3277号问题。POJ是一个著名的在线编程竞赛平台,参与者需要解决各种...

    jihe.rar_2289_POJ 3714_poj3714_poj3714 Ra_visual c

    描述中提到的"三道几何题:hdu 1007、hdu 2289、poj 3714"暗示了这是一个关于几何算法的题目集,涉及到三个不同的在线判题系统:HDU(杭州电子科技大学在线评测系统)的1007题和2289题,以及POJ的3714题。...

    C_(POJ_1854)(分治).cpp

    C_(POJ_1854)(分治).cpp

    poj1990.rar_POJ 19_poj_poj19

    《POJ 1990:树状数组解题策略详解》 在编程竞赛的世界里,POJ(Programming Online Judge)是一个备受瞩目的在线评测系统,它提供了丰富的编程题目供参赛者挑战。其中,编号为1990的题目是一道涉及数据结构与算法...

    D_(POJ_1723)(思维)(sort).cpp

    D_(POJ_1723)(思维)(sort).cpp

    POJ_keptsl6_C++_

    现在,让我们逐个分析压缩包中的文件名,尽管没有提供具体的题目和代码细节,但我们可以基于常见的POJ题目类型推测可能涉及的知识点: 1. 13295.cpp:可能是一个关于排序或查找的问题,因为这类问题在编程竞赛中很...

    D_(POJ_1723)(思维)(第k大数).cpp

    D_(POJ_1723)(思维)(第k大数).cpp

Global site tag (gtag.js) - Google Analytics