贪心算法-实验: 最优装载问题

贪心算法-实验: 最优装载问题

一、实验目的

1. 掌握各类数据结构的操作;

2. 掌握用c++语言描述与实现算法的方法;

3. 理解算法的概念,掌握算法复杂度分析技术;

二、实验内容

1. 运用C或C++语言,按要求完成算法实现;

2. 对所设计的算法采用大O符号进行时间复杂性分析;

三、实验任务

设有重量为(4,6,3,5,7,2,9)的7个集装箱,轮船的载重为26,求能够装载的集装箱的最大 数量?


首先,我们需要将集装箱按重量升序排序。然后,我们从最轻的集装箱开始,依次尝试将集装箱装入轮船,直到达到轮船的载重限制为止。最后,我们返回能够装载的集装箱数量。

在代码中,我们可以使用数组来存储集装箱的重量,然后使用 `qsort` 函数对数组进行排序。接着,我们遍历排序后的集装箱数组,尝试将集装箱装入轮船,直到达到载重限制为止。最后,我们返回能够装载的集装箱数量。


//当然,下面是使用 C 语言实现最优装载问题的示例代码:

//c
#include <stdio.h>
#include <stdlib.h>

// 比较函数用于
int compare(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}

int maxContainers(int shipCapacity, int weights[], int n) {
qsort(weights, n, sizeof(int), compare); // 按重量升序排序
int count = 0;
int currentWeight = 0;
for (int i = 0; i < n; i++) {
if (currentWeight + weights[i] <= shipCapacity) {
currentWeight += weights[i];
count++;
} else {
break;
}
}
return count;
}

int main() {
int weights[] = {4, 6, 3, 5, 7, 2, 9};
int shipCapacity = 26;
int n = sizeof(weights) / sizeof(weights[0]);
int maxContainersCount = maxContainers(shipCapacity, weights, n);
printf("最大能够装载的集装箱数量为: %d\n", maxContainersCount);
return 0;
}


//在这个示例中,我们使用了标准库函数 `qsort` 来对集装箱按重量进行升序排序。

在这个示例中,我们首先将集装箱按重量升序排序。然后从最轻的集装箱开始,依次尝试将集装箱装入轮船,直到达到轮船的载重限制为止。最后返回能够装载的集装箱数量。

时间复杂度分析:在这个算法中,集装箱的重量需要进行排序,因此时间复杂度为 O(nlogn),其中 n 是集装箱的数量。之后的遍历过程只需要线性时间,因此整体算法的时间复杂度为 O(nlogn)。

这个算法是一个经典的贪心算法,可以在较高效的时间复杂度下解决最装载问题。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值