运用c++语言写OPT算法,要求可读性高
时间: 2023-08-04 20:10:57 浏览: 81
FIFO-LRU-OPT.zip_OPT_OPT_ LRU_ FIFO
以下是一个可读性较高的C++实现OPT算法的示例代码:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Request {
int id;
int arrival_time;
int processing_time;
};
struct Schedule {
int request_id;
int start_time;
};
int main() {
int n, m;
cin >> n >> m;
vector<Request> requests(n);
for (int i = 0; i < n; ++i) {
cin >> requests[i].arrival_time >> requests[i].processing_time;
requests[i].id = i + 1;
}
vector<Schedule> schedule;
vector<int> available_time(m);
for (int i = 0; i < n; ++i) {
int j = 0;
while (j < m && available_time[j] > requests[i].arrival_time) {
++j;
}
if (j == m) {
int k = 0;
for (int l = 1; l < m; ++l) {
if (available_time[l] < available_time[k]) {
k = l;
}
}
Schedule s = { requests[i].id, available_time[k] };
schedule.push_back(s);
available_time[k] += requests[i].processing_time;
} else {
Schedule s = { requests[i].id, requests[i].arrival_time };
schedule.push_back(s);
available_time[j] = requests[i].arrival_time + requests[i].processing_time;
}
}
sort(schedule.begin(), schedule.end(), [](const Schedule& a, const Schedule& b) {
return a.request_id < b.request_id;
});
for (int i = 0; i < n; ++i) {
cout << schedule[i].start_time << " ";
}
cout << endl;
return 0;
}
```
该代码实现了一个简单的请求调度器,其中:
- `Request` 结构体表示一个请求,包含唯一的 `id`、到达时间 `arrival_time` 和处理时间 `processing_time`。
- `Schedule` 结构体表示一个请求的调度情况,包含请求的 `id` 和开始时间 `start_time`。
- 在程序主函数中,首先读入请求的数量 `n` 和处理器的数量 `m`。
- 然后读入每个请求的到达时间和处理时间,并为每个请求分配唯一的 `id`。
- 接下来,程序按照以下规则为每个请求进行调度:
- 如果有处理器空闲,就将请求分配给第一个空闲的处理器。
- 如果所有处理器都在请求到达之前被占用了,就将请求分配给最先空闲的处理器。
- 最后,程序按照请求的 `id` 对调度情况进行排序,并输出每个请求的开始时间。
这个代码实现简单,易于理解。它并不使用任何高级数据结构或算法,而是使用基本的循环和条件语句来实现。
阅读全文