什么是地图树的最佳数据结构

时间:2010-11-25 20:05:34

标签: data-structures maps hash hierarchical-trees

我正在寻找一种数据结构,它基本上是一张地图树,其中每个节点的地图包含一些新元素,以及其父节点地图中的元素。通过这里的地图我的意思是一个带有键和值的编程图,比如STL中的map或python中的dict。

例如,可能存在根节点:

root = {'car':1, 'boat':2}

和2个孩子,每个孩子都向父地图添加一个元素

child1 = {'car':1, 'boat':2, 'jet':35}
child2 = {'car':1, 'boat':2, 'scooter':-5}

然后我将在节点上执行搜索。例如,child1 ['jet']返回35,但root ['jet']返回一个未找到的错误。

我希望这样做尽可能节省空间,即我不想在每个节点上存储结果映射的完整副本,但理想情况下查找仍然是O(log N),N是节点上的元素总数,而不是整个树。

我想也许我可能会使用一个智能哈希函数,但是无法想出任何东西。

天真的方法是将新添加的条目存储在每个节点的地图中,然后如果没有找到则向上移动树。我不喜欢这个,因为它取决于树的深度。

2 个答案:

答案 0 :(得分:0)

如何创建一个比较散列图的函数,无论它们是否匹配都会返回true或false,这可能会对键和值对的排序造成一些棘手的原因。

每当您向树中添加新节点(map)时,都使用此函数。检查树中的所有现有节点,如果hashmap已经存在,只需指向那个。

这可能需要大量处理来比较散列图,但这样可以节省大部分空间。

希望这有帮助。

编辑:你可以在地图上做联盟,看看结果的长度是否相同。

答案 1 :(得分:0)

我的理解是,您正在寻找'jet',这将为您提供child1的完整列表。

您的主要数据将是一棵树。您将保留对该级别所有数据的引用(例如'jet':35,以及指向父级的指针。

引用将通过另一个哈希结构。这会将键('jet')映射到指向树的指针。

map['jet']  =>  {'jet':35, parent:root}

然后可以扩展到

map['jet']  =>  {'car':1, 'boat':2, 'jet':35}

alt text