【发布时间】:2013-07-09 19:54:13
【问题描述】:
我想实现一个具有以下约束的双端优先级队列:
需要在固定大小的数组中实现..比如说100个元素..如果数组满后需要添加新元素,则需要删除最旧的元素
需要 O(1) 中的最大值和最小值
如果可能,在 O(1) 中插入
如果可能,删除 O(1) 中的最小值
如果可能,在 O(1) 中清空/初始化状态
当前数组中的元素个数计数 O(1)
我希望以上 5 种操作都使用 O(1),但在同一实现中不可能对所有操作都使用 O(1)。至少 3 个操作的 O(1) 和其他 2 个操作的 O(log(n)) 就足够了。
如果可以提供任何指向此类实现的指针,将不胜感激。
【问题讨论】:
-
你尝试过什么吗?至少清楚 O(1) 中的清空/初始化状态对于了解基本数据结构的人来说是微不足道的:(
-
@Fallen ya 即使计数也..只需跟踪它...我只是明确说明操作和时间复杂性:),因此建议特定实现的人会对期望有清晰的认识
-
好吧,你不能让插入和提取最小值/最大值为常数或摊销常数时间,因为这意味着线性时间排序算法。所有这些都假设您的键不是整数等,而是带有比较运算符的黑盒子。
标签: algorithm data-structures big-o priority-queue heapsort