具有某些属性的数据结构

时间:2014-08-30 11:43:37

标签: c++11 data-structures binary-tree big-o time-complexity

我想在C ++ 11中自己实现一个数据结构。我打算做的是拥有一个具有以下属性的数据结构:

  • 搜索。为O(log(n))的
  • 插入件。为O(log(n))的
  • 删除。为O(log(n))的
  • 迭代。为O(n)

在研究实施平衡二叉搜索树之后,我一直在思考。是否有其他结构可以满足我的需求?我对这个话题完全不熟悉,并认为这里的一个问题会给我一个很好的快速启动。

1 个答案:

答案 0 :(得分:1)

首先,使用现有的标准库数据类型绝对是生产代码的方法。但是既然你在问自己如何实现这样的数据结构,我认为这主要是一种教育练习。

某种形式(https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree#Implementations)或B树(https://en.wikipedia.org/wiki/B-tree)和哈希表(https://en.wikipedia.org/wiki/Hash_table)的二进制搜索树绝对是通常用于实现有效插入的数据结构和查找。如果你想疯狂,你可以通过使用树而不是链接列表来组合这两者来处理哈希冲突(尽管如果你不这样做,那么实际上很有可能使你的实现更慢。在调整哈希表的大小或选择适当的哈希函数时会出现大量错误。)

由于我假设您想要学习某些东西,您可能希望在哈希表(https://en.wikipedia.org/wiki/Perfect_hash_function)的上下文中查看最小的完美哈希,尽管这仅用于特殊应用程序(I有机会使用完美的最小哈希函数一次)。但它确实令人着迷。正如你从上面的链接中看到的那样,搜索树的植物学在范围上几乎是无限的,所以你也可以在这方面疯狂。