11
votes

Transformer efficacement un obstacle à une représentation hexagonale

J'ai besoin de pouvoir donner la représentation hexagonale d'un hachage SHA512. Peut-être que je n'ai tout simplement pas l'air assez difficile, mais je pouvais trouver des fonctions sur Hackage pour le faire. J'ai donc écrit une implémentation en utilisant non enfoncé . C'est certainement assez rapide à mes besoins, mais je me demande si quelqu'un connaît une approche plus rapide.

J'ai mis ma mise en œuvre sur GitHub comme un gist: https://gist.github.com/2356925 . Le fichier comprend également une implémentation simple basée sur numeric.showhex , un test rapide et un critère de référence. Mes résultats actuels de la version simple par rapport à la version de xxx

Quelqu'un veut faire un coup de poignard pour l'améliorer? < / p>


3 Réponses :


8
votes

Aller au niveau inférieur,

benchmarking simple
mean: 2.603306 ms, lb 2.583054 ms, ub 2.629212 ms, ci 0.950
std dev: 116.5341 us, lb 81.61409 us, ub 191.3293 us, ci 0.950
found 7 outliers among 100 samples (7.0%)
  2 (2.0%) low severe
  3 (3.0%) low mild
  1 (1.0%) high severe
variance introduced by outliers: 42.490%
variance is moderately inflated by outliers

benchmarking unfoldrN_MS1
mean: 83.19349 us, lb 82.88474 us, ub 83.58283 us, ci 0.950
std dev: 1.771460 us, lb 1.486104 us, ub 2.174729 us, ci 0.950
found 14 outliers among 100 samples (14.0%)
  12 (12.0%) high mild
  2 (2.0%) high severe
variance introduced by outliers: 14.225%
variance is moderately inflated by outliers

benchmarking LowHex
mean: 24.50564 us, lb 24.41683 us, ub 24.61241 us, ci 0.950
std dev: 497.1908 ns, lb 415.6366 ns, ub 609.7594 ns, ci 0.950
found 5 outliers among 100 samples (5.0%)
  5 (5.0%) high mild
variance introduced by outliers: 13.256%
variance is moderately inflated by outliers


1 commentaires

Belle vitesse. Il ne semble que rien de plus rapidement, je suppose que ceci gagne. Pouvez-vous penser à des paquets là où il serait logique d'ajouter cette fonction?



2
votes

On dirait que je viens d'utiliser xxx

la dernière fois que je voulais faire ça. C'était en conjonction avec la bibliothèque Crypto.hash IIRC. Je doute que la performance est si grande, mais comparée à la fonction (lente) SHA512 elle-même, pourquoi la conversion hexagone serait-elle un problème?


0 commentaires

6
votes

La fonction que vous recherchez est data.bytestring.builder.bytestringhex code> (ou sa fonction jumelle pour les bytestrings paresseux), qui est fourni par le nouveau constructeur bytactring. I étendue vos points de repère et obtenez les résultats suivants sur ma machine:

benchmarking size 5000/simple
mean: 2.469847 ms, lb 2.440422 ms, ub 2.522850 ms, ci 0.950
std dev: 196.5903 us, lb 116.8811 us, ub 318.4720 us, ci 0.950
found 16 outliers among 100 samples (16.0%)
  3 (3.0%) low severe
  2 (2.0%) low mild
  10 (10.0%) high severe
variance introduced by outliers: 70.721%
variance is severely inflated by outliers

benchmarking size 5000/unfoldrN_MS1
mean: 102.6075 us, lb 101.7695 us, ub 104.0159 us, ci 0.950
std dev: 5.468574 us, lb 3.681120 us, ub 8.080665 us, ci 0.950
found 16 outliers among 100 samples (16.0%)
  6 (6.0%) high mild
  10 (10.0%) high severe
variance introduced by outliers: 51.455%
variance is severely inflated by outliers

benchmarking size 5000/byteStringHexFixed
mean: 5.675204 us, lb 5.636296 us, ub 5.750211 us, ci 0.950
std dev: 264.3726 ns, lb 140.9738 ns, ub 398.8494 ns, ci 0.950
found 5 outliers among 100 samples (5.0%)
  4 (4.0%) high severe
variance introduced by outliers: 44.476%
variance is moderately inflated by outliers


0 commentaires