Algorithm 确定在O(1)预期时间和O(logn)最坏情况下集合中是否存在整数

Algorithm 确定在O(1)预期时间和O(logn)最坏情况下集合中是否存在整数,algorithm,data-structures,binary-search-tree,Algorithm,Data Structures,Binary Search Tree,我需要描述一个数据结构,它能够确定在O(1)预期时间和O(logn)最坏情况下,集合中是否存在一个特定的整数,并且消耗O(n)空间。我看了一张包含常见数据结构的表,表中存在大O时间/空间复杂性,但我似乎找不到任何符合这些要求的表?有没有办法修改BST以满足这些要求 正如@Carcigenicate所评论的,hashmap展示了您想要的行为。它具有恒定的O(1)预期查找时间,冲突情况除外。在发生冲突的情况下,哈希映射通常为给定的bucket创建一个项目列表。在最坏的情况下,hashmap的行为类似

我需要描述一个数据结构,它能够确定在O(1)预期时间和O(logn)最坏情况下,集合中是否存在一个特定的整数,并且消耗O(n)空间。我看了一张包含常见数据结构的表,表中存在大O时间/空间复杂性,但我似乎找不到任何符合这些要求的表?有没有办法修改BST以满足这些要求

正如@Carcigenicate所评论的,hashmap展示了您想要的行为。它具有恒定的
O(1)
预期查找时间,冲突情况除外。在发生冲突的情况下,哈希映射通常为给定的bucket创建一个项目列表。在最坏的情况下,hashmap的行为类似于列表。但这意味着最坏情况下的搜索时间为
O(n)
,这不符合您的要求

Java在其最新的8版本中公开了一个
HashMap
类,该类使用平衡树而不是列表来存储与同一个bucket冲突的项。这保证了最坏情况下的搜索时间为
O(logn)


因此,要解决您的问题,您需要修改hashmap的实现,以使用树进行冲突。如果您使用的是Java 8,那么生活已经很好了,您可以使用
HashMap

运行,正如@Carcigenicate评论的那样,HashMap显示了您想要的行为。它具有恒定的
O(1)
预期查找时间,冲突情况除外。在发生冲突的情况下,哈希映射通常为给定的bucket创建一个项目列表。在最坏的情况下,hashmap的行为类似于列表。但这意味着最坏情况下的搜索时间为
O(n)
,这不符合您的要求

Java在其最新的8版本中公开了一个
HashMap
类,该类使用平衡树而不是列表来存储与同一个bucket冲突的项。这保证了最坏情况下的搜索时间为
O(logn)


因此,要解决您的问题,您需要修改hashmap的实现,以使用树进行冲突。如果您使用的是Java 8,那么生活已经很好了,您可以使用
HashMap

运行,这描述了一个HashMap/set。最坏的情况是O(n)表示HashMap/set not O(logn)@carcigenicate这描述了一个HashMap/set。最坏的情况是O(n)表示HashMap/set not O(logn)@carcigenicateah我看到了,而不是有一个链表,他们只是简单地将其切换为一棵树?@101ldaniels是的,这样做,然后生成的哈希映射应该符合您的需要。我认为
O(logn)
仅适用于您的键实现“Comparable”,否则它可能仍然会退化为
O(n)
。啊,我看到的是这样,而不是有一个链接列表,他们只是简单地将其切换为一棵树?@101ldaniels是的,这样做,生成的哈希映射应该符合您的需要。我认为
O(logn)
仅在您的键实现“Comparable”时适用,否则它可能仍然会退化为
O(n)