Как создать хеш-таблицу

Я хотел бы упомянуть, прежде чем продолжить, что я просмотрел другие вопросы, содержащие то же самое, на этом сайте, а также на других сайтах. Я надеюсь, что смогу получить хороший ответ, потому что у меня двоякая цель:

  1. Прежде всего, я хотел бы научиться создавать хеш-таблицу.
  2. Во-вторых, я считаю, что многие ответы о переполнении стека, как правило, предполагают определенный уровень знаний по предмету, которого часто нет, особенно для новичков. При этом я надеюсь отредактировать свое основное сообщение, включив в него более подробное объяснение процесса, как только я сам в нем разберусь.

К основному курсу:

Насколько я понимаю, хеш-таблица - это массив списков (или аналогичная структура данных), в котором в оптимальном случае предполагается как можно меньше коллизий, чтобы сохранить ее. хвалят 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.

Он относительно неэлегантен, но я все еще нахожусь на стадии «что это такое». Потерпите меня.

Есть что-нибудь еще? Я что-то пропустил или сделал что-то неправильно?

Спасибо

9
задан Joshua 20 November 2011 в 12:39
поделиться