Skip to content

Instantly share code, notes, and snippets.

@faisalmansoor
Last active August 29, 2015 14:22
Show Gist options
  • Save faisalmansoor/66dc353e049158f7027a to your computer and use it in GitHub Desktop.
Save faisalmansoor/66dc353e049158f7027a to your computer and use it in GitHub Desktop.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Numerics;
using LinqStatistics;
namespace GuidHashCodeTest
{
class Program
{
static void Main(string[] args)
{
const int MaxGroups = 1024;
var groupCounter = new Dictionary<string, int>();
for (int guidCount = 0; guidCount < 100000000; guidCount++)
{
var bytes = Guid.NewGuid().ToByteArray();
var a = new BigInteger(bytes);
string bucket = (new BigInteger(Guid.NewGuid().ToByteArray()) % MaxGroups).ToString();
int currentValue;
if (groupCounter.TryGetValue(bucket, out currentValue))
{
groupCounter[bucket] = ++currentValue;
}
else
{
groupCounter[bucket] = 1;
}
if (guidCount > 0 && guidCount % 1000000 == 0)
{
var values = groupCounter.Values;
if (true)
{
Console.WriteLine(
"Guid={0}, Spread={1}, Min={2} Max={3} StandDev={4}" ,
guidCount,
groupCounter.Values.Max()-groupCounter.Values.Min(),
groupCounter.Values.Min(),
groupCounter.Values.Max(),
values.StandardDeviation());
}
}
}
}
}
}
Guid=1000000, Spread=533, Min=422 Max=955 StandDev=24.2159649059843
Guid=2000000, Spread=1074, Min=879 Max=1953 StandDev=37.6685441135815
Guid=3000000, Spread=1558, Min=1353 Max=2911 StandDev=49.2657645011392
Guid=4000000, Spread=2053, Min=1807 Max=3860 StandDev=60.8201522451166
Guid=5000000, Spread=2590, Min=2252 Max=4842 StandDev=73.1386340083162
Guid=6000000, Spread=3097, Min=2740 Max=5837 StandDev=84.2982037366099
Guid=7000000, Spread=3543, Min=3228 Max=6771 StandDev=94.8445664932757
Guid=8000000, Spread=3998, Min=3716 Max=7714 StandDev=105.125139319569
Guid=9000000, Spread=4573, Min=4170 Max=8743 StandDev=116.948080835909
Guid=10000000, Spread=5077, Min=4671 Max=9748 StandDev=128.111570606031
Guid=11000000, Spread=5591, Min=5128 Max=10719 StandDev=138.760693242179
Guid=12000000, Spread=6095, Min=5606 Max=11701 StandDev=149.811574611938
Guid=13000000, Spread=6594, Min=6091 Max=12685 StandDev=160.68179183994
Guid=14000000, Spread=7098, Min=6549 Max=13647 StandDev=171.214790804764
Guid=15000000, Spread=7606, Min=7039 Max=14645 StandDev=182.277517227838
Guid=16000000, Spread=8178, Min=7489 Max=15667 StandDev=194.090818846229
Guid=17000000, Spread=8643, Min=7986 Max=16629 StandDev=204.694922963759
Guid=18000000, Spread=9174, Min=8455 Max=17629 StandDev=215.866966549348
Guid=19000000, Spread=9661, Min=8931 Max=18592 StandDev=226.467955704695
Guid=20000000, Spread=10131, Min=9397 Max=19528 StandDev=236.591916475363
Guid=21000000, Spread=10571, Min=9926 Max=20497 StandDev=246.971511398855
Guid=22000000, Spread=11020, Min=10395 Max=21415 StandDev=256.535216592378
Guid=23000000, Spread=11552, Min=10875 Max=22427 StandDev=267.978735382289
Guid=24000000, Spread=12034, Min=11380 Max=23414 StandDev=279.095188763765
Guid=25000000, Spread=12559, Min=11839 Max=24398 StandDev=290.271895284669
Guid=26000000, Spread=13065, Min=12290 Max=25355 StandDev=300.807782871955
Guid=27000000, Spread=13481, Min=12795 Max=26276 StandDev=310.299102495427
Guid=28000000, Spread=13976, Min=13233 Max=27209 StandDev=320.42649644947
Guid=29000000, Spread=14417, Min=13727 Max=28144 StandDev=330.250779081132
Guid=30000000, Spread=14879, Min=14236 Max=29115 StandDev=340.602955417513
Guid=31000000, Spread=15341, Min=14706 Max=30047 StandDev=350.660012015569
Guid=32000000, Spread=15813, Min=15194 Max=31007 StandDev=361.228122120853
Guid=33000000, Spread=16273, Min=15676 Max=31949 StandDev=371.17516728144
Guid=34000000, Spread=16823, Min=16137 Max=32960 StandDev=382.454776527575
Guid=35000000, Spread=17353, Min=16586 Max=33939 StandDev=393.375159384613
Guid=36000000, Spread=17855, Min=17084 Max=34939 StandDev=404.694705960991
Guid=37000000, Spread=18307, Min=17582 Max=35889 StandDev=414.842384485201
Guid=38000000, Spread=18778, Min=18100 Max=36878 StandDev=425.712218723308
Guid=39000000, Spread=19316, Min=18554 Max=37870 StandDev=436.910837450093
Guid=40000000, Spread=19810, Min=19028 Max=38838 StandDev=447.625319720664
Guid=41000000, Spread=20337, Min=19528 Max=39865 StandDev=459.272239319828
Guid=42000000, Spread=20749, Min=20034 Max=40783 StandDev=468.909183647807
Guid=43000000, Spread=21221, Min=20525 Max=41746 StandDev=479.71513645888
Guid=44000000, Spread=21662, Min=21028 Max=42690 StandDev=489.795216225918
Guid=45000000, Spread=22172, Min=21524 Max=43696 StandDev=501.519149344281
Guid=46000000, Spread=22667, Min=22005 Max=44672 StandDev=512.507062459962
Guid=47000000, Spread=23179, Min=22492 Max=45671 StandDev=523.998462754154
Guid=48000000, Spread=23661, Min=22978 Max=46639 StandDev=534.51875968597
Guid=49000000, Spread=24096, Min=23451 Max=47547 StandDev=543.902078609277
Guid=50000000, Spread=24516, Min=23958 Max=48474 StandDev=553.460058677764
Guid=51000000, Spread=25075, Min=24400 Max=49475 StandDev=564.991286866197
Guid=52000000, Spread=25677, Min=24853 Max=50530 StandDev=577.503141901263
Guid=53000000, Spread=26157, Min=25361 Max=51518 StandDev=588.402902746762
Guid=54000000, Spread=26643, Min=25850 Max=52493 StandDev=599.384230001798
Guid=55000000, Spread=27134, Min=26326 Max=53460 StandDev=610.055057230831
Guid=56000000, Spread=27674, Min=26810 Max=54484 StandDev=621.626780562663
Guid=57000000, Spread=28149, Min=27285 Max=55434 StandDev=631.802318871142
Guid=58000000, Spread=28680, Min=27776 Max=56456 StandDev=643.752176831818
Guid=59000000, Spread=29118, Min=28254 Max=57372 StandDev=653.10326812908
Guid=60000000, Spread=29602, Min=28733 Max=58335 StandDev=663.724181297558
Guid=61000000, Spread=30102, Min=29235 Max=59337 StandDev=674.95817897258
Guid=62000000, Spread=30591, Min=29687 Max=60278 StandDev=685.062484527966
Guid=63000000, Spread=31049, Min=30183 Max=61232 StandDev=695.43897222204
Guid=64000000, Spread=31509, Min=30664 Max=62173 StandDev=705.196038537186
Guid=65000000, Spread=32035, Min=31123 Max=63158 StandDev=716.19355147947
Guid=66000000, Spread=32488, Min=31652 Max=64140 StandDev=727.07627626655
Guid=67000000, Spread=32947, Min=32116 Max=65063 StandDev=736.695674055125
Guid=68000000, Spread=33467, Min=32584 Max=66051 StandDev=747.643858897487
Guid=69000000, Spread=33937, Min=33074 Max=67011 StandDev=758.099136724536
Guid=70000000, Spread=34440, Min=33561 Max=68001 StandDev=769.241112393361
Guid=71000000, Spread=34998, Min=34030 Max=69028 StandDev=781.318689919192
Guid=72000000, Spread=35498, Min=34482 Max=69980 StandDev=791.587575482056
Guid=73000000, Spread=35911, Min=34968 Max=70879 StandDev=800.764636037027
Guid=74000000, Spread=36374, Min=35468 Max=71842 StandDev=811.391879791451
Guid=75000000, Spread=36852, Min=35965 Max=72817 StandDev=822.054946487077
Guid=76000000, Spread=37343, Min=36458 Max=73801 StandDev=833.02699209421
Guid=77000000, Spread=37879, Min=36958 Max=74837 StandDev=845.039283077891
Guid=78000000, Spread=38383, Min=37432 Max=75815 StandDev=855.888826999291
Guid=79000000, Spread=38953, Min=37911 Max=76864 StandDev=868.097693773857
Guid=80000000, Spread=39507, Min=38387 Max=77894 StandDev=879.931327173799
Guid=81000000, Spread=40013, Min=38833 Max=78846 StandDev=890.387947796322
Guid=82000000, Spread=40530, Min=39341 Max=79871 StandDev=902.410147719293
Guid=83000000, Spread=40998, Min=39844 Max=80842 StandDev=913.21003611546
Guid=84000000, Spread=41490, Min=40298 Max=81788 StandDev=923.40049118821
Guid=85000000, Spread=42002, Min=40777 Max=82779 StandDev=934.450279074772
Guid=86000000, Spread=42503, Min=41261 Max=83764 StandDev=945.541565719519
Guid=87000000, Spread=42979, Min=41733 Max=84712 StandDev=955.819414089333
Guid=88000000, Spread=43521, Min=42181 Max=85702 StandDev=966.884331754953
Guid=89000000, Spread=43959, Min=42681 Max=86640 StandDev=976.794744663917
Guid=90000000, Spread=44414, Min=43188 Max=87602 StandDev=987.355276884588
Guid=91000000, Spread=44935, Min=43635 Max=88570 StandDev=998.051870878435
Guid=92000000, Spread=45375, Min=44132 Max=89507 StandDev=1008.04272842343
Guid=93000000, Spread=45940, Min=44626 Max=90566 StandDev=1020.7285975372
Guid=94000000, Spread=46434, Min=45118 Max=91552 StandDev=1031.73841946395
Guid=95000000, Spread=46958, Min=45604 Max=92562 StandDev=1043.16512131862
Guid=96000000, Spread=47424, Min=46116 Max=93540 StandDev=1053.91574107302
Guid=97000000, Spread=47944, Min=46619 Max=94563 StandDev=1065.79704008788
Guid=98000000, Spread=48454, Min=47081 Max=95535 StandDev=1076.43381215448
Guid=99000000, Spread=48938, Min=47583 Max=96521 StandDev=1087.5788688031
Press any key to continue . . .
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment