я был дан в качестве домашнего задания Introduction to Algorithms упражнения 11.1-3
, который идет следующим образом:Реализация прямой адресной таблицы
Предложите, как реализовать таблицу прямого доступа, в которой ключи хранятся элементы не должны быть различны и элементы могут иметь спутниковые данные. Все три словарных операции (Insert, Delete и Search) должны выполняться в O (1) раз. Не забывайте, что Delete принимает в качестве аргумента указатель на объект, который нужно удалить, а не ключ.
Ну, вставка не проблема, поскольку это просто означает создание связанного списка в соответствующем месте в таблице (если оно еще не существует) и добавление к нему элемента. Поиск, которому дается ключ, может возвращать любой из элементов, которые соответствуют ключу, поэтому просто означает, что нам нужно вернуть головку соответствующего списка в таблицу.
Моя проблема заключается в удалении операции. Если я модифицирую объект, чтобы добавить к нему указатель на его узел в связанном списке, тогда я могу удалить в O (1), но я не уверен, что мне разрешено изменять объект. Есть ли способ сделать это без изменения данного объекта?
+1 для публикации домашнего задания с раскрытием и показом того, что вы уже что-то пробовали. Добро пожаловать в SO – JoshJordan
Стандартный список, связанный с ванилью, не даст вам производительности O (1). –
@GregS - Я сказал, что могу вернуть любой элемент с соответствующим ключом, то есть я могу просто вернуть голову списка, то есть O (1). –