Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么哈希表要删除O(1)?_C#_Hashtable - Fatal编程技术网

C# 为什么哈希表要删除O(1)?

C# 为什么哈希表要删除O(1)?,c#,hashtable,C#,Hashtable,我理解为什么哈希表Add是O(1)(但是如果我错了,请纠正我):被添加的项总是分配到备份数组中的第一个可用位置 我理解为什么查找是O(n)(如果我错了,请再次更正):您需要遍历备份数组以找到请求的值/键,并且此操作的运行时间将与集合的大小成正比 然而,在我看来,为什么是删除?添加/查找中涉及的主体是相同的 编辑 MSDN文章指的是找不到请求删除的项目的场景。它提到这是一个O(1)操作 插入和删除的最坏情况应该是O(n),请参阅 当我们插入时,我们必须检查值是否在表中,因此在最坏的情况下O(n)

我理解为什么哈希表Add是O(1)(但是如果我错了,请纠正我):被添加的项总是分配到备份数组中的第一个可用位置

我理解为什么查找是O(n)(如果我错了,请再次更正):您需要遍历备份数组以找到请求的值/键,并且此操作的运行时间将与集合的大小成正比

然而,在我看来,为什么是删除?添加/查找中涉及的主体是相同的

编辑


MSDN文章指的是找不到请求删除的项目的场景。它提到这是一个O(1)操作

插入和删除的最坏情况应该是
O(n)
,请参阅

当我们插入时,我们必须检查值是否在表中,因此在最坏的情况下
O(n)

想象一个病态的情况,当所有散列值都相同时


MSDN可能指的是平均复杂度。

插入和删除的最坏情况应该是
O(n)
,请参阅

当我们插入时,我们必须检查值是否在表中,因此在最坏的情况下
O(n)

想象一个病态的情况,当所有散列值都相同时


可能MSDN指的是平均复杂度。

O(1)是最好的情况,如果您适当调整表的大小,可能是平均情况。哈希表最坏的删除情况是O(n)。

O(1)是最好的情况,如果表大小适当,可能是平均情况。哈希表最坏的删除情况是O(n)。

请澄清“查找是O(n)”是什么意思-恒定的搜索时间可能有利于哈希表…最坏的情况是O(n):我明白你的意思。请注意,您正在发布某些操作(添加/删除)的平均()时间,以及其他操作(查找)的最差()时间。。。这使得很难正确地回答你的问题。请考虑编辑你的帖子来清楚地说明你是否提到了每种方法的平均或最坏情况。请澄清你的意思是“查找是O(n)”-搜索的恒定时间可能会受益于哈希表…最坏的情况是O(n):我明白你的意思。请注意,您正在发布某些操作(添加/删除)的平均()时间,以及其他操作(查找)的最差()时间。。。这使得很难正确地回答你的问题。请考虑编辑你的帖子,明确地说明你是否提到了每种方法的平均或最坏情况。他们指的是一个没有找到密钥的场景。然而,这意味着整个数组都已被搜索,这将是一个O(n)操作,不是吗?@NealR如果找不到密钥,则不会出现哈希冲突,因此我希望
O(1)
。还是我误解了你?不,你明白这个问题。但是,如果对整个集合进行迭代,为什么会是O(1)?+1@NealR-每个添加/查找/删除的最坏情况为O(n),每个添加/查找/删除的平均值为O(1)。当散列函数为常量时(如
return 42;
),最坏的情况很容易演示。@NealR如果找不到键,为什么整个集合将被迭代?其思想是,我们在
O(1)
中获得哈希函数,如果该值在表中不存在,我们就知道一切。如果表中确实存在该值,并且不同对象的值相同,则会出现问题。在这种情况下,我们必须逐个检查对象。它们指的是找不到它们的密钥的场景。。。然而,这意味着整个数组都已被搜索,这将是一个O(n)操作,不是吗?@NealR如果找不到密钥,则不会出现哈希冲突,因此我希望
O(1)
。还是我误解了你?不,你明白这个问题。但是,如果对整个集合进行迭代,为什么会是O(1)?+1@NealR-每个添加/查找/删除的最坏情况为O(n),每个添加/查找/删除的平均值为O(1)。当散列函数为常量时(如
return 42;
),最坏的情况很容易演示。@NealR如果找不到键,为什么整个集合将被迭代?其思想是,我们在
O(1)
中获得哈希函数,如果该值在表中不存在,我们就知道一切。如果表中确实存在该值,并且不同对象的值相同,则会出现问题。在这种情况下,我们必须逐个检查对象。