【算法设计与分析】— —实现最优载的贪心算法

news2024/12/27 15:33:51

🎃欢迎大家前去观看我的算法设计与分析专栏: 算法设计与分析_IT闫的博客-CSDN博客 希望对大家有所帮助!


🎃个人专栏:

🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客

🐳Java基础:Java基础_IT闫的博客-CSDN博客

🐋c语言:c语言_IT闫的博客-CSDN博客

🐟MySQL:数据结构_IT闫的博客-CSDN博客

🐠数据结构:​​​​​​数据结构_IT闫的博客-CSDN博客

💎C++:C++_IT闫的博客-CSDN博客

🥽C51单片机:C51单片机(STC89C516)_IT闫的博客-CSDN博客

💻基于HTML5的网页设计及应用:基于HTML5的网页设计及应用_IT闫的博客-CSDN博客​​​​​​

🥏python:python_IT闫的博客-CSDN博客

欢迎收看,希望对大家有用!

目录

🎯目的:

🎯内容:

 🎯代码(Java):

🎯 运行结果:

🎯算法分析:

🎯其他程序语言的实现:

🎐c语言程序:

🎐 python代码:

🎐C++代码: 


🎯目的:

1)了解贪心算法思想及基本原理;

2)掌握使用贪心算法求解问题的一般特征;

3)能够针对实际问题,能够正确选择贪心策略;

4)能够针对选择的贪心策略,证明算法的正确性;

5)能够根据贪心策略,正确编写代码;

6)能够正确分析算法的时间复杂度和空间复杂度。

🎯内容:

实现最优装载的贪心算法。

测试数据可选用:

假设轮船限重12kg

i

1

2

3

4

5

Wi(kg)

8

4

2

5

7

 🎯代码(Java):

package one;

import java.util.Vector;

public class Two {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		thing t1 = new thing(1, 8);
		thing t2 = new thing(2, 4);
		thing t3 = new thing(3, 2);
		thing t4 = new thing(4, 5);
		thing t5 = new thing(5, 7);
		Vector<thing> v = new Vector<thing>();
		v.add(t1);
		v.add(t2);
		v.add(t3);
		v.add(t4);
		v.add(t5);
		// 按重量排序
		for (int i = 0; i < 5; i++) {
			for (int j = 0; j < 4 - i; j++) {
				if (v.get(j).Wi > v.get(j + 1).Wi) {
					thing t = v.get(j);
					v.set(j, v.get(j + 1));
					v.set(j + 1, t);
				}
			}
		}
		int w = 0;
		int Weight = 12;
		System.out.println("选中的编号为:");
		for (int i = 0; i < 5; i++) {
			if (v.get(i).Wi + w <= Weight) {
				w += v.get(i).Wi;

				System.out.println(v.get(i).x);
			}
		}
	}
}

class thing {
	int x;
	int Wi;

	public thing(int x, int wi) {
		super();
		this.x = x;
		Wi = wi;
	}

	@Override
	public String toString() {
		return "thing [x=" + x + ", Wi=" + Wi + "]";
	}

}

🎯 运行结果:

🎯算法分析:

当储存n个对象时,

1.时间复杂度分析:

  • 对于排序操作,这里使用的是冒泡排序的方法,外层循环n次,内层循环了(n-1)次、(n-2)次、(n-3)次...1次,因此,排序操作的时间复杂度为O(n+(n-1)+(n-2)+...+1)=O(n^2).
  • 循环遍历vector的元素,执行n次,因此,该循环的时间复杂度为:O(n^2)。

综上所述:整段代码在存储n个对象时的时间复杂度为O(n^2)。

2.空间复杂度分析:

  • 声明了一个Vector对象v,其存储n个thing对象。因此,存储空间复杂度为:O(n)。
  • 声明了若干个int类型的变量w、weight、以及n个thing对象。因为这些变量和对象的数量随着输入规模的增加而增加,所以额外的时间复杂度可以看作O(n)。

综上所述,整段代码在存储n个对象的空间复杂度为O(n)。

        需要注意的是,上述分析假设输入规模n是固定的。如果输入规模n增加,例如thing对象的个数增加时,时间复杂度和空间复杂度可能会发生变化。但在给定的固定输入规模下,该代码的时间复杂度为O(n^2),空间复杂度为O(n)。因此,在处理大规模输入时要注意性能问题。

🎯其他程序语言的实现:

注:以下代码均有ai生成,读者如发现bug可以发在评论区,咱们一起解决❤️!

🎐c语言程序:

#include <stdio.h>

typedef struct {
    int x;
    int Wi;
} Thing;

void bubbleSort(Thing arr[], int n) {
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n - i - 1; j++) {
            if (arr[j].Wi > arr[j + 1].Wi) {
                Thing temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

int main() {
    Thing t1 = {1, 8};
    Thing t2 = {2, 4};
    Thing t3 = {3, 2};
    Thing t4 = {4, 5};
    Thing t5 = {5, 7};
    Thing v[5] = {t1, t2, t3, t4, t5};
    int size = 5;
    int w = 0;
    int Weight = 12;

    bubbleSort(v, size);

    printf("选中的编号为:\n");
    for (int i = 0; i < size; i++) {
        if (v[i].Wi + w <= Weight) {
            w += v[i].Wi;
            printf("%d\n", v[i].x);
        }
    }

    return 0;
}

 注意事项:

  • 在C语言中,没有直接对应Java的Vector类,而是使用了数组。
  • 在C语言中,没有自带的冒泡排序函数,需要实现自己的排序逻辑。

🎐 python代码:

class Thing:
    def __init__(self, x, Wi):
        self.x = x
        self.Wi = Wi

t1 = Thing(1, 8)
t2 = Thing(2, 4)
t3 = Thing(3, 2)
t4 = Thing(4, 5)
t5 = Thing(5, 7)
v = [t1, t2, t3, t4, t5]

# 按重量排序
for i in range(5):
    for j in range(4 - i):
        if v[j].Wi > v[j + 1].Wi:
            v[j], v[j + 1] = v[j + 1], v[j]

w = 0
Weight = 12
print("选中的编号为:")
for i in range(5):
    if v[i].Wi + w <= Weight:
        w += v[i].Wi
        print(v[i].x)

注意事项:

  • Python中没有严格定义类的访问修饰符,所以不需要使用public关键字。
  • Python中的列表使用方括号[]表示,而不是Java中的Vector
  • 在Python中,排序可以使用列表的sort()方法或者sorted()函数进行。在这里简单起见,使用了冒泡排序算法。

🎐C++代码: 

#include <iostream>
#include <vector>
using namespace std;

class Thing {
public:
    int x;
    int Wi;

    Thing(int x, int wi) {
        this->x = x;
        Wi = wi;
    }

    string toString() {
        return "thing [x=" + to_string(x) + ", Wi=" + to_string(Wi) + "]";
    }
};

int main() {
    Thing t1(1, 8);
    Thing t2(2, 4);
    Thing t3(3, 2);
    Thing t4(4, 5);
    Thing t5(5, 7);

    vector<Thing> v;
    v.push_back(t1);
    v.push_back(t2);
    v.push_back(t3);
    v.push_back(t4);
    v.push_back(t5);

    // 按重量排序
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 4 - i; j++) {
            if (v[j].Wi > v[j + 1].Wi) {
                Thing t = v[j];
                v[j] = v[j + 1];
                v[j + 1] = t;
            }
        }
    }

    int w = 0;
    int Weight = 12;
    cout << "选中的编号为:" << endl;
    for (int i = 0; i < 5; i++) {
        if (v[i].Wi + w <= Weight) {
            w += v[i].Wi;
            cout << v[i].x << endl;
        }
    }

    return 0;
}

注意事项:

  • C++中使用#include <vector>引入向量(Vector)的类。
  • 在C++中,使用push_back()方法向向量中添加元素。
  • 在C++中,使用coutendl来进行输出。 

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

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

相关文章

Java 客户端调用 WebService 接口的一种方式

文章目录 1. SoapUI 测试 WebService 接口2. Java 访问 WebService 接口 1. SoapUI 测试 WebService 接口 通过SoapUI创建一个SOAP Project&#xff1b; 项目名称自定义&#xff0c;WSDL地址维护WebService接口地址。点击OK即可 项目创建完成后&#xff0c;展开WebService项&…

孙哥分布式VIP课程

杜绝一两门课程割韭菜&#xff0c;杜绝引流之后换老师&#xff0c;全行业唯一支持全套试听的良心课程。 你目前学习提高跳槽是否有如下痛点 1、网上开源课程“琳琅满目”&#xff0c;学完后还是掌握的不够扎实&#xff0c;理解的不够透彻&#xff0c;学无所成2、学了若干知识…

浏览器插件开发爬虫记录

常用爬虫有各种各样的反爬限制&#xff0c;而如果是小数据量并且该网站反爬手段非常厉害的前提下&#xff0c;可以考虑使用浏览器插件作为爬虫手段 基本代码来源于这位博主分享的插件代码&#xff0c; 主要在他的基础上加了 请求代理、管理面板、脚本注入拦截到的请求数据和管…

Windows服务器获取本地文件夹文件

1、直接复制粘贴 通过远程连接到这个服务器&#xff0c;然后本机到服务器能直接粘贴复制文件上去 注&#xff1a;首先服务器要先开启远程桌面哦 2、Windows远程连接 有的不能复制粘贴的&#xff0c;可以用第二种方法。 ①、windowsR,输入mstsc ②、点击“选项”按钮&#x…

linux中Crontab定时参数

注&#xff1a;图片转载于 点我进入图片出处 * * * * * sh /data/var/test.sh >> test_crontab_log.log分钟 0~59 0表示没分周 小时 0~23 0表示每小时 天 1~31 *表示每天 月 1~12 *表示每月 周 0~7 */0/7表示每周

pytorch实现经典神经网络:VGG16模型之初探

文章链接 https://blog.csdn.net/weixin_44791964/article/details/102585038?ops_request_misc%257B%2522request%255Fid%2522%253A%2522169675238616800211588158%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id16967523861680…

谷歌 Chrome 浏览器正推进“追踪保护”功能

导读近日消息&#xff0c;根据国外科技媒体 Windows Latest 报道&#xff0c;谷歌计划在 Chrome 浏览器中推进“追踪保护”&#xff08;Tracking Protection&#xff09;功能&#xff0c;整合浏览器现有隐私功能&#xff0c;保护用户被网站跟踪。 根据一项 Chromium 提案&…

Java List 中存不同的数据类型

在最近的实践中&#xff0c;有人突然问了一个问题&#xff1a; 在 Java 的 List 中可以存不同的数据类型吗&#xff1f; 这个问题突然给问到了&#xff0c;我们都知道 Java 中的 List 中存的是对象&#xff0c;通常我们定义都会这样的定义&#xff1a; List<String> t…

ycb数据集筛选

tain数据集&#xff1a; 03. 04. 05. 06. 07. 08. 09. 10. 11. 13 14 15peach桃子&#xff1a; 16 17orange橘子&#xff1a; 18plum李子&#xff1a; 21 24 26sponge&#xff1a; 29 33 35 37 40large marker 43.phillips screwdriver 48 52 55 56…

零基础教程:使用YOLOV7训练VisDrone数据集

1.源码地址&#xff1a; https://github.com/WongKinYiu/yolov7 下载之后解压 2.环境准备 1.用pycharm打开项目文件&#xff0c;选择自己的虚拟环境 2.下载项目所需要的包和权重文件 打开Terminal 输入以下命令&#xff1a; pip install -r requirements.txt 下载预训练权…

用Python开发QQ机器人详解

前言 虽然该文最终是达到以python开发mirai机器人的目的&#xff0c;但起步教程&#xff0c;尤其是环境配置上仍然有大量的相同操作&#xff0c;对其他编程语言仍有借鉴之处 假设你已经安装好了 Java、Python等运行必须的环境 mirai生态 mirai官方生态文档 要使用mirai开发Q…

第四届厦门国际银行数创金融杯建模大赛火热进行中!丰厚奖励等你来拿!

第四届厦门国际银行数创金融杯建模大赛火热进行中&#xff01;厦门国际银行联合厦门大学数据挖掘中心诚邀您一起用科技的力量&#xff0c;探索数据的奥秘。 本届大赛以实际金融业务场景中的文本识别作为主题&#xff0c;设置了高达38万元的丰厚奖金以及竞赛获奖证书&#xff0c…

pdf怎么转成jpg图片格式

pdf怎么转成jpg图片格式&#xff1f;对于大家平时在工作或者生活中的图片使用习惯&#xff0c;经常需要将各种格式的文件转换成易于浏览和使用的JPG格式图片以便保存。如今&#xff0c;因为pdf文件具有更强的稳定性和设备兼容性&#xff0c;PDF文件在平时的电脑使用过程中可以说…

AQS面试题

更多面试资料请添加wx&#xff1a;suns45 ———Java的AQS——— 1、AQS的理解 AQS是一个锁框架&#xff0c;提供了扩展地方 当多个线程抢锁时&#xff0c;获取不到锁的线程&#xff0c;AQS会自动管理 AQS是同步队列条件队列 AQS分为4个时机&#xff0c;获取锁&#xff0c…

国产化技术探究达梦8数据库搭建一主一从双机热备守护Data Watch集群搭建实战

国产化技术探究达梦8数据库搭建一主一从双机热备守护集群搭建实战 一、环境说明 服务器类型IP地址操作系统数据库实例名称主机172.18.21.144centos7DMSERVER备机172.18.21.147centos7DMSERVER2 参数主库备库实例名称DMSERVERDMSERVER 2IP172.18.21.144172.18.21.147OGUID453…

有趣的数学 积分符号∫ (integration)简述

1、简述 积分是微积分的一个主要部分。它是求和概念的延伸。事实上&#xff0c;积分符号源自一个拉长的字母S&#xff0c;最初由莱布尼茨使用&#xff08;也有人说是牛顿&#xff09;&#xff0c;代表Summa&#xff0c;在拉丁语中意为“和”&#xff0c;对切片进行求和的想法。…

计算机的体系与结构

文章目录 前言一、冯诺依曼体系二、现代计算机的结构总结 前言 今天给大家介绍计算机的体系和结构&#xff0c;分为两个板块&#xff1a;冯诺依曼体系和现代计算机的结构。 一、冯诺依曼体系 冯诺依曼体系是将程序指令和数据一起存储的计算机设计概念结构。 冯诺依曼体系可以…

基于LSTM-Adaboost的电力负荷预测的MATLAB程序

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 主要内容&#xff1a; LSTM-AdaBoost负荷预测模型先通过 AdaBoost集成算法串行训练多个基学习器并计算每个基学习 器的权重系数,接着将各个基学习器的预测结果进行线性组合,生成最终的预测结果。代码中的LST…

MySQL之MHA集群

MHA概述 什么是 MHA MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点故障的问题。 MySQL故障切换过程中&#xff0c;MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切换…

hbba网站下载国家标准/行业标准的方法

hbba网站是不提供下载按钮并且不支持右键的&#xff0c;那么如何下载呢&#xff1f; 1、首先看一下pdf有多少页&#xff0c;一般标准介绍上有写。 2、使用edge或google浏览器打开pdf预览页面&#xff0c;打开开发者模式&#xff0c;用小箭头指向第一页&#xff0c;这样就获取到…