B+树简介
引自 维基百科
B+ 树是一种树数据结构,通常用于数据库和操作系统的文件系统中。B+ 树的特点是能够保持数据稳定有序,其插入与修改拥有较稳定的对数时间复杂度。B+ 树元素自底向上插入,这与二叉树恰好相反。
B+树结构
B+树有一个重要的参数叫 阶
(m),决定了一颗B+树每一个节点存储关键子的个数。
每一个节点都会按顺序存储一组关键字,对于非根节点,其关键字树s >= (m + 1) /2。对于叶子节点,其结构中存储指向值的指针,与关键字对应,同时还有一个next指针,指向下一个兄弟叶子节点,因此找到最左叶子节点后可以按关键字顺序遍历;对于非叶子节点,存有s个指向子节点的指针。
B+树通过插入时分裂,删除时向兄弟节点借关键字或合并兄弟节点实现平衡,所有的叶子节点都在同一层。查询、插入、删除效率都是 Log(N)
。
实现的public API
template<typename K, typename V> class BPTree { private: ... public: // constructor and destructors ... /** * deserialize from a file */ static BPTree<K, V> deserialize(const std::string &path); static BPTree<K, V> deserialize(const std::string &path, comparator<K> comp); void put(const K &key, const V &value); void remove(K &key); /** * @return NULL if not exists else a pointer to the value */ V *get(const K &key); bool containsKey(const K &key); int getOrder(); int getSize(); /** * iterate order by key * @param func call func(key, valu