贪心算法-活动安排问题和背包问题

news2024/10/6 1:34:42

实验6贪心算法-活动安排问题和背包问题

实验目的:

  1. 理解贪心算法的基本思想
  2. 运用贪心算法解决实际问题

实验内容:

  1. 采用贪心方法编程实现以下问题的算法

1.如何安排下列活动使得使用的活动场所最少,并给出具体的安排方法。

活动

a

b

c

d

e

f

g

开始

0

3

4

9

7

1

6

完成

2

7

7

11

10

5

8

2.现有一个容量为50的背包和三个物品,它们的重量分别是10,20,30,价值分别为60,100,120,如何装入物品使背包装满,且装入背包的物品总价值最大。

实验步骤:

  • 活动安排问题

  • def greedy_activity_selector(start, finish):
        activities = sorted(range(len(finish)), key=lambda x: finish[x])
        chosen_activities = [activities[0]]
        last_finish_time = finish[activities[0]]
    
        for i in activities[1:]:
            if start[i] >= last_finish_time:
                chosen_activities.append(i)
                last_finish_time = finish[i]
    
        return chosen_activities
    
    
    start = [0,3,4,9,7,1,6]
    finish = [2,7,7,11,10,5,8]
    
    selected = greedy_activity_selector(start, finish)
    print("Selected activities:", selected)
    
    

  • 背包问题

  • def greedy_knapsack(values, weights, capacity):
        value_per_weight = [v/w for v, w in zip(values, weights)]
        items = sorted(range(len(values)), key=lambda i: value_per_weight[i], reverse=True)
    
        max_value = 0
        fractions = [0] * len(values)  
        for i in items:
            if weights[i] <= capacity:
                fractions[i] = 1
                max_value += values[i]
                capacity -= weights[i]
            else:
                fractions[i] = capacity / weights[i]
                max_value += values[i] * capacity / weights[i]
                break  
    
        return max_value, fractions
    
    values = [60, 100, 120]
    weights = [10, 20, 30]
    capacity = 50
    
    max_value, fractions = greedy_knapsack(values, weights, capacity)
    print("Maximum value in knapsack:", max_value)
    print("Fractions of items taken:", fractions)
    

实验感想:

        贪心算法在这两个问题上的应用非常直观和简洁。它不需要复杂的回溯或穷举,只需按照某种策略选择当前最优解,这大大简化了问题求解的过程。贪心算法在活动安排和分数背包问题上的效率非常高,这是因为它们都拥有贪心选择性质和最优子结构。但在其他背包问题(如0-1背包问题)上,贪心算法可能无法找到最优解,这体现了算法效率和效果之间的平衡。

        在背包问题中,将问题转化为分数背包问题,使我们能够应用贪心策略。这种问题转化的能力是解决复杂问题的关键。通过实验,我更深刻地理解了贪心算法适用的问题类型。贪心算法适用于那些局部最优解能导致全局最优解的问题。通过编写代码实现这些算法,我不仅加深了对算法理论的理解,还提高了编程能力和调试技巧。解决这类问题需要良好的逻辑思维和算法设计能力。实验过程中,我学会了如何分析问题、设计算法,并将这些算法转化为代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1619303.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

全新Storm Core API管理系统源码 免授权版

全新Storm Core API管理系统源码 免授权版 本系统为API系统,实现了api集成等基础功能,以后可能会更新key调用api,或者实现付费功能,敬请期待,前端模板均无加密,用户可自行二开,具体请看图 测试环境:PHP7.2+MySQL5.6 访问:http://你的域名/install 进行安装 伪静态…

AIGC实战——基于Transformer实现音乐生成

AIGC实战——基于Transformer实现音乐生成 0. 前言1. 音乐生成的挑战2. MuseNet3. 音乐数据3.1 巴赫大提琴组曲数据集3.2 解析 MIDI 文件3.3 分词3.4 创建训练数据集 4. MuseNet 模型4.1 正弦位置编码4.2 多输入/输出 5. 音乐生成 Transformer 的分析6. 多声部音乐分词6.1 网格…

含匹配扰动的多智能体领航跟随一致性Matlab仿真

文章目录 [TOC](文章目录) 前言一、问题描述二、基于LQR的观测器和控制器设计1.观测器设计2.控制器设计 三、数值仿真四、参考文献总结 前言 ​本文探讨了带有匹配扰动的多智能体领航跟随一致性控制方法&#xff0c;并提供了相应的Matlab仿真代码。 具体的设计步骤如下&#…

Algorius Net Viewer 2024.2.1 (Windows) - 网络可视化、管理、监控和清点

Algorius Net Viewer 2024.2.1 (Windows) - 网络可视化、管理、监控和清点 Comprehensive software product for visualizing, administering, monitoring, and inventorying computers network of any level 请访问原文链接&#xff1a;Algorius Net Viewer 2024.2.1 (Windo…

【动态规划】C++ 子序列问题(递增子序列、数对链、定差子序列、斐波那契子序列...)

文章目录 1. 前言2. 例题最长递增子序列 3. 算法题3.1_摆动序列3.2_最长递增子序列的个数3.3_最长数对链[3.4_ 最长定差子序列](https://leetcode.cn/problems/longest-arithmetic-subsequence-of-given-difference/description/)3.5_最长的斐波那契子序列的长度3.6_最长等差数…

剪画APP动漫AI工具|短剧轻松变动漫,开辟出海新方向

近期&#xff0c;剪画全新升级“AI动漫”功能&#xff0c;让创作者们打开全新的视频创作方式。 这个功能把我们的短剧作品快速转化为动漫风格&#xff0c;非常精准和细腻 在剪画将AI动漫功能升级后&#xff0c;越来越多的使用者将短剧变身成动漫效果发布到平台后&#xff0c;…

Git 保姆级教程(一):Git 基础

一、获取 Git 仓库 通常有两种获取 Git 项目仓库的方式&#xff1a; 1. 将尚未进行版本控制的本地目录转换为 Git 仓库&#xff1b; 2. 从其它服务器克隆 一个已存在的 Git 仓库。 两种方式都会在你的本地机器上得到一个工作就绪的 Git 仓库。 1.1 git init&#xff08;本地…

Fisher判别示例:鸢尾花(iris)数据(R)

先读取iris数据&#xff0c;再用程序包MASS&#xff08;记得要在使用MASS前下载好该程序包&#xff09;中的线性函数lda()作判别分析&#xff1a; data(iris) #读入数据 iris #展示数据 attach(iris) #用变量名绑定对应数据 library(MASS) #加载MASS程序包 ldlda(Species~…

c++的策略模式,就是多态

一、定义&#xff1a; 策略模式定义了一系列的算法&#xff0c;并将每一个算法封装起来&#xff0c;而且使它们还可以相互替换。 策略模式让算法独立于使用它的客户而独立变化。 二&#xff0c;核心 抽象策略&#xff08;抽象基类&#xff09;&#xff08;Strategy&#xff09…

Fork for Mac v2.42 激活版 Git客户端

Fork for Mac是一款运行在Mac平台上的Git客户端&#xff0c;Fork Mac版具备基本的取、推、提交、修改、创建和删除分支和标签、创建和删除远程备份等功能&#xff0c;还有实用的差异查看器&#xff0c;你可以通过清晰的视图快速发现源代码中的更改。 Fork for Mac v2.42 激活版…

【C++】优先队列

优先队结构的不同物理结构与常用操作算法 优先队列是一种特殊的队列,队列中的元素具有优先级,每次弹出操作会弹出优先级最高的元素。 优先队列常用的物理结构有: 1. 数组:简单但不高效,插入和删除操作需要移动大量元素,时间复杂度高。 2. 二叉堆:是一种完全二叉树,通常用数…

在Jupyter notebook中添加虚拟环境

通常我们打开Jupyter notebook&#xff0c;创建一个新文件&#xff0c;只有一个Python3&#xff0c;但是我们也会想使用自己创建的虚拟环境&#xff0c;很简单仅需几部即可将自己的conda环境添加到jupyter notebook中。 1. 创建并激活conda环境&#xff08;已有可跳过&#xf…

【QT进阶】Qt http编程之实现websocket server服务器端

往期回顾 【QT进阶】Qt http编程之json解析的简单介绍-CSDN博客 【QT进阶】Qt http编程之nlohmann json库使用的简单介绍-CSDN博客 【QT进阶】Qt http编程之websocket的简单介绍-CSDN博客 【QT进阶】Qt http编程之实现websocket server服务器端 一、最终效果 通过ip地址和端口…

Redis入门到通关之Redis数据结构-Hash篇

文章目录 ☃️ 概述☃️底层实现☃️源码☃️其他 欢迎来到 请回答1024 的博客 &#x1f353;&#x1f353;&#x1f353;欢迎来到 请回答1024的博客 关于博主&#xff1a; 我是 请回答1024&#xff0c;一个追求数学与计算的边界、时间与空间的平衡&#xff0c;0与1的延伸的后…

使用 vllm 本地部署 cohere 的 command-r

使用 vllm 本地部署 cohere 的 command-r 0. 引言1. 安装 vllm2. 本地部署 cohere 的 command-r3. 使用 cohere 的 command-r 0. 引言 此文章主要介绍使用 使用 vllm 本地部署 cohere 的 command-r。 1. 安装 vllm 创建虚拟环境&#xff0c; conda create -n myvllm python…

微软开源了Phi-3-mini适用于移动硬件设备

&#x1f989; AI新闻 &#x1f680; 微软开源了Phi-3-mini适用于移动硬件设备 摘要&#xff1a;微软最新开源的小参数大语言模型Phi-3-mini&#xff0c;包括其架构特点、训练数据、性能测试以及未来发布计划。该模型拥有38亿参数&#xff0c;占用内存少&#xff0c;且在语言…

JVM--Java对象到底存在哪?

Java对象存放在堆中&#xff0c;但堆又分为新生代和老年代&#xff0c;新生代又细分为 Eden、From Survivor、To Survivor。那我们创建的对象到底在哪里&#xff1f; 堆分为新生代和老年代&#xff0c;新生代用于存放使用后就要被回收的对象&#xff08;朝生夕死&#xff09;&a…

单片机学习过程

继电器光耦隔离电压转换步进电机直流电机 arduino是目前最好用的一种&#xff0c;他提供了完整的设备库文件&#xff0c;任何外部设备只要查找相应的库&#xff0c;就可以很方便的使用 &#xff0c; 但是如果不去学习51 或stm32 或 嵌入式玩玩还可以&#xff0c;如果碰到没有实…

Navicat和MySQL的安装、破解以及MySQL的使用(详细)

1、下载 Navicat Navicat 官网&#xff1a;www.navicat.com.cn/ 在产品中可以看到很多的产品&#xff0c;点击免费试用 Navicat Premium 即可&#xff0c;是一套多连数据库开发工具&#xff0c;其他的只能连接单一类型数据库 点击试用 选择系统直接下载 二、安装 Navicat 安…

【C++】---STL之vector的模拟实现

【C】---STL之vector的模拟实现 一、vector在源码中的结构&#xff1a;二、vector类的实现&#xff1a;1、vector的构造2、析构3、拷贝构造4、赋值运算符重载5、迭代器6、operator[ ]7、size()8、capacity()9、reserve()10、resize()11、empty()12、push_back()13、pop_back()1…