[perl]Optimisation d'algorithme

Fermé
fxtaa Messages postés 1050 Date d'inscription mardi 20 octobre 2009 Statut Membre Dernière intervention 2 avril 2015 - 19 nov. 2010 à 15:21
 Utilisateur anonyme - 19 nov. 2010 à 16:14
Bonjour,


Je possède un fichier avec environ 7000 lignes. Le but du programme est de controler que chaque ligne est unique.

Actuellement,
j'ouvre mon fichier que je met dans un tableau
je prend la premiere ligne
la compare à toutes les lignes de mon tableau (excepté celle sur laquelle je suis)
puis je prend la seconde ligne et je recommence....

En gros je fais un while dans un while. Un fichier de 7000 lignes environ met un peu plus de 5 minutes à être traités... Quelqu'un aurait une idée pour optimiser tout ça ?

A voir également:

1 réponse

Eventuellement tu peux faire le test par cellule et non par ligne, mais je ne suis pas sur que ça gagne du temps.

De plus, lorsque tu as tester la ligne 1 et que tu testes la 2, plus besoin de tester la 1 puis pour la 3 ni la 2 ni la 1 etc...
Ca devrait pouvoir te faire gagner un peu je pense.

Pastafarien en puissance!!!
1
fxtaa Messages postés 1050 Date d'inscription mardi 20 octobre 2009 Statut Membre Dernière intervention 2 avril 2015 74
19 nov. 2010 à 15:38
Ah exact, pour ta seconde remarque. Ce qui voudrait dire qu'arrivé à la derniere ligne, je n'ai en fait aucune ligne à tester.

Pour en revenir a ta premiere remarque : Qu est ce que le traitement par cellule ?
0
Au lieu de tester que ta ligne est entièrement similaire, testes si une des cellule et différente.
D'abord ligne1 colonne1 puis l1 c2 etc...

En gros testes case par case (après je ne sais pas exactement la gueule qu'a ton tableau du coup...).
0
fxtaa Messages postés 1050 Date d'inscription mardi 20 octobre 2009 Statut Membre Dernière intervention 2 avril 2015 74
19 nov. 2010 à 16:12
Ok, comme ça je n'ai pas besoin de tester toutes la ligne d'un coup mais uniquement la première partie.
C'est une idée mais bon quand je dit tableau, c'est un tableau à une entrée et le test de regexp ne prendra pas plus de temps pour une ligne de 20 caractère ou de 5.
Mais pas mal comme idée ^^.

J'ai testé le coup des lignes ca marche pas mal du tout. De 6 minutes 20 de traitement je suis passé à 3 minutes 15. T'as réussit à diminuer de moitié le temps de traitement ;).

Good job! Merci.

Ps: je laisse ouvert au cas où d'autres personnes aient d'autres idées ^^.
0
C'est logique, vu qu'en supprimant une ligne de test à chaque test, tu as au bout de compte deux fois moins de test ^^
Content d'avoir pu t'aider.
Si j'ai une autre idée je te tient au jus.
0