java具有多键,而Smalltalk具有一个袋子类,据说它们是相同的功能:保持一组值,但允许多个值(每个值都有计数)。<<<<<<<<<<<<<<<</p>
,但似乎可以通过一张藏书表来实现多功能,该表可以保持键数(或者也许还有其他可能的实现)。
某些实施多组或袋子比上面的哈希提供了更好的时间复杂性?所需的操作可以是
- 插入项目
- 删除项目
- 获取集合中的最小值
- 获取集合中的最大值
特别是,我希望对于上面的四个操作中的每个操作中的每个操作,都可以比O(n)
更好,可能是所有O(log n)
或更好。(每当添加或从中添加值或删除值时,以某种分类的方式维护多式,上面的3和4才能为O(log n)
。)
这取决于多速度是否由急速或排序集实现。
对于散布,插入/更新操作为o(1)(min和max as o(n)),但不利的一面是,标签不能使元素保持顺序。此外,这要求为每个元素存储,可以计算一个一致的哈希值。
对于一个排序的集合,所有操作均为o(log n),但随着元素按顺序保持顺序(因此,它在报告元素范围内是有效的)。这要求存储每个元素都是可比的(即在元素上存在订购)。