fn: hash
[contents]

#### Syntax

The syntax for hash calls is:

f++:
hash{option}(string)


n++:
@hash{option}(string)


#### Description

The hash function is for getting the hash value of a string. It can take a single string parameter and returns the RS hash of the string, or takes a string parameter followed by a code indicating which hashing algorithm to use. The available codes are as follows:

code description
RS A simple hash function from Robert Sedgwicks Algorithms in C book, with some added some simple optimizations to the algorithm in order to speed up its hashing process
JS A bitwise hash function written by Justin Sobel
PJW based on work by Peter J. Weinberger of Renaissance Technologies. The book Compilers (Principles, Techniques and Tools) by Aho, Sethi and Ulman, recommends the use of hash functions that employ the hashing methodology found in this particular algorithm
ELF Similar to the PJW Hash function, but tweaked for 32-bit processors. It is a widley used hash function on UNIX based systems
BKDR This hash function comes from Brian Kernighan and Dennis Ritchie's book "The C Programming Language". It is a simple hash function using a strange set of possible seeds which all constitute a pattern of 31....31...31 etc, it seems to be very similar to the DJB hash function
SDBM This is the algorithm of choice which is used in the open source SDBM project. The hash function seems to have a good over-all distribution for many different data sets. It seems to work well in situations where there is a high variance in the MSBs of the elements in a data set
DJB An algorithm produced by Professor Daniel J. Bernstein and shown first to the world on the usenet newsgroup comp.lang.c. It is one of the most efficient hash functions ever published
DEK An algorithm proposed by Donald E. Knuth in The Art Of Computer Programming Volume 3, under the topic of sorting and search chapter 6.4
FNV Fowler–Noll–Vo is a non-cryptographic hash function created by Glenn Fowler, Landon Curt Noll, and Kiem-Phong Vo
BP Another non-cryptographic hash function, not a lot of information about it is available
AP An algorithm produced by Arash Partow (developer of these hasing algorithms along with ExprTk). He took ideas from all of the above hash functions making a hybrid rotative and additive hash function algorithm. He suggests there is not any real mathematical analysis explaining why one should use this hash function instead of the others described above other than the fact that he tired to resemble the design as close as possible to a simple LFSR. An empirical result which demonstrated the distributive abilities of the hash algorithm was obtained using a hash-table with 100003 buckets, hashing The Project Gutenberg Etext of Webster's Unabridged Dictionary, the longest encountered chain length was 7, the average chain length was 2, the number of empty buckets was 4579
code description

Note: The hash functions available with Nift come from General Purpose Hash Function Algorithms (GitHub) by Arash Partow (the same person who makes ExprTk).

#### Options

The following options are available for hash calls:

option description
f parameter specifies file to hash contents of
option description

#### f++ example

Examples of hash being used with f++:

hash("hello, world!")
hash("hello, world!", FNV)
hash{f}(file.txt, AP)

#### n++ example

Examples of hash being used with n++:

@hash("hello, world!")
@hash("hello, world!", FNV)
@hash{f}(file.txt, AP)

Sponsors