![]() |
1
2
我将使用2个数据结构,一个从键到值的哈希表,以及一个按值然后按键排序的搜索树。插入时,将对插入到两个结构中,按键删除时,从哈希中查找值,然后从树中删除对。更新基本上是删除+插入。插入、删除和更新是O(日志N)。要获取小于某个值的所有键,请在搜索树中查找该值并向后迭代。这是O(日志N+K)。 好的哈希表和搜索树实现的选择很大程度上取决于数据和操作的特定分布。这就是说,一个好的、通用的两个目的的实施都应该是充分的。 |
![]() |
2
0
对于二进制搜索,树插入平均为O(logn)操作,最坏情况为O(n)。查找操作相同。所以我相信这应该是你的选择。 |
![]() |
3
0
字典或地图类型往往基于两种结构之一。
任何有关算法的书都应该详细地介绍这两方面。 为了在键和值上提供操作,还存在基于多个索引的集合(具有所有额外的复杂性),这些集合维护多个结构(就像RDBMS表可以有多个索引一样)。除非您对一个大型集合进行了大量查找,否则额外的开销可能比一些线性查找成本更高。 |
![]() |
4
0
您可以创建一个包含两个字典的自定义数据结构。
即
哈希表来自
输出:
|