Как может `HashSet.Contains` быть O(1) с этой реализацией?C#

Место общения программистов C#
Ответить
Anonymous
 Как может `HashSet.Contains` быть O(1) с этой реализацией?

Сообщение Anonymous »

Код: Выделить всё

HashSet.Contains
реализация в .Net:

Код: Выделить всё

    /// 
/// Checks if this hashset contains the item
/// 
/// 
item to check for containment
/// true if item contained; false if not
public bool Contains(T item) {
if (m_buckets != null) {
int hashCode = InternalGetHashCode(item);
// see note at "HashSet" level describing why "- 1" appears in for loop
for (int i = m_buckets[hashCode % m_buckets.Length] - 1; i >= 0; i = m_slots[i].next) {
if (m_slots[i].hashCode == hashCode && m_comparer.Equals(m_slots[i].value, item)) {
return true;
}
}
}
// either m_buckets is null or wasn't found
return false;
}
И я много где читал: «Сложность поиска в хэш-наборе равна O(1)». Как?
Тогда почему существует этот цикл for?
Изменить: ссылка на .net: https://github.com/microsoft/references ... ter/System .Core/System/Collections/Generic/HashSet.cs

Подробнее здесь: https://stackoverflow.com/questions/596 ... ementation
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»