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

Round Robin调度算法代码修正请求:完成时间计算错误

轮转调度(Round Robin)算法实现问题修正请求

我需要实现一个Round Robin调度函数,接收两个参数:输入的Process列表和时间片(time quantum),要求必须使用Queue或Priority Queue。目前存在完成时间(Completion Time)计算错误的问题,使用的自定义Process类如下(其中__lt__方法用于抢占式优先级调度、SJF等其他操作系统调度算法):

class Process:
    def __init__(self, process_id, arrival_time, burst_time, priority):
        self.process_id = process_id
        self.arrival_time = arrival_time
        self.burst_time = burst_time
        self.priority = priority
        self.completion_time = 0
        self.waiting_time = 0
        self.turnaround_time = 0
        self.remaining_time = burst_time

    def __lt__(self, other):
        if self.priority == other.priority:
            if self.arrival_time == other.arrival_time:
                return self.process_id < other.process_id
            return self.arrival_time < other.arrival_time
        if self.priority < other.priority:
            return self.priority < other.priority
        if self.burst_time == other.burst_time:
            return self.process_id < other.process_id
        if self.arrival_time == 0 and other.arrival_time != 0:
            return True
        elif self.arrival_time != 0 and other.arrival_time == 0:
            return False
        elif self.arrival_time == other.arrival_time:
            return self.burst_time < other.burst_time
        return self.burst_time < other.burst_time

第一次实现及问题

我编写的第一个Round Robin函数使用Queue存储进程,当进程剩余时间不为0时将其放回队列,但计算出的完成时间不正确:

def round_robin(processes, time_quantum):
    rr = Queue()

    for process in processes:
        rr.put(process)

    waiting_time = [0] * len(processes)
    turn_around_time = [0] * len(processes)
    curr_time = 0

    while not rr.empty():
        process = rr.get()
        if process.remaining_time <= time_quantum:
            curr_time += process.remaining_time
            process.completion_time = curr_time
            process.remaining_time = 0
        else:
            curr_time += time_quantum
            process.remaining_time -= time_quantum
            rr.put(process)

        if process.remaining_time > 0:
            rr.put(process)

    for i in range(len(processes)):
        turn_around_time[i] = processes[i].completion_time - processes[i].arrival_time
        processes[i].waiting_time = turn_around_time[i] - processes[i].burst_time
        processes[i].turnaround_time = turn_around_time[i]

    return processes

测试输入

processes = [
        Process(1, 0, 24, 4),
        Process(2, 0, 3, 3),
        Process(3, 0, 3, 2)
    ]

time_quantum = 2

错误输出

Process 1 Completion Time: 30
Process 2 Completion Time: 11
Process 3 Completion Time: 12

正确输出应为

Process 1 Completion Time: 30
Process 2 Completion Time: 9
Process 3 Completion Time: 10

第二次实现及问题

我尝试了另一种实现方式,用列表存储已完成进程,上述测试用例能得到正确结果,但另一组输入仍出现错误:

def round_robin(processes: List[Process], time_quantum: int) -> List[Process]:
    queue = Queue()
    total_time = 0
    total_time_counted = 0
    wait_time = 0
    turnaround_time = 0
    completed_processes = []

    for process in processes:
        total_time += process.burst_time
        queue.put(process)

    while not queue.empty():
        current_process = queue.get()

        if current_process.remaining_time <= time_quantum:
            total_time_counted += current_process.remaining_time
            total_time -= current_process.remaining_time
            current_process.completion_time = total_time_counted
            current_process.turnaround_time = total_time_counted - current_process.arrival_time
            current_process.waiting_time = current_process.turnaround_time - current_process.burst_time
            completed_processes.append(current_process)
            current_process.remaining_time = 0
        else:
            total_time_counted += time_quantum
            total_time -= time_quantum
            current_process.remaining_time -= time_quantum
            queue.put(current_process)

    return completed_processes

测试输入

processes = [
        Process(1, 0, 7, 4),
        Process(2, 2, 4, 3),
        Process(3, 4, 1, 2),
        Process(3, 5, 4, 1)
    ]

time_quantum = 2

错误输出

Process 1 Completion Time: 16
Process 2 Completion Time: 11
Process 3 Completion Time: 5
Process 4 Completion Time: 13

正确输出应为

Process 1 Completion Time: 16
Process 2 Completion Time: 9
Process 3 Completion Time: 7
Process 4 Completion Time: 15

恳请帮助修正代码!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 15:05:07