Пытаясь определить время выполнения и пространства сложность HashTable (NSMutableDictionary) на основе решения следующих вопроса:Какова пространственная сложность итерации ключей в NSMutableDictionary?
Implement a TwoSum interface that has 2 methods: Store and Test. Store adds an integer to an internal data store and Test checks if an integer passed to Test is the sum of any two integers in the internal data store.
Там, кажется, много ответов с различными хранения и тестирования сложности. Один многообещающий -
Имейте Hashtable под названием StoreDict. То есть NSMutableDictionary <NSNumber *, NSNumber *> *StoreDict
как внутренняя структура данных
Store(N)
реализован как- Проверьте, если
StoreDict[@(N)]
существует. Если да, то отсчет прироста, то есть:StoreDict[@(N)] = @([StoreDict[@(N)] intValue]++)
- Проверьте, если
Test(N)
реализован какперебрать все ключи. Для каждого ключа, K,
Если
[K intValue] != N/2
проверить, еслиStoreDict[@(N-[K intValue])]
существуетЕсли
[K intValue] == N/2
проверить, если[StoreDict[@(K)] intValue] >= 2
Похоже store
является O (1) и Тест O(N)
времени выполнения сложность. Вопрос только в том, что такое сложность пространства при повторении всех ключей, O(1)
или O(N)
? I.e - это ключи, заданные один за другим (o (1) пробел) или все N помещены в некоторый временной массив (o (N))?
EDIT
Я имею в виду, используя следующий код, чтобы получить ключи
NSEnumerator *enumerator = [StoreDict keyEnumerator];
id key;
while ((key = [enumerator nextObject])) {
/* code that uses the returned key */
}
Если O(N)
пространство сложность, лучше решение, которое получает O(1)
время и пространство сложности для этого вопрос?
или keyEnumerator
похоже на использование [StoreDict allKeys]
, что является сложностью пространства O (N)?
Что такое N?Итерация по всем клавишам - это как минимум O (N) в количестве сохраненных целых чисел (меньше дубликатов). – Max
@Max См. Править выше. если я использую выше код в редактировании, чтобы получить ключи, я получу ключи один за другим, делая его «O (1)» дополнительным пространством или он будет вести себя как получение '[myDict allKeys]' и прохождение по массиву один -о-один, который является O (N) дополнительным пространством? –
@Max Я исправил одну опечатку. Да, Test() - это сложность времени выполнения O (N). Мой Q находится на его космической сложности. –