"HashSet::len"的计算复杂度是多少?
What's the computational complexity of "HashSet::len"?
文档说 get
和 insert
对于 HashMap
(不是 HashSet
)是 Ω(1)-like,但对于 HashSet
不是或 len
.
HashSet::len
的计算复杂度是多少?
通常,len
的计算复杂度为 Ο(1)。是否有说明这一点的声明?
https://doc.rust-lang.org/stable/std/collections/index.html#maps
为了这个不得不走入一个兔子洞。简而言之,阅读 std::collections::HashMap
的源代码表明标准 HashMap 从板条箱 hashbrown
继承了它的 len()
功能,它是 Google HashTable 变体的 Rust 端口, SwissTable(github)。追踪此 crate 中 len()
的实现会导致底层 class、RawTable
,其中包含 RawTableInner<A>
的实例,条目类型 A
通用].该结构包含一个名为 items : usize
的插槽,每当调用 len()
时,它都会被 returned。这表明 len()
函数只是 return 一个内部存储的整数计数的值,它跟踪条目的数量。
总的来说,这表明 len()
的时间复杂度将为 O(1),因为它没有进行任何迭代或计数,而只是 return 条目的值在 HashTable 的构建过程中一直维护的计数器。
文档说 get
和 insert
对于 HashMap
(不是 HashSet
)是 Ω(1)-like,但对于 HashSet
不是或 len
.
HashSet::len
的计算复杂度是多少?
通常,len
的计算复杂度为 Ο(1)。是否有说明这一点的声明?
https://doc.rust-lang.org/stable/std/collections/index.html#maps
为了这个不得不走入一个兔子洞。简而言之,阅读 std::collections::HashMap
的源代码表明标准 HashMap 从板条箱 hashbrown
继承了它的 len()
功能,它是 Google HashTable 变体的 Rust 端口, SwissTable(github)。追踪此 crate 中 len()
的实现会导致底层 class、RawTable
,其中包含 RawTableInner<A>
的实例,条目类型 A
通用].该结构包含一个名为 items : usize
的插槽,每当调用 len()
时,它都会被 returned。这表明 len()
函数只是 return 一个内部存储的整数计数的值,它跟踪条目的数量。
总的来说,这表明 len()
的时间复杂度将为 O(1),因为它没有进行任何迭代或计数,而只是 return 条目的值在 HashTable 的构建过程中一直维护的计数器。