是否有任何有序容器允许O(n)按顺序删除和遍历?我正在尝试执行以下操作:
Hello -> 1,2,3,4,5,6
Hello1 -> 24,15,13,10,8,7
我需要能够尽快从Hello或Hello1连续插入和删除。我正在考虑使用优先级队列,但每次我想要删除我花O(logn)调整,所以n次删除将花费我O(nlogn)时间来保持内部结构有序。是否有任何数据结构可以在O(n)时间内完成此任务?
答案 0 :(得分:0)
只需使用std::vector
,其中一些排序位于顶部;不要每次都使用std::sort
- 使用合并排序。
复杂性很重要,但是当数据集较小时,内存分配和缓存未命中所花费的时间将远远超出此范围。一般来说,对它进行分析,但在这种情况下我会推测vector
会没问题。
仔细考虑是否需要保持结构始终排序;你可以在诉诸之前插入一些物品吗? 2个向量和查找合并怎么样?仔细考虑你的算法;例如,您可以删除O(n)
中的任意数量的项目。