【问题标题】:Where are the values for B-Tree keys are stored?B-Tree 键的值存储在哪里?
【发布时间】:2018-03-13 12:59:53
【问题描述】:

我一直在研究 B-Trees 来存储大约 10k 个字符串数据库,每个字符串都有一个唯一的 id,我认为它可以作为我的密钥。但是我看到的每个实现都只显示 B 树中的键而不是值。我确信 B-Tree 在充当映射时必须将值链接到键,但我无法理解它们是否与键一起存储在树的节点中。例如。

       ||key3|   |key6||
     /         |          \
    /   ||key4| |key5||    \
   /                        \
||key1| |key2||         ||key7| |key8||

       ||k3,v3| |k6,v6||
     /         |         \
    /   ||k4,v4||k5,v5||  \
   /                       \
||k1,v1| |k2,v2||         ||k7,v7| |k8,v8||

我不确定这些值的存储方式和位置。

【问题讨论】:

    标签: data-structures tree hashmap b-tree


    【解决方案1】:

    在每个单个节点中,包括内部节点和叶节点,以及键。

    在 B+-Tree 中,所有键都在叶节点中可用。因此,在拆分叶节点的情况下,您只能将键推送给您的父节点,并为自己保留值。但是,在 B 树中,键不会重复,因此您必须在内部节点中有值。

    您可以使用键值映射并迭代它的键以实现特定于树的功能。由于您需要对键进行排序,因此您应该使用排序映射,例如 java 中的 TreeMap 或 c++ 中的简单 std::map。 (Python 在标准库中没有类似的东西。)它们还有助于轻松拆分节点并将内容推送到新节点。

    【讨论】:

    • 那么,如果我想存储 10K 组字符串,每组大约有 10 个单词,其中一个单词是唯一 ID,那么构建 B-Tree 的第二种表示是否正确?是的,我期待进行排序实现,我可以在节点内使用 SortedHashMap 来存储键吗?你能指出任何可视化来理解为存储在外部存储器(如文件而不是主存储器)中的信息构建 B-Tree 吗?
    • IMO,第二个表示是正确的。还没有听说过 SortedHashMap,你在说什么语言?据我所知,哈希映射不可能被排序。对于可视化,cs.usfca.edu/~galles/visualization/BTree.html。我们被教导使用它。
    • 通过SortedHashMap,我指出我是否可以让B-Tree节点按排序顺序存储键,即。升序,但键需要通过散列,因为它们是长度超过 20 的长整数。另一个我在看 TreeMap,似乎一切都在做。我之前说过,除了散列。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 2018-11-09
    • 1970-01-01
    相关资源
    最近更新 更多