有什么算法可以应用于该程序?

时间:2019-01-02 15:58:24

标签: python algorithm comparison

我正在做一个实习生,编写一个程序来进行基因匹配。

例如: 文件“ A”包含一些基因类型的字符串。 (原始数据未排序) rs17760268 rs10439884 rs4911642 rs157640 rs1958589 rs10886159 rs424232 ....

文件“ B”包含上述的90万个rs号(也未排序)

我的程序现在可以得到正确的结果,但是我想使其更加高效。

是否有可以应用到该程序的算法?

顺便说一句,我将尝试使我的程序进行多处理,看看它是否具有更好的性能。

pseudocode:
read File "A" by string, append to A[]
A[] = rs numbers from File "A"

read File "B" by string
for gene_B in file_B_reader:
    for gene_A in A:
        if gene_A == gene_B:
            #append to result[]

3 个答案:

答案 0 :(得分:1)

我认为不需要先进行任何排序。

  • 将较大的列表B处理为hashmap或hashset,分摊O(n)
  • 遍历列表A,如果不在列表B中,则从O中删除O(m)
  • 返回A

总计:O(n + m)

答案 1 :(得分:0)

从描述中看来,您希望result[]包含rsA(也称为Intersection)中的B个字符串。

您的算法是O(n*m),但是您可以通过首先对两个文件进行排序(O(n*logn)进行基于比较的排序),然后同时从两个文件中读取并增加其中的位置,来轻松地改善这一点具有较低的当前rs数字,并同时向result[]添加匹配项。

答案 2 :(得分:0)

尽管您的解释还不清楚,但我想您是将A值附加到列表中。而是使用字典,您可以更高效地查找A。