Content deleted Content added
Cybercobra (talk | contribs) →Examples: ce |
→See also: and many other things |
||
(31 intermediate revisions by 19 users not shown) | |||
Line 1:
{{distinguish|text=[[Index map]], a finding aid in cartography}}
'''Index mapping''' (or '''direct addressing''', or a '''trivial [[hash function]]''') in [[computer science]] describes using an [[array data structure|array]], in which each position corresponds to a key in the [[Universe (mathematics)|universe]] of possible values.<ref name=cormen>{{cite book|last1=Cormen|first1=Thomas H.|title=Introduction to algorithms|date=2009|publisher=MIT Press|___location=Cambridge, Mass.|isbn=9780262033848|pages=253–255|edition=3rd|url=https://mitpress.mit.edu/books/introduction-algorithms|accessdate=26 November 2015}}</ref>
==Applicable arrays== ▼
The technique is most effective when the universe of keys is reasonably small, such that [[memory allocation|allocating]] an array with one position for every possible key is affordable.
Its effectiveness comes from the fact that an arbitrary position in an array can be examined in [[time complexity#Constant time|constant time]].
* day in the month (1-31)▼
There are many practical examples of data whose valid values are restricted within a small range. A trivial hash function is a suitable choice when such data needs to act as a lookup key. Some examples include:
* day of the week (1-7)▼
* [[month]] in the year (1–12)
* human lifespan (0-130) - eg. lifecover actuary tables, fixed term mortgage ▼
* [[ASCII]] characters (0–127), encompassing common mathematical operator symbols, digits, punctuation marks, and English language alphabet
==Examples==
===Avoid branching===
Roger Sayle gives an example<ref>{{cite journal|last1=Sayle|first1=Roger Anthony|title=A Superoptimizer Analysis of Multiway Branch Code Generation|journal=Proceedings of the GCC Developers' Summit|date=June 17, 2008|pages=103–116|url=https://www.nextmovesoftware.com/technology/SwitchOptimization.pdf|accessdate=26 November 2015}}</ref> of eliminating a [[multiway branch]] caused by a [[switch statement]]:
<syntaxhighlight lang="c++">
inline bool HasOnly30Days(int m)
{
switch (m) {
case 4: // April
case 6: // June
case 9: // September
case 11: // November
return true;
default:
return false;
▲ }
}
</syntaxhighlight>
Which can be replaced with a table lookup:
<syntaxhighlight lang="c++">
inline bool HasOnly30Days(int m)
{
static const
return T[m-1];
}
</syntaxhighlight>
==References==
{{Reflist}}
[[Category:Arrays]]
[[Category:Associative arrays]]
[[Category:Articles with example C code]]
[[Category:Hashing
[[Category:Search algorithms]]
|