Home

Hash Tables

Hash tables use a lot of memory for faster operations, best case O(1).

Resizing

Collision handling

Common hash functions

int hashMiddleSquare(int value) {
	const int numOfBits = 24;
	int square = value * value;

	int lowBitsToRemove = (sizeof(int) - numOfBits) / 2;

	// This is usually done in binary instead of decimal due to the simplification
	int middleBits = value >> lowBitsToRemove; // Shift off lower bits
	middleBits = middleBits & (~0 >> (32 - numOfBits));

	return middleBits;
}
// index = (a * key + b) % size
	// a, b, and size are all prime
int hashMultiplicative(string value) {
	int hash = 5381;
	const int multiplier = 33; // Usually prime
	for (int i = 0; i < value.size(); i++) {
		char c = value.at(i);
		hash = (hash * multiplier) + c;
	}
	return hash;
}