【发布时间】:2014-10-09 22:40:03
【问题描述】:
如果我为我的 bst 使用 insert() 函数,时间复杂度可能与 O(n) 一样糟糕,与 O(log n) 一样好。我假设如果我有一个完美平衡的树,时间复杂度是 log n,因为每次我沿着“分支”走下去时,我都能忽略树的一半。如果我的树完全不平衡,那将是 O(n)。我这样想对吗?
【问题讨论】:
-
是的,伙计..你是对的。
标签: big-o time-complexity
如果我为我的 bst 使用 insert() 函数,时间复杂度可能与 O(n) 一样糟糕,与 O(log n) 一样好。我假设如果我有一个完美平衡的树,时间复杂度是 log n,因为每次我沿着“分支”走下去时,我都能忽略树的一半。如果我的树完全不平衡,那将是 O(n)。我这样想对吗?
【问题讨论】:
标签: big-o time-complexity
是的,这是正确的,参见例如维基百科,http://en.wikipedia.org/wiki/Binary_search_tree#Searching。
如果您使用例如C++ STL std::map 或 std::set,你会得到一个红黑平衡的树。另外值得注意的是,使用这些 STL 数据结构,您可以 100% 地获得这种性能,这在例如硬实时系统。哈希表甚至更快,但不像红黑树那样在 100% 的时间内都快。
【讨论】: