Tu cherches quoi ? Tu as quelque chose à proposer sans avoir d'info sur la forme des lignes de logs?
Je n'ignore rien, l'extraction de l'IP du log peut être coûteuse, sa recherche en O(n) l'est au moins autant... sinon beaucoup plus s'il y a beaucoup d'adresses dans sa "grosse liste d'addresses IP". S'il a quelques milliers d'adresses IP dans sa liste, alors une recherche séquentielle est énormément plus coûteuse qu'une opération d'extraction.
Mais si Kwiknclean donne la forme de ses logs, il y aura probablement quelqu'un pour l'aider à écrire la regexp optimale qui va bien (peut-être pas moi sur les regexp).
J'ai modifié l'algo pour comparer la recherche en séquentielle (ie. dans la liste) à la recherche dans le set. Pour rappel, l'équivalent de la "gosse liste d'IPs" fait ~140000 entrées.
#!/usr/bin/python3# -*- encoding: utf-8 -*-importpprintimporttime# Fichier 1.5Mo, lu en une seule fois pour pouvoir reboucler dessus.withopen("/usr/share/dict/french",encoding='utf-8')asf:mots=f.read().splitlines()print("Nombre de mots:",len(mots))smots=set(mots)# Fichier 917K. Lu en une seule fois, mais on pourrait faire au fur et à mesure.withopen("/usr/share/dict/american-english",encoding='utf-8')asf:eng=f.read().splitlines()# Comptage des mots anglais présents dans le français.# En utilisant la liste de mots:t=time.time()cpt=0formineng:ifminmots:cpt+=1temps=time.time()-tprint("Mots communs:",cpt,"en",temps,"par recherche dans la liste.")# En utilisant le set de mots:t=time.time()cpt=0formineng:ifminsmots:cpt+=1temps=time.time()-tprint("Mots communs:",cpt,"en",temps,"par recherche dans le set.")
Et ça donne (temps en secondes):
pointal@soupir:~$ python3 collisions.py
Nombre de mots: 139719
Mots communs: 6139 en 350.167192697525 par recherche dans la liste.
Mots communs: 6139 en 0.022248506546020508 par recherche dans le set.
Sans commentaire.
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
[^] # Re: Le type "set" ?
Posté par lolop (site web personnel) . En réponse au message Algo ; Evitez les doubles "boucles" ?. Évalué à 3.
Tu cherches quoi ? Tu as quelque chose à proposer sans avoir d'info sur la forme des lignes de logs?
Je n'ignore rien, l'extraction de l'IP du log peut être coûteuse, sa recherche en O(n) l'est au moins autant... sinon beaucoup plus s'il y a beaucoup d'adresses dans sa "grosse liste d'addresses IP". S'il a quelques milliers d'adresses IP dans sa liste, alors une recherche séquentielle est énormément plus coûteuse qu'une opération d'extraction.
Mais si Kwiknclean donne la forme de ses logs, il y aura probablement quelqu'un pour l'aider à écrire la regexp optimale qui va bien (peut-être pas moi sur les regexp).
J'ai modifié l'algo pour comparer la recherche en séquentielle (ie. dans la liste) à la recherche dans le set. Pour rappel, l'équivalent de la "gosse liste d'IPs" fait ~140000 entrées.
Et ça donne (temps en secondes):
Sans commentaire.
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN