вівторок, 28 жовтня 2014 р.

CODE CHALLENGE: Solve the Clump Finding Problem (restated below). You will need to make sure that your algorithm is efficient enough to handle a large dataset.
Clump Finding Problem: Find patterns forming clumps in a string.
     Input: A string Genome, and integers kL, and t.
     Output: All distinct k-mers forming (Lt)-clumps in Genome.
Sample Input:
     CGGACTCGACAGATGTGAAGAACGACAATGTGAAGACTCGACACGACAGAGTGAAGAGAAGAGGAAACATTGTAA
     5 50 4
Sample Output:
     CGACA GAAGA
## данный челенж никак нельзя расчитать в онлайне.. ибо Timeout       
для вижуал студии код на примере срабатывает
def remove_duplicates(values):
         output = []
         seen = set()
         for value in values:
                if value not in seen:
                     output.append(value)
                     seen.add(value)
         return output

def Clump(Genome, k, L, t):
    res_gen = []
    for i in range(len(Genome) - L):
            #print (str(i) + " Lmer")
            L_mer = Genome[i:i+L]
            for n in range(L-k):
                count_t = 0
                k_mer = Genome[n:n+k]
                #print str(n) + "kmer"
                for j in range(0, L-k):
                    #print str(j) + " step"
                    if k_mer == L_mer[j:j+k]:
                        count_t +=1
                #print ("t= " + str(count_t))
                if count_t >= t:
                        res_gen.append(k_mer)
    res_gen = remove_duplicates(res_gen)
    return " ".join(res_gen)  

print (Clump("CGGACTCGACAGATGTGAAGAACGACAATGTGAAGACTCGACACGACAGAGTGAAGAGAAGAGGAAACATTGTAA", 5, 50, 4)) 

НО! по квизу задание с данными в 9тыс нуклеотидов и последовательностями в 590 штук у меня уже считает добрых 15 минут.. это никак не укладывается в таймлимит по заданию - 5 мин.

Немає коментарів:

Дописати коментар