【发布时间】:2018-04-17 09:10:37
【问题描述】:
我正在散列字符串.. 然后我必须按字母顺序对第二个字符串进行排序。我必须能够在我的第二个字符串的排序树中删除、插入或获取位置数。因此,例如,我有基于动物类型(猫、狗..)的哈希表,每个桶都有 AVL 树,其名称按字母顺序排序。
插入(“猫”,“加菲猫”);插入(“猫”,“佐罗”);
garfield 和 zoro 将具有相同的哈希键,因为它们都是猫,但 garfield 将是 root 和 zoro 的右孩子.. 所以当我想删除 garfield 时,我必须再次对树进行排序..
我的问题是,如果哈希表 + avl 树是最快的选择?就像我说的,我需要能够根据类型(哈希键)加上索引来获取动物的名称。
编辑:这只是一个示例,所有内容都是可变的,并通过函数插入,因此片段数可以是 100 万个,名称也可以
【问题讨论】:
-
这完全取决于您的使用模式。添加、删除和读取的相对频率是多少?
-
物种是预先固定的(你知道它们会是猫、狗等)还是可变的?
-
一切都是可变的
-
就渐近运行时复杂度而言,您可以简单地删除哈希表部分并使用 AVL-Tree(在最坏的情况下,这两种情况都是 O(n * log n))。如果使用常见的使用模式进行基准测试,第一步可能会保护你一些周期,但是......
-
是否有特殊原因必须按字母顺序对第二个字符串进行排序?是不是因为查询时必须按字母顺序返回列表?
标签: algorithm data-structures hash avl-tree