大家帮忙解决个问题,谢谢

jin978347005 发布于 2013/08/21 20:08
阅读 223
收藏 0
A文件:
ENST00000369829 ENSG00000213366
ENST00000598454 ENSG00000224699
ENST00000448586 ENSG00000224246
ENST00000522182 ENSG00000034677
ENST00000371910 ENSG00000160323
ENST00000491059 ENSG00000136883
ENST00000559981 ENSG00000054690
ENST00000553993 ENSG00000258905
ENST00000511269 ENSG00000196104
ENST00000522231 ENSG00000029534

B文件:
chr10   100007446       100028007       ENST00000260702 273
chr10   100011779       100016332       ENST00000433374 75
chr10   100143321       100171634       ENST00000483923 390
chr10   100143321       100174941       ENST00000370575 429
chr10   100146957       100148193       ENST00000464808 59
chr10   100154974       100155064       ENST00000408492 2
chr10   100173704       100174815       ENST00000494941 27
chr10   100173923       100174915       ENST00000462874 25
chr10   100175954       100206667       ENST00000361490 468
chr10   100175954       100206683       ENST00000325103 468
我把A文件的第一列作为hash1的keys,第二列作为hash1的value;B文件的第四列作为hash2的keys,第五列作为hash2的value,我的目的是hash2的keys用hash1的value替换,并且把对应相同hash1 value的hash2 keys进行合并,也就是相应的hash2 value相加,怎么做?我做的时候是把hash2的keys循环两次,对应的ENSG号相同就把它们的值相加,然后删除一个,但是总是会提示相加的等式中有为初始化的值,而且有1万多个keys,循环两次需要很长时间,虽然是用服务器跑的,估计也很慢。谢谢
加载中
0
中山野鬼
中山野鬼
哎。。。说什么好呢? 你不会先排序,再匹配?算法无处不在,只不过很多时候看见了当没看见。
0
Everget
Everget
看不懂呀
0
猎户座
猎户座
就两个算法。一个排序,一个合并两个集合。。。@中山野鬼 还有高深的想法?
0
中山野鬼
中山野鬼

引用来自“猎户座”的答案

就两个算法。一个排序,一个合并两个集合。。。@中山野鬼 还有高深的想法?
哈,没有其他。本来就是这么简单的事情。再简单的查询,如果不排序,怎么折腾都慢。
0
泡不烂的凉粉
泡不烂的凉粉
1w个, 直接导入数据库多方便,  几秒钟的事. 一旦进数据库了.那算法的事就由数据库系统代劳了.
0
xue777hua
xue777hua

不用循环两次吧。。。排序?首先读入文件1的同时,存入HashMap,key为文件1的ENST,value是一个对象,这个对象有三个字段:ENSG,ENST,totalValue,分别存储ENSG,hash2的ENST,hash2的totalValue(这个totalValue初始化为0)。接下来读入文件2,直接去刚刚生成的HashMap中取出对应key的对象,写入对应的hash2的ENST,并且将totalValue+=HashMap.get(key).getTotalValue()。算法复杂度为O(n)。

返回顶部
顶部