Вопросы 3 и 4 очень открыты.Помимо мыслей из двух других, одна проблема с хэш-таблицей заключается в том, что это неэффективная структура данных для сканирования элементов от начала до конца.В реальном мире иногда довольно часто перечислять всех соседей для данной вершины (например, BFS, DFS), и это каким-то образом ставит под угрозу использование прямой хеш-таблицы.
Одним из возможных решений для этого являетсяобъединить существующие сегменты в хеш-таблицу так, чтобы они образовали двусвязный список.Каждый раз, когда добавляется новый элемент, подключайте его к концу списка;Всякий раз, когда элемент удаляется, удаляйте его из списка и исправьте отношение ссылки соответствующим образом.Если вы хотите выполнить общее сканирование, просто просмотрите этот список.
Недостатком этой стратегии, конечно, является больше места.Существует два указателя на каждый элемент.Кроме того, добавление / удаление элемента занимает больше времени для создания / исправления отношения ссылки.
Меня не слишком беспокоит коллизия.Хеш-таблица вершины хранит своих соседей, каждый из которых уникален.Если его ключ уникален, вероятность столкновения отсутствует.