Difference between revisions of "Hash Table"

From Chessprogramming wiki
Jump to: navigation, search
Line 103: Line 103:
 
* [https://www.stmintz.com/ccc/index.php?id=214125 Non power of two hash table sizes] by [[Alvaro Cardoso|Alvaro Jose Povoa Cardoso]], [[CCC]], February 18, 2002
 
* [https://www.stmintz.com/ccc/index.php?id=214125 Non power of two hash table sizes] by [[Alvaro Cardoso|Alvaro Jose Povoa Cardoso]], [[CCC]], February 18, 2002
 
==2005 ...==
 
==2005 ...==
 +
* [https://www.stmintz.com/ccc/index.php?id=484874 Hash table and O(1)] by [[Dann Corbit]], [[CCC]], February 06, 2006
 
* [http://www.hiarcs.net/forums/viewtopic.php?p=2921 What is the Difference between Mainhash, Evalhash, Pawnhash?] by Thomas Wallendik, [[Computer Chess Forums|Hiarcs Forum]], October 13, 2007
 
* [http://www.hiarcs.net/forums/viewtopic.php?p=2921 What is the Difference between Mainhash, Evalhash, Pawnhash?] by Thomas Wallendik, [[Computer Chess Forums|Hiarcs Forum]], October 13, 2007
 
* [http://www.talkchess.com/forum/viewtopic.php?topic_view=threads&p=285407 Cache pollution when reading/writing hash table] by [[Marco Costalba]], [[CCC]], August 09, 2009
 
* [http://www.talkchess.com/forum/viewtopic.php?topic_view=threads&p=285407 Cache pollution when reading/writing hash table] by [[Marco Costalba]], [[CCC]], August 09, 2009

Revision as of 20:03, 8 October 2019

Home * Programming * Data * Hash Table

A small phone book as a hash table [1]

A Hash Table, or a Hash Map, is a data structure that associates identifiers or keys (names, chess positions) with values (i. e. phone number, score of a position). A hash function is used for turning the key into a relatively small integer, the hash, that serves as an index into an array.

In a well-dimensioned hash table, the average cost for each lookup is independent of the number of elements stored in the table. In general programming as well in computer chess, hash tables often serve as cache for once calculated values, to save relative expensive computations over and over again.

Perfect Hashing

A perfect hash function [2]

If all of the keys are known at compile or initialization time and their cardinality is reasonable small, a perfect hash table can be created, in which there will be no collisions, since each key has an unique index. Opposed to Minimal Perfect Hashing, the lookup array contains either gaps or multiple entries.

Applications in computer chess are hashing of masked occupied bitboards, to map for instance attack sets of sliding pieces (rooks, bishops) on a particular square, or pawn shield stuff. Another application, despite a reversible hash function, is a precomputed table indexed by some material key, likely an incremental updated dot-product of all piece-type counts in some fixed order, by a vector of cumulated maximum count products of pieces ordered below, usually ignoring unusual material configurations due to promotions [3] . Persistent, or on the fly generated Endgame Tablebases and Bitbases containing perfect knowledge by retrograde analyses of certain material constellations with a few pieces in late endings might be considered as a kind of perfect hashing as well.

Minimal Perfect Hashing

Minimal perfect hash function [4]

If the hash array has no gaps and unique, distinct values, so called Minimal Perfect Hashing is applied, like in following bitboard hashing for bitscan purpose or determining pre-calculated move lists by move target sets of knights and king.

Search Tables

The classical hash table implementation in computer chess are the transposition tables, indexed by Zobrist- or BCH keys of the position, modulo number of entries inside the table, to store search results, evaluation, pawn structure related stuff and repetitions.

Class Libraries

Publications

1968

1970 ...

1980 ...

1990 ...

2000 ...

2010 ...

Forum Posts

1998 ...

2000 ...

2005 ...

2010 ...

2015 ...

External Links

Secure Hash Algorithm from Wikipedia
Merkle–Damgård construction from Wikipedia
Koorde based on Chord and De Bruijn Sequence
Pierre Courbois, Jasper van 't Hof, Toto Blanke, Sigi Busch

References

Up one Level