Histoire de la comparaison de vitesse d'une sorte de valeur numérique et de chaîne de caractères (inachevée))

Je n'avais pas le nombre de collaborations pouvant être liées à l'utilisateur avec l'API Qiita, alors j'ai créé Utility by me-même et j'ai essayé d'implémenter la sortie de classement. est.

Étant donné que le résultat de l'acquisition est renvoyé dans le dictionnaire du nom d'utilisateur et du nombre de collaborations, et que le nombre de collaborations est également traité comme un caractère, la fonction intégrée triée ne fonctionne pas comme prévu.

sort.py


import GetQiitaContribution

d = GetQiitaContribution.getContributionByFile("account.txt")

for v in sorted(d.values()):
    print  (v)
python3 ./sort.py
0
142
23
235
309
4
42

J'étudie Python ici, alors j'ai essayé différentes choses.

Tout d'abord, corrigez l'utilitaire

En tant que valeur du dictionnaire, je l'ai modifié pour que le nombre de contributions soit stocké sous forme de valeur numérique, et j'ai essayé d'effectuer le tri comme prévu.

python


#            dict[username] = getContributionByName(username)
            dict[username] = int(getContributionByName(username))
time python3 ./sort.py
0
4
23
42
142
235
309

real	0m4.177s
user	0m0.101s
sys	0m0.026s

real	0m3.636s
user	0m0.111s
sys	0m0.028s

real	0m3.377s
user	0m0.108s
sys	0m0.029s

Ici, j'ai comparé la version de stockage de chaînes d'origine avec le temps qu'il faut pour s'exécuter.

time python3 ./sort.py
0
142
23
235
309
4
42

real	0m4.298s
user	0m0.115s
sys	0m0.045s

real	0m3.535s
user	0m0.100s
sys	0m0.025s

real	0m3.606s
user	0m0.100s
sys	0m0.025s

Je m'inquiète de la différence de vitesse entre le tri des nombres et le tri des chaînes en Python

Je me demandais quelle serait la différence de vitesse entre le tri des caractères et le tri numérique, mais ce n'était pas une comparaison de vitesse qui coupait uniquement le tri (je ne peux rien dire car ce n'est pas profilé, mais ça prend du traitement La plupart du temps semble être consacré au grattage effectué par l'utilitaire), et la quantité de données triées n'est pas un volume important, ce n'est donc pas utile.

J'ai donc décidé de faire une comparaison à grande échelle. J'ai fait une liste de nombres et une liste de chaînes de 1 à 1048576 (nombre maximum de lignes dans Excel pour Mac) et j'ai essayé de trier chacune.

Valeur numérique

real	0m12.400s
user	0m9.455s
sys	0m2.412s

real	0m12.522s
user	0m9.444s
sys	0m2.493s

real	0m12.500s
user	0m9.718s
sys	0m2.288s

Chaîne

real	0m14.583s
user	0m9.772s
sys	0m3.828s

real	0m12.000s
user	0m9.259s
sys	0m2.200s

real	0m12.183s
user	0m9.430s
sys	0m2.249s

Apparemment, lorsque le nombre d'éléments est d'environ 1 million, il n'y a pas beaucoup de différence dans la vitesse de tri des nombres et des chaînes.

Conclusion

Il semble que la vitesse ne soit pas de l'ordre de 7 chiffres, qu'il s'agisse d'une chaîne de caractères ou d'une valeur numérique. LL s'est généralisé et se démarque beaucoup, mais je suis un peu surpris de devenir programmeur de rotor, que ce soit l'évolution du matériel ou l'évolution de LL, mais j'aimerais terminer cet article en vrac ici.

Merci à ceux qui ont lu jusqu'ici.

Recommended Posts

Histoire de la comparaison de vitesse d'une sorte de valeur numérique et de chaîne de caractères (inachevée))
Comparaison de vitesse de murmurhash3, md5 et sha1
[Django 2.2] Trier et obtenir la valeur de la destination de la relation
Date et heure ⇔ chaîne de caractères
Différenciation du tri et généralisation du tri
Comparaison d'Apex et de Lamvery
Comparaison de vitesse du traitement de texte intégral de Wiktionary avec F # et Python
Comparaison de vitesse entre CPython et PyPy
Comparaison de la vitesse de la perspective XML Python
J'ai remplacé le calcul numérique de Python par Rust et comparé la vitesse
[Python] Résumé de la conversion entre les chaînes de caractères et les valeurs numériques (code ascii)