gpt4 book ai didi

Array[T].Contains(T item) 与 HashSet.Contains(T item) 的 C# 时间复杂度

转载 作者:太空狗 更新时间:2023-10-29 21:04:12 25 4
gpt4 key购买 nike

HashSet(T).Contains(T) (继承自 ICollection<T>.Contains(T) )的时间复杂度为 O(1)。
所以,我想知道包含整数的类成员数组的复杂性是多少,因为我努力实现 O(1) 并且不需要 existence checksHashSet(T).Add(T) .

built-in types 没有显示在 .NET 引用源中,我没有机会找到找到了 IList(T).Contains(T) 的数组实现.

任何(进一步的)阅读 Material 或引用将不胜感激。

最佳答案

可以看到Array的源码使用任何反射器(也许也在线,未检查)。 IList.Contains只是:

Array.IndexOf(this,value) >= this.GetLowerBound(0);

Array.IndexOf电话 Array.IndexOf<T> ,经过一系列一致性检查后,重定向到

EqualityComparer<T>.Default.IndexOf(array, value, startIndex, count)

那一个终于做到了:

int num = startIndex + count;
for (int index = startIndex; index < num; ++index)
{
if (this.Equals(array[index], value))
return index;
}
return -1;

所以只需以平均复杂度遍历数组 O(N) .当然,这从一开始就很明显,但只是为了提供更多证据。

关于Array[T].Contains(T item) 与 HashSet<T>.Contains(T item) 的 C# 时间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37182865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com