GDPU 算法分析与设计 天码行空6

2024-05-09 23:44

本文主要是介绍GDPU 算法分析与设计 天码行空6,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、【实验目的】

(1)熟悉贪心法的设计思想
(2)理解贪心法的最优解与正确性证明之间的关系
(3)比较活动选择的各种“贪心”策略,探讨最优算法。

二、【实验内容】

有n项活动申请使用同一场所,每项活动有一个开始和结束时间,如果任何两个活动不能重叠,问如何选择这些活动,使得被安排活动数量达到最多。
要求至少选择两项“贪心”策略进行比较,其中一个是最优的。建议最优算法参考教材P88的算法4.1.同时可以采用教材例4.1的数据进行验证。

三、实验源代码

💖 Main.java

import java.util.ArrayList;
import java.util.Collections;public class Main
{
//	活动类static class Activity{int start;// 开始时间int end;// 结束时间public Activity(int l, int r){super();this.start = l;this.end = r;}}static int[] s = { 1, 3, 2, 5, 4, 5, 6, 8, 8, 2 };static int[] e = { 4, 5, 6, 7, 9, 9, 10, 11, 12, 13 };static int n;static ArrayList<Activity> list;public static void main(String[] args){n = s.length;list = new ArrayList<>();for (int i = 0; i < n; i++)list.add(new Activity(s[i], e[i]));System.out.println("\n最大活动数:" + greedyByEnd() + "\n");System.out.println("\n最大活动数:" + greedyByStart() + "\n");System.out.println("\n最大活动数:" + greedyByLength() + "\n");}private static int greedyByEnd(){Collections.sort(list, (o1, o2) -> o1.end - o2.end);// 根据结束时间升序排序System.out.println("根据结束时间排序:");return cal();}private static int greedyByStart(){Collections.sort(list, (o1, o2) -> o1.start - o2.start);System.out.println("根据开始时间排序:");return cal();}private static int greedyByLength(){Collections.sort(list, (o1, o2) -> (o1.end - o1.start) - (o2.end - o2.start));System.out.println("根据活动时长排序:");return cal();}private static int cal(){int margin = -1;// 表示当前的最迟的活动结束时间int ans = 0;System.out.println("选择的活动编号:");for (int i = 0; i < n; i++){Activity x = list.get(i);if (x.start >= margin){System.out.print((i + 1) + " ");ans++;margin = x.end;}}return ans;}
}

四、实验结果

根据结束时间排序:
选择的活动:
1 4 8 
最大活动数:3根据开始时间排序:
选择的活动:
1 5 
最大活动数:2根据活动时长排序:
选择的活动:
1 2 4 
最大活动数:3

这篇关于GDPU 算法分析与设计 天码行空6的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/974820

相关文章

MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析

《MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析》本文将详细讲解MyBatis-Plus中的lambdaUpdate用法,并提供丰富的案例来帮助读者更好地理解和应... 目录深入探索MyBATis-Plus中Service接口的lambdaUpdate用法及示例案例背景

MyBatis-Plus中静态工具Db的多种用法及实例分析

《MyBatis-Plus中静态工具Db的多种用法及实例分析》本文将详细讲解MyBatis-Plus中静态工具Db的各种用法,并结合具体案例进行演示和说明,具有很好的参考价值,希望对大家有所帮助,如有... 目录MyBATis-Plus中静态工具Db的多种用法及实例案例背景使用静态工具Db进行数据库操作插入

如何通过Golang的container/list实现LRU缓存算法

《如何通过Golang的container/list实现LRU缓存算法》文章介绍了Go语言中container/list包实现的双向链表,并探讨了如何使用链表实现LRU缓存,LRU缓存通过维护一个双向... 目录力扣:146. LRU 缓存主要结构 List 和 Element常用方法1. 初始化链表2.

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C

MySQL表锁、页面锁和行锁的作用及其优缺点对比分析

《MySQL表锁、页面锁和行锁的作用及其优缺点对比分析》MySQL中的表锁、页面锁和行锁各有特点,适用于不同的场景,表锁锁定整个表,适用于批量操作和MyISAM存储引擎,页面锁锁定数据页,适用于旧版本... 目录1. 表锁(Table Lock)2. 页面锁(Page Lock)3. 行锁(Row Lock

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

通俗易懂的Java常见限流算法具体实现

《通俗易懂的Java常见限流算法具体实现》:本文主要介绍Java常见限流算法具体实现的相关资料,包括漏桶算法、令牌桶算法、Nginx限流和Redis+Lua限流的实现原理和具体步骤,并比较了它们的... 目录一、漏桶算法1.漏桶算法的思想和原理2.具体实现二、令牌桶算法1.令牌桶算法流程:2.具体实现2.1

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep