[Python] Algoritmo in CSV

Gianluca Esposito giaespo a gmail.com
Ven 3 Set 2010 19:06:31 CEST


Il 03 settembre 2010 17:50, enrico franchi <enrico.franchi a gmail.com>
ha scritto:
> 2010/9/3 Pietro Battiston <me a pietrobattiston.it>:
>> Il giorno ven, 03/09/2010 alle 15.58 +0200, Giuseppe Amato ha scritto:
>>> Ti conviene ordinare e prendere l'ultimo per ogni colonna utlizzando
>>> sort(cmp) sulle colonne. L'algoritmo di sort è già ottimizzato rispetto
>>> ai confronti che hai previsto tu. Se hai bisogno anche dell'indice del
>>> campo butti tutto in un dizionario del tipo {<campo>:<indice>} però devi
>>> fare attenzione alle duplicazioni, che comunque dovrai gestire nella
>>> ricerca del massimo
>>
>> Ehm... no, direi che così peggiora le cose.
>
> Potrebbe essere. La teoria dice che hai ragione tu; in pratica quello
> che succede non lo so (ma ritengo probabile che peggiora come
> prevedi).
>
>
> Io suggerisco una rivoluzione: visto che appunto non puo' che fare mxn
> confronti,
> perche' non guarda se riesce ad inserirsi nell'oggetto che legge il
> file csv in modo che
> si tiene traccia del piu' grosso mano mano che li legge?
>
> Praticamente *almeno* non fa due volte il giro su tutti gli elementi e
> si limita ad aggiungere una piccolissima e poco costosa operazione
> alla fatica di leggere tutto il file.
>

Visto che il problema è facilmente divisibile in sottoproblemi, per
ottimizzare, suggerirei a questo punto il multiprocessing, magari
dividi quelle 200 colonne in x parti e le dai in pasto a x processi
che lavorano in parallelo.Per esempio per un quadcore usi 4 processi.
Ovviamente il multiprocessing ha dei tempi per creare i processi e per
la comunicazioni tra processi etc.., quindi può dare un risultato solo
se l'elaborazione è veramente lunga. Nel tuo caso i processi non
devono nemmeno comunicare tra loro, ma devi solo aggregare i risultati
alla fine , per cui....

Ma sono tutte soluzioni che non diminuiscono la complessità del
problema, che è lineare.

Ciao

Gianluca Esposito


Maggiori informazioni sulla lista Python