On Sat, 05 Dec 2009 00:32:22 +0100, Pietro Battiston <too...@email.it> wrote:
> def processa_linea(linea): > contenuto = estrai_contenuto(linea) > target = estrai_target(linea) > > if not target in self.diz: > self.diz[target] = [] > > self.diz[target].append(contenuto) > > self.contatore_linee += 1 > > if self.contatore_linee > MEMORIA_MAX: > # Si arriva qui al più N_RIGHE * (N_FILE/MEMORIA_MAX) volte > # (dignitoso purché N_FILE**2 <= MEMORIA_MAX, dato che > # le righe seguenti hanno costo grosso modo N_FILE) > popolarità_massima = 0 > for un_target, sua_lista in zip(self.diz, self.diz.values): > popolarità = len(sua_lista) > if popolarità > popolarità_massima: > il_più_popolare = un_target > popolarità_massima = popolarità > > self.scrivi_su_file_e_svuota_lista(il_più_popolare) > > self.contatore_linee -= popolarità_massima Ho capito: praticamente mantieni il numero di righe memorizzate compreso tra il massimo e il massimo meno la dimensione della lista maggiore. Il fatto è che mi sembra parecchio più complicato pur non risolvendo alcun problema sostanziale: così diminuisci il numero di scritture in caso di distribuzioni distanti dall'uniformità al limite del patologico, ma già con la versione "semplice" dell'algoritmo le scritture sono passate (per i numeri usati negli esempi fatti finora) dalle originali 1e9 a 1e6: mi sembra che questo sia uno di quei casi in cui "il meglio è nemico del bene". -- Daniele Varrazzo - Develer S.r.l. http://www.develer.com _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python