#include <iostream> #include<vector> #include<algorithm> using namespace std; class mycompare { public: bool operator()(int s1, int s2) { return s1 <s2; } }; int main() { mycompare mycompare1; int n, m, c,i; vector<int> v1, v2; cout << "作业个数为:"; cin >> n; cout << "作业时间依次为:" <<endl; for (i = 0; i < n; i++) { cin >>c; v1.push_back(c); } sort(v1.begin(), v1.end(), mycompare1);//作业时间降序排序 cout <<"处理机个数为:"; cin >> m; for (i = 0; i < m; i++) v2.push_back(0); for (i = 0; i <n; i++) { sort(v2.begin(), v2.end());//处理机完成作业时间升序排列 v2[0] += v1[i];//将作业分配给最先空闲的处理机,并将处理机完成作业时间加上相应作业时间 } cout <<"最短处理机时间为:" <<*v2.rbegin()<<endl; return 0; }此代码的时间复杂度和空间复杂度
时间: 2024-04-03 13:31:09 浏览: 37
#include <iostream>
这段代码的时间复杂度为 O(nlogn),其中 n 为作业个数。这是由于代码中使用了 STL 中的 sort 函数对作业时间进行了降序排序,时间复杂度为 O(nlogn),而后面的循环中对处理机完成作业时间进行了升序排序,时间复杂度为 O(mlogm),m 为处理机个数,但是由于 m 远小于 n,因此可以忽略不计。接着,循环中的分配作业的操作,时间复杂度为 O(nlogm),最坏情况下,需要将 n 个作业分配到 m 个处理机中,因此需要进行 n 次分配操作,每次操作都需要对 m 个处理机完成作业时间进行排序,时间复杂度为 O(mlogm),因此总的时间复杂度为 O(nlogn + nlogm)。
这段代码的空间复杂度为 O(n + m),其中 n 为作业个数,m 为处理机个数。这是由于代码中使用了 STL 中的 vector 来存储作业时间和处理机完成作业时间,因此需要分别开辟 n 和 m 个空间来存储这些数据。此外,由于只使用了常数个变量,因此不会对空间复杂度产生影响。
阅读全文