想模拟按时间顺序执行的任务队列该用啥数据结构?

39 天前
 LeeReamond

最近自走棋游戏挺有意思的,想自己模拟个自走棋游戏的后端,大概就是需要不同棋子按照时间顺序依次执行各自的任务,然后各自的任务执行结果又会影响任务队列本身这样。

想了想,大概需要维护一个类似于时间循环的东西,需求大概是:

  1. 维护一个顺序队列
  2. 要能弹出任务,时间复杂度最好是 O(1)
  3. 要能插入新任务,复杂度不超过 O(logN)
  4. 要能修改已存在的任务

不知道该用啥数据结构,有没有大佬提提意见。如果用各种树的话,感觉平衡树不太适合任务队列?任务队列需要频繁删除栈底,用树感觉很亏。如果单纯是一个数组然后用类似快排的思路实现插入和修改(先查找再插入),感觉也是效率很低。一时想不到啥合适的,学艺不精了属于是

1057 次点击
所在节点    程序员
8 条回复
pengdachxx
39 天前
修改不好搞,可以研究下延时队列或者优先队列
Maboroshii
39 天前
维护的任务数量不多,每次插入用冒泡排序都可以实现需求。 (认真点,谷歌搜时间轮)
LeeReamond
39 天前
@Maboroshii 确实不多,自走棋游戏首先都会限制棋子上限,任务的数量级靠硬怼也能搞。只是我是想后面有没有可能跑大量测试和数据分析,所以性能上想尽量基线做高点
mezi04
39 天前
Java 有 DelayQueue ,不知道 op 用的啥开发语言
sketcherly
39 天前
b+tree ?没细琢磨,感觉上 叶子节点可以作为作为队列,本身又是树适合写操作
tiandishi
39 天前
双向链表扩展一下:

跳表
xichuhanguguan
38 天前
时间轮算法,可以找找你使用语言的包试试看
MoYi123
38 天前
带懒删除的 fib heap

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1030237

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX