Sto facendo un'iterazione di 3 parole, ognuna lunga circa 5 milioni di caratteri, e voglio trovare sequenze di 20 caratteri che identificano ogni parola. Cioè, voglio trovare tutte le sequenze di lunghezza 20 in una parola che è unica per quella parola. Il mio problema è che il codice che ho scritto richiede molto tempo per essere eseguito. Non ho mai nemmeno completato una sola parola sul mio programma durante la notte.Python, enorme problema di prestazioni di itterazione
La funzione seguente accetta un elenco contenente dizionari in cui ogni dizionario contiene ciascuna parola possibile di 20 e la sua posizione da una delle 5 milioni di parole lunghe.
Se qualcuno ha un'idea su come ottimizzare questo sarei davvero grato, non ho la minima idea di come continuare ...
Ecco un esempio del mio codice:
def findUnique(list):
# Takes a list with dictionaries and compairs each element in the dictionaries
# with the others and puts all unique element in new dictionaries and finally
# puts the new dictionaries in a list.
# The result is a list with (in this case) 3 dictionaries containing all unique
# sequences and their locations from each string.
dicList=[]
listlength=len(list)
s=0
valuelist=[]
for i in list:
j=i.values()
valuelist.append(j)
while s<listlength:
currdic=list[s]
dic={}
for key in currdic:
currval=currdic[key]
test=True
n=0
while n<listlength:
if n!=s:
if currval in valuelist[n]: #this is where it takes to much time
n=listlength
test=False
else:
n+=1
else:
n+=1
if test:
dic[key]=currval
dicList.append(dic)
s+=1
return dicList
Order n * * 2 * la dimensione del dizionario. Non c'è da meravigliarsi che sia lento. –
+1 per pubblicare effettivamente il tuo codice, invece di chiederci di essere lettori della mente - grazie! – PaulMcG
Forse date un'occhiata a questo articolo che parla dell'utilizzo del filtro bloom per quello che sembra essere un compito molto simile: http://www.serpentine.com/bos/files/padl09.pdf. Il documento parla di Haskell, quindi pubblica un commento, HTH. –