Прежде чем продолжить, я хотел бы упомянуть, что я рассмотрел другие вопросы, задающие то же самое на этом сайте, а также на других сайтах. Я надеюсь, что смогу получить хороший ответ, потому что моя цель двояка:
- Прежде всего, я хотел бы узнать, как создать хеш-таблицу.
- Во-вторых, я обнаружил, что многие ответы о переполнении стека, как правило, предполагают определенный уровень знаний по предмету, которого часто нет, особенно для новых типов. При этом я надеюсь отредактировать свое основное сообщение, включив в него подробное объяснение процесса, как только я это выясню сам.
На основное блюдо:
Насколько я понимаю, хеш-таблица - это массив списков (или схожей структуры данных), который, как ожидается, оптимально будет иметь как можно меньше коллизий, чтобы сохранить сложность 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.
Это относительно не элегантно, но я все еще на стадии "что это". Потерпи меня.
Есть что-нибудь еще? Я что-то пропустил или сделал что-то неправильно?
Спасибо