【算法设计与分析】实验5:贪心算法—装载及背包问题

ops/2025/2/5 9:47:49/

目录

一、实验目的

二、实验环境

三、实验内容

四、核心代码

五、记录与处理

六、思考与总结

七、完整报告和成果文件提取链接

一、实验目的

        掌握贪心算法求解问题的思想;针对不同问题,会利用贪心算法进行问题建模、求解以及时间复杂度分析;并利用JAVA/C/C++等编程语言开展算法编码实践(语言自选)。

        理解装载问题及背包问题的贪心求解策略;对比分析与动态规划求解问题的算法异同;能够利用贪心算法,开展装载问题及背包问题的算法设计及编码实现。

二、实验环境

        1、机房电脑  Window11

        2、Eclipse/Dev-C++等

三、实验内容

实验要求及原理:

掌握贪心算法求解问题的策略及思路;

能够用贪心算法解决的问题一般都具有两个重要性质:贪心选择性质和最优子结构性质

1.贪心选择性质

贪心算法求解的问题的整体最优解可以通过一系列局部最优选择来达到,贪心算法不依赖将来所做的选择,也不依赖子问题的解,所以贪心算法一般是自顶向下解决问题。

2.最优子结构性质

当一个问题的最优解包含其子问题的最优解时,则此问题具有最优子结构性质。动态规划算法和贪心算法求解的问题都具有最优子结构性质

基于贪心算法设计装载问题的求解;

针对指定容量C的船,给定n个集装箱,各集装箱重量为wi。如何将集装箱装到船上保证装的集装个数最多?针对装载问题,如何利用贪心算法进行算法设计及优化。

问题分析:

wi越小可装载的集装箱个数越多,所以采用优先选取重量轻的集装箱装船的贪心思路;将集装箱重量从小到大排列,重量最轻的先装,将尽可能多的集装箱装到船上,每一次选择重量最轻的,这样就保证了最终问题的解是最优解。

在装载算法中,由于排序步骤是主导因素,因此采用最优的排序算法时,时间复杂度为O(nlog n)

基于贪心算法设计背包问题的求解;

针对指定容量C的背包,给定n个物品,各物品具有重量wi、价值vi。如何选择物品装入背包,使得价值最大(未要求0/1性)?背包问题,贪心算法设计求解策略及优化。

问题分析:

首先计算每种物品的单位重量的价值:vi/wi,然后根据贪心选择策略将尽可能多的单位重量价值最高的物品放入背包。若将这种物品全部放入背包后,背包内总重量还未超过c,就选择单位重量价值次高的物品并尽可能多的装入背包,以此类推不断进行下去直到背包装满

动态规划求解0/1背包问题的思路差异:

对于0/1背包问题,贪心算法得到的不是全局最优解,0/1背包只能用动态规划算法来解决,因为该问题具有约束条件和目标函数的特性,而动态规划可以通过记录子问题的解来避免重复计算,并逐步构建出全局最优解,系统地考虑所有可能的解和约束条件,能够找到全局最优解。

在设计背包问题中,我使用了快速排序算法进行排序,使用了最快速的排序算法,该算法的时间复杂度最优,也为O(nlogn)

对上述算法进行时间复杂性分析,并输出程序运行时间及运行结果。

算法的时间复杂度为O(nlog n)。

四、核心代码

void loading(float C, float w[], int x[], int n) {// 创建一个数组来存储重量和原始索引的配对// 将每个物品的重量和索引组成一个pair,存入items数组pair<float, int> items[n];for (int i = 0; i < n; i++) {items[i] = make_pair(w[i], i); }// 按照重量进行排序sort(items, items + n, compare); // 初始化x数组为0 for (int i = 0; i < n; i++) {x[i] = 0;}// 装载集装箱for (int i = 0; i < n && items[i].first <= C; i++) {x[items[i].second] = 1; // 标识为1,表示商品要取C -= items[i].first;    // 调整更新货船容量}
}
// 快速排序函数,递归地对数组进行排序
void quickSort(float arr[], float w[], float v[], int low, int high) {if (low < high) {// pi是分区索引,arr[pi]现在在正确的位置int pi = partition(arr, w, v, low, high);// 分别对分区前后的元素进行排序quickSort(arr, w, v, low, pi - 1);quickSort(arr, w, v, pi + 1, high);}
}// 根据单位重量价值对物品进行排序
void Sort(int n, float w[], float v[]) {for (int i = 0; i < n; i++)z[i] = v[i] / w[i]; // 用z[]存物品的单位重量价值quickSort(z, w, v, 0, n - 1); // 调用快速排序函数进行排序
}

五、记录与处理

1.基于贪心算法设计装载问题的求解:

2.基于贪心算法设计背包问题的求解:

六、思考与总结

贪心算法是一种逐步构建解决方案的算法策略,贪心算法通过一系列局部最优选择来构建全局最优解,其关键在于每一步选择都是当前状态下的最佳决策,是自顶向下的策略动态规划算法一般是自底向上解决问题。贪心具有两个性质:贪心选择性质和最优子结构性质

七、完整报告和成果文件提取链接

完整可运行代码以及相关实验报告以下链接可获取:
链接: https://pan.baidu.com/s/1iss6-C2nxZQGkEpo-WDn0A?pwd=g5cg 提取码: g5cg 


http://www.ppmy.cn/ops/155833.html

相关文章

deepseek+vscode自动化测试脚本生成

近几日Deepseek大火,我这里也尝试了一下,确实很强。而目前vscode的AI toolkit插件也已经集成了deepseek R1,这里就介绍下在vscode中利用deepseek帮助我们完成自动化测试脚本的实践分享 安装AI ToolKit并启用Deepseek 微软官方提供了一个针对AI辅助的插件,也就是 AI Toolk…

华为小米vivo向上,苹果荣耀OPPO向下

日前&#xff0c;Counterpoint发布的手机销量月度报告显示&#xff0c;中国智能手机销量在2024年第四季度同比下降3.2%&#xff0c;成为2024年唯一出现同比下滑的季度。而对于各大智能手机品牌来说&#xff0c;他们的市场份额和格局也在悄然发生变化。 华为逆势向上 在2024年第…

【Elasticsearch】allow_no_indices

- **allow_no_indices 参数的作用**&#xff1a; 该参数用于控制当请求的目标索引&#xff08;通过通配符、别名或 _all 指定&#xff09;不存在或已关闭时&#xff0c;Elasticsearch 的行为。 - **默认行为**&#xff1a; 如果未显式设置该参数&#xff0c;默认值为 …

穷举vs暴搜vs深搜vs回溯vs剪枝系列一>解数独

题目&#xff1a; 解析&#xff1a; 部分决策树&#xff1a; 代码设计&剪枝&回溯&#xff1a; 代码&#xff1a; class Solution {private boolean[][] row, col;private boolean[][][] gird; public void solveSudoku(char[][] board) {//下标->数字&#xff…

【25考研】南开大学计算机复试攻略及注意事项

一、复试内容 复试为差额复试&#xff0c;各专业分别按录取成绩由高到低进行录取。复试成绩低于60分(不含60分)&#xff0c;确定为复试不合格&#xff0c;复试不合格的考生不予录取&#xff0c;不再进行录取成绩的加权计算。 复试分为C/C编程能力测试、专业综合基础测试、面试…

Linux系统管理

文章目录 一、进程与服务二、systemctl基本语法操作 三、系统运行级别Linux进程运行级别查看当前运行级别修改当前运行级别 四、关机重启命令 一、进程与服务 守护进程与服务是一个东西。 二、systemctl 基本语法 systemctl start|stop|restart|status 服务名查看服务的方法…

[EAI-030] DeepSeek 的 Janus,统一的多模态理解和生成模型

Paper Card 论文标题&#xff1a;Janus: Decoupling Visual Encoding for Unified Multimodal Understanding and Generation 论文作者&#xff1a;Chengyue Wu, Xiaokang Chen, Zhiyu Wu, Yiyang Ma, Xingchao Liu, Zizheng Pan, Wen Liu, Zhenda Xie, Xingkai Yu, Chong Ruan…

【2025年更新】1000个大数据/人工智能毕设选题推荐

文章目录 前言大数据/人工智能毕设选题&#xff1a;后记 前言 正值毕业季我看到很多同学都在为自己的毕业设计发愁 Maynor在网上搜集了1000个大数据的毕设选题&#xff0c;希望对大家有帮助&#xff5e; 适合大数据毕业设计的项目&#xff0c;完全可以作为本科生当前较新的毕…