You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

优先级队列无间隙重排:现有代码输出不符,求解决方案

问题分析与解决方案

你的代码逻辑存在问题:每次遇到未记录过的旧优先级就直接分配递增的新优先级,但没有给相同的旧优先级绑定同一个新优先级,导致原队列中相同的3被分别分配了1和2,最终出现不符合预期的结果。

正确实现方法

核心思路是先为所有独特的旧优先级建立连续的映射关系,再批量替换任务的优先级:

def rearrange_priority(self):
    # 收集所有存在的优先级,去重后按从小到大排序
    unique_priorities = sorted({task['Priority'] for task in self.queue})
    # 构建旧优先级到连续新优先级的映射(从0开始递增)
    priority_map = {old_p: new_p for new_p, old_p in enumerate(unique_priorities)}
    # 遍历队列,替换每个任务的优先级
    for task in self.queue:
        task['Priority'] = priority_map[task['Priority']]

逻辑说明

  1. 去重排序:通过集合去重得到所有存在的优先级,再排序保证顺序(比如原队列的[0,0,3,3,4,5]会得到[0,3,4,5])。
  2. 建立映射:用enumerate为每个旧优先级分配连续的新值,最终映射表为{0:0, 3:1, 4:2, 5:3}。
  3. 批量替换:每个任务根据自身旧优先级查映射表,替换为对应的新优先级,确保相同旧优先级的任务得到同一个新值。

测试原示例时,最终队列优先级会变成0,0,1,1,2,3,完全符合你的预期。

内容的提问来源于stack exchange,提问作者janiceeeee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 04:54:55