Например, ако пишете клас речник, колизиите са редки, но съществуват. В резултат на това трябва да съхраните ключа, за да сте сигурни, че когато намерите своя ключ в хеш-таблицата, той е правилният и не е сблъсък.
Понякога ключовете са дълги и обикновено са низове, така че всеки ключ може да бъде над 40 байта, в сравнение с това, ако беше просто хеш код. Ами ако съхраненият ключ е хеширан обект, но използвайки малко по-различен алгоритъм за хеширане, с различни прости числа? Тогава шансовете за сблъсък биха били (1/(2^32)) * (1/(2^32))
.
Можете дори да имате друг алгоритъм за хеширане и вместо това да съхранявате този хеш, така че шансовете за сблъсък биха били (1/(2^32)) * (1/(2^32)) * (1/(2^32))
. Очевидно все още може да се случи сблъсък, но шансовете са толкова ниски и спестявате толкова много памет, като трябва да съхранявате само 4 байта за ключ вместо над 32 байта.
Предполагам, че това все още не е приемливо, нали, защото все още има ШАНС, но също така има шанс нечия RAM случайно да се преобърне малко и да стане син екран, а това изглежда толкова малко вероятно, че е изкушаващо да не се приложи. Има ли алтернативи или малкият шанс все пак не си струва?
dictionary
е, че имате известен уникален индексатор и искате да намерите стойността, съхранена в този индекс. Ако имате някакъв нестандартен хеш, който можете да получите само от самия обект, вероятно нямате нужда от речник, а само от списък. - person ps2goat   schedule 03.03.2015(1/(2^32)) * (1/(2^32)) * (1/(2^32)) * (1/(2^32)) * (1/(2^32)) * (1/(2^32))
или1.59 × 10^-58
Очевидно хеширането не е идеално еднакво, така че аз взе много порядъци, за да компенсира. - person John Smith   schedule 03.03.2015