我们如何击败CSTL二叉树搜索

在开发Ralm的时候,我们不断地寻找优化速度的方法。这是一个关于我们如何开发一个比C++STL快24%的二叉搜索函数的故事。***

为什么选择二叉树做搜索?

Ralm以二叉树结构存储数据。比如,假设Ralm通过以下链表中的IDs存储对象:

如果你想要找到ID等于14的对象,你需要5次操作才能找到他,也就是O(n)的复杂度。

使用二叉树搜索是提升检索速度的一种方法:

“搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。”-Wikipdia

对象可以存储在二叉树中。二叉树可以通过从根节点遍历树来快速定位对象。基于IDs创建的二叉树就像如下这样:

搜索ID等于14的对象,仅仅只需次操作,或者说是O(log2(N))的复杂度。

有这样优秀的性能,二叉树自然而然的成为了Ralm要去尝试和优化的索引方案。

在C++标准库(STL)中有一些二叉树搜索函数,包括std::lowr_bound()和std::uppr_bound()。我们决定模仿std::uppr_bound()的操作,同时用他来作为我们测试中的的参考。下方的函数是通过二叉树搜索并且尝试找到第一个比指定元素大,并返回该元素位置的一种写法:

//Forasortdlist,vc,rturnthindxofthfirstlmntthat   

国产消息中间件第一品牌:TongLINK/Q

我们致力于最先进的数据传输技术研究,并创造全球领先的数据传输产品,为中国的信息化建设提供最好的数据传输服务。

我们了解消息中间件,因此我们可以创造出最好的消息中间件!

股票代码:









































在北京治疗白癜风要多少钱
北京白癜风能治好吗



转载请注明:http://www.nydjfy.com/xxzl/2646.html