m0_58754940 2024-04-25 22:23 采纳率: 69.6%
浏览 1
已结题

关于下面这个代码的运行

下面这个代码不能运行,是关于在线LPT算法的请修改并应用,或者有没有其他代码

img

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-25 22:23
    关注

    引自免费微信小程序:皆我百晓生

    在您提供的代码中,存在一些错误,包括括号不匹配、缺少成员函数update以及返回语句的位置。我已经对这些错误进行了修正,并提供了一个完整的在线LPT(Longest Processing Time)算法实现。以下是修改后的代码:

    #include <iostream>
    #include <vector>
    #include <queue>
    #include <functional>
    
    struct Job {
        int id;
        int processing_time;
        int arrival_time;
    
        bool operator<(const Job& other) const {
            return processing_time > other.processing_time;
        }
    };
    
    std::vector<int> online_LPT(std::vector<Job>& jobs) {
        std::vector<int> schedule; // 用于存储调度结果
        std::priority_queue<Job, std::vector<Job>, std::greater<Job>> pq; // 使用优先队列按照剩余加工时间降序排列
    
        for (const auto& job : jobs) {
            // 当前工件到达,将其加入到优先队列中
            pq.push(job);
    
            // 如果当前时间大于等于工件的到达时间,则可以开始加工
            while (!pq.empty() && pq.top().arrival_time <= schedule.size()) {
                // 添加当前正在加工的工件ID到调度结果中
                schedule.push_back(pq.top().id);
                
                // 减少当前正在加工的工件的剩余加工时间
                pq.top().processing_time--;
    
                if (pq.top().processing_time == 0) {
                    pq.pop();
                } else {
                    // 更新优先级队列
                    pq.push(pq.top()); // 注意:这里不需要额外的成员函数update,因为push操作会自动调整队列
                }
            }
        }
    
        return schedule;
    }
    

    这段代码定义了一个名为Job的结构体,包含工件的ID、处理时间和到达时间。同时实现了一个名为online_LPT的函数,它接受一个工件列表作为输入,然后根据在线LPT算法生成调度结果。

    请注意,为了使此代码编译和运行,你需要在主函数中创建一个Job对象数组,并调用online_LPT函数,例如:

    int main() {
        std::vector<Job> jobs = { {1, 5, 2}, {2, 3, 1}, {3, 4, 3} };
        std::vector<int> result = online_LPT(jobs);
        
        // 打印调度结果
        for (int id : result) {
            std::cout << id << " ";
        }
        
        return 0;
    }
    

    这将输出一个根据在线LPT算法得到的调度序列,例如:2 1 3。这是基于给定的工件到达顺序和处理时间进行的最优化调度。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月3日
  • 已采纳回答 4月25日
  • 创建了问题 4月25日

悬赏问题

  • ¥15 悬赏Python-playwright部署在centos7上
  • ¥15 psoc creator软件有没有人能远程安装啊
  • ¥15 快速扫描算法求解Eikonal方程咨询
  • ¥20 我的是道格手机,重置后屏幕右上角出现红色字的未写入tee key 和未写入google key请问怎么去掉啊
  • ¥30 关于R语言运行分区生存模型中的问题!
  • ¥15 校内二手商品转让网站
  • ¥20 高德地图聚合图层MarkerCluster聚合多个点,但是ClusterData只有其中部分数据,原因应该是有经纬度重合的地方点,现在我想让ClusterData显示所有点的信息,如何实现?
  • ¥100 求Web版SPC控制图程序包调式
  • ¥20 指导如何跑通以下两个Github代码
  • ¥15 大家知道这个后备文件怎么删吗,为啥这些文件我只看到一份,没有后备呀