Hash 哈希表-插入、搜索和删除的复杂性

Hash 哈希表-插入、搜索和删除的复杂性,hash,hashtable,big-o,Hash,Hashtable,Big O,有人给了我两个关于哈希表复杂性的家庭作业问题,但我很难理解它们之间的区别 详情如下: 考虑一个散列函数,它接受n个输入并将它们映射到一个大小为m的表 编写哈希函数的插入、搜索和删除的复杂性,该函数将所有n个输入均匀分布在哈希表的各个存储桶上 将插入、搜索和删除的复杂性写入(假定完美但不现实)哈希函数,该函数永远不会将两个项放在同一个bucket中,即该哈希函数永远不会导致冲突 这两个问题似乎与我非常相似,我不确定它们的区别 对于问题1,由于n个输入是均匀分布的,我们可以假设每个存储桶中有零个或一

有人给了我两个关于哈希表复杂性的家庭作业问题,但我很难理解它们之间的区别

详情如下:

考虑一个散列函数,它接受n个输入并将它们映射到一个大小为m的表

  • 编写哈希函数的插入、搜索和删除的复杂性,该函数将所有n个输入均匀分布在哈希表的各个存储桶上

  • 将插入、搜索和删除的复杂性写入(假定完美但不现实)哈希函数,该函数永远不会将两个项放在同一个bucket中,即该哈希函数永远不会导致冲突

  • 这两个问题似乎与我非常相似,我不确定它们的区别

    对于问题1,由于n个输入是均匀分布的,我们可以假设每个存储桶中有零个或一个项目,因此所有插入、搜索和删除都将是O(1)。这是正确的吗

    那么,问题二有什么不同呢?如果该函数从未导致冲突,那么所有项目都将均匀分布,那么这不会导致每个操作的O(1)吗

    我的想法对这些问题正确吗?还是我遗漏了什么

    编辑:

    我相信我已经找到了我的错误所在。O(1)对于问题3中的每个操作都是正确的,因为哈希函数是理想的,不会导致冲突

    然而,对于问题2,项目分布均匀,但并不意味着每个bucket中只有1个项目,例如,每个bucket在链表中可能有20个项目。所以插入是O(1)


    但是搜索呢?这将是O(1)+搜索链接列表的成本。但我们不知道它的大小,只知道它分布均匀。我们能用n(输入数量)和m(表格大小)来表示长度吗?

    您的编辑是正确的

    我们能用n(输入数量)和m(表格大小)来表示长度吗

    对于1,如果哈希表大小以某种方式被禁止,这意味着负载因子(即每个存储桶的项目数)n/m大于1,并且不是常数,也不在常数范围内,那么您可以假设一个关系m=f(n),那么负载因子将是n/f(n),因此复杂性也将是O(n/f(n))


    在第二种情况下,复杂性始终为O(1)。

    您的编辑是正确的

    我们能用n(输入数量)和m(表格大小)来表示长度吗

    对于1,如果哈希表大小以某种方式被禁止,这意味着负载因子(即每个存储桶的项目数)n/m大于1,并且不是常数,也不在常数范围内,那么您可以假设一个关系m=f(n),那么负载因子将是n/f(n),因此复杂性也将是O(n/f(n))

    在第二种情况下,复杂度总是O(1)