Data structures 为什么检查不存在的散列键只需要O(1)复杂度?

Data structures 为什么检查不存在的散列键只需要O(1)复杂度?,data-structures,time-complexity,Data Structures,Time Complexity,如果一个键在哈希表中不存在,您如何实际检查它在哈希表中是否不存在?是否需要将键值与其他现有键值进行比较? 谢谢。假设您创建了一个包含5个数字(1-5)的哈希表; 创建一个5个数字的hashmap,将hashmap的每个值初始化为0 map<int,int>hashmap; hashmap[1] = 0 hashmap[2]= 0 hashmap[3] = 0 hashmap[4] = 0 hashmap[5] = 0

如果一个键在哈希表中不存在,您如何实际检查它在哈希表中是否不存在?是否需要将键值与其他现有键值进行比较?
谢谢。

假设您创建了一个包含5个数字(1-5)的哈希表; 创建一个5个数字的hashmap,将hashmap的每个值初始化为0

 map<int,int>hashmap;
      hashmap[1] = 0 
      hashmap[2]=  0
      hashmap[3] = 0
      hashmap[4] = 0
      hashmap[5] = 0
    
    int arr[6] = {1,2,3,3,4,4};
假设您必须检查哈希映射中元素5的出现情况。 然后简单地签入hashmap

                if(hashmap[5] == 0)
                    cout<<"Dosen't Exist"<<endl
                else
                    cout<<"Exist"<<endl;
if(hashmap[5]==0)

cout假设您创建了一个包含5个数字(1-5)的哈希表; 创建一个5个数字的hashmap,将hashmap的每个值初始化为0

 map<int,int>hashmap;
      hashmap[1] = 0 
      hashmap[2]=  0
      hashmap[3] = 0
      hashmap[4] = 0
      hashmap[5] = 0
    
    int arr[6] = {1,2,3,3,4,4};
假设您必须检查哈希映射中元素5的出现情况。 然后简单地签入hashmap

                if(hashmap[5] == 0)
                    cout<<"Dosen't Exist"<<endl
                else
                    cout<<"Exist"<<endl;
if(hashmap[5]==0)

cout不存在的密钥的散列将对应于某个bucket。您需要检查该bucket中的每个元素,看看它是否是您正在寻找的元素,当然,它们中没有一个是。所以你要做的工作量等于桶中的物体数量


在一个典型的哈希映射中,bucket的数量是O(N),因此平均bucket中的对象数量是O(1)。因此,搜索不存在的对象的成本也将是O(1)。

不存在的密钥的散列将对应于某个bucket。您需要检查该bucket中的每个元素,看看它是否是您正在寻找的元素,当然,它们中没有一个是。所以你要做的工作量等于桶中的物体数量


在一个典型的哈希映射中,bucket的数量是O(N),因此平均bucket中的对象数量是O(1)。因此,搜索不存在的对象的成本也将是O(1)。

在哈希表中,键用作索引。例如,如果用于哈希表的数组大小为512,则键是介于0和255之间的数字。如果数组的索引为O(1),则访问该数组的单元格。当您访问该单元格时,该单元格要么标记为“空”,要么给出存储在其中的元素列表。如果单元格为空,则键“不存在”。

在哈希表中,键用作索引。例如,如果用于哈希表的数组大小为512,则键是介于0和255之间的数字。如果数组的索引为O(1),则访问该数组的单元格。当您访问该单元格时,该单元格要么标记为“空”,要么给出存储在其中的元素列表。如果单元格为空,则键“不存在”。

在哈希表中,键用作索引。例如,如果用于哈希表的数组大小为512,则键是介于0和255之间的数字。如果数组的索引为O(1),则访问该数组的单元格。当您访问该单元格时,该单元格要么标记为“空”,要么给出存储在其中的元素列表。如果该单元格为空,则密钥为“不存在”。谢谢@Stef!这回答了我的问题。在哈希表中,键用作索引。例如,如果用于哈希表的数组大小为512,则键是介于0和255之间的数字。如果数组的索引为O(1),则访问该数组的单元格。当您访问该单元格时,该单元格要么标记为“空”,要么给出存储在其中的元素列表。如果该单元格为空,则密钥为“不存在”。谢谢@Stef!这回答了我的问题。