- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我需要实现一个支持插入删除和查找的数据结构O(log(n)) 并在 O(1) 中提取一个特殊对象。我的数据结构需要保存按 ID 排序的车辆,每辆车都有一个字段代表下一次服务之前的时间。我需要在 O(1) 中提取下一个需要服务的车辆。欢迎提出所有建议。
我知道我需要两个单独的数据结构,我考虑过让 1 个集合和 1 个优先级队列都按其他参数排序但保存同一指针的拷贝。我遇到的问题是,当我试图从“set”结构中删除时,我在另一个数据结构(优先队列)上留下了垃圾。
最佳答案
哈希表将支持插入、删除和搜索,比 O(log(n)) 好得多。这是假设您在扩大表格时永远不必重新散列所有内容。困难的部分是在 O(1) 时间内定位“下一个”车辆。
根据实现,min heap会给你 O(1) 和 O(log(n)) (摊销)插入,找到最小项是 O(1)。从堆中删除一个项目是一个 O(log(n)) 操作,但是找到堆中的任意项目超过 O(log(n))。
如果我要实现这个,我会使用两个独立的数据结构:一个哈希表和一个最小堆。原因是哈希表提供了非常快速的插入、删除和查找,而堆提供了基于服务时间的排序。唯一不符合您开始要求的地方是删除车辆,因为这需要在堆中搜索任意项目。
实际上,尽管可能会很困惑,但可以将这两种数据结构组合起来,以便您的哈希表存储堆节点对象(具有对实际数据的引用)而不是实际数据对象。只要堆节点知道它在堆中的位置(即有一个父指针以及左右子指针),那么您就可以使用哈希表找到一个节点并将该节点从堆中删除。
关于c++ - 如何创建具有运行时限制的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3703170/
谁能推荐一个好的成员(member)结构? 例如,用户支付了 1 个月的成员(member)费,从 2012 年 2 月 1 日到 2012 年 3 月 1 日结束。 何时何地检查用户是否仍是成员(m
我想在我的 JTextPane 中实现查找机制(如文本编辑器或 word)。我希望它有下一个/上一个选项(向上/向下箭头)并突出显示它找到的所有单词。有没有简单的方法可以做到这一点? 最佳答案 我不是
Android 上是否有任何机制和/或编程实践来执行一次性安装/更新脚本?这似乎是一个非常基本的问题,但谷歌搜索没有帮助。 假设我的应用程序使用了一个数据库,并且需要一个常量值表(例如国家名称、城市名
是否可以将 SimpleMembership 与 ASP.NET WebForms 一起使用? John Galloway 的文章似乎表明 WebForms“在 ASP.NET 成员资格之上实现 OA
我是一名优秀的程序员,十分优秀!