Я хотел бы упомянуть, прежде чем продолжить, что я просмотрел другие вопросы, содержащие то же самое, на этом сайте, а также на других сайтах. Я надеюсь, что смогу получить хороший ответ, потому что у меня двоякая цель:
К основному курсу:
Насколько я понимаю, хеш-таблица - это массив списков (или аналогичная структура данных), в котором в оптимальном случае предполагается как можно меньше коллизий, чтобы сохранить ее. хвалят O (1) сложность. Вот мой текущий процесс:
Итак, мой первый шаг - создать массив указателей:
Elem ** table;
table = new Elem*[size];//size is the desired size of the array
Мой второй шаг - создать хеширующую функцию (очень простую).
int hashed = 0;
hashed = ( atoi( name.c_str() ) + id ) % size;
//name is a std string, and id is a large integer. Size is the size of the array.
Моим третьим шагом было бы создать что-то для обнаружения столкновений, и это та часть, над которой я сейчас работаю.
Вот какой-то псевдокод:
while( table[hashedValue] != empty )
hashedValue++
else
put in the list at that index.
Он относительно неэлегантен, но я все еще нахожусь на стадии «что это такое». Потерпите меня.
Есть что-нибудь еще? Я что-то пропустил или сделал что-то неправильно?
Спасибо