C++代码完成以下编程任务:使用贪心算法实现0-1背包问题的求解,测试数据随机生成,相同程序重复执行 100 次以得出执行时间
时间: 2024-03-22 08:39:28 浏览: 14
以下是使用贪心算法实现0-1背包问题的C++代码,其中使用了结构体来存储每个物品的重量和价值:
```c++
#include <iostream>
#include <algorithm>
#include <ctime>
using namespace std;
// 物品结构体
struct item {
int weight; // 重量
int value; // 价值
};
// 比较函数,按照单位价值从大到小排序
bool cmp(item a, item b) {
return a.value * 1.0 / a.weight > b.value * 1.0 / b.weight;
}
// 贪心算法求解0-1背包问题
int knapsack(item items[], int n, int maxWeight) {
sort(items, items + n, cmp); // 按照单位价值从大到小排序
int result = 0;
for (int i = 0; i < n; i++) {
if (maxWeight >= items[i].weight) { // 背包可以装下整个物品
result += items[i].value;
maxWeight -= items[i].weight;
} else { // 背包无法装下整个物品,装入部分
result += maxWeight * items[i].value / items[i].weight;
break;
}
}
return result;
}
int main() {
srand((unsigned)time(NULL)); // 随机数种子
const int N = 100; // 物品数量
const int MAX_WEIGHT = 10000; // 背包最大重量
item items[N]; // 物品数组
for (int i = 0; i < N; i++) { // 随机生成物品的重量和价值
items[i].weight = rand() % 1000 + 1;
items[i].value = rand() % 1000 + 1;
}
clock_t start, end;
start = clock(); // 记录开始时间
for (int i = 0; i < 100; i++) { // 执行100次
knapsack(items, N, MAX_WEIGHT); // 求解0-1背包问题
}
end = clock(); // 记录结束时间
double duration = double(end - start) / CLOCKS_PER_SEC; // 计算执行时间
cout << "Execution time: " << duration << "s" << endl;
return 0;
}
```
上述代码中,我们使用 `srand((unsigned)time(NULL))` 来设置随机数种子,保证每次生成的随机数不同;使用 `clock()` 函数来记录程序开始和结束的时间,然后计算执行时间。
实际上,该贪心算法并不能保证得到最优解,只能得到一个较优解。如果需要得到最优解,可以使用动态规划算法。