重新整理数据结构与算法(c#)——算法套路贪心算法[二十八]
前言
贪心算法,记得学的时候还是大学的时候,再次来总结一下吧。
贪心算法并不是指具体的固定代码,而是指一种思路,加入我们每次都选最好的选择,那么很大可能会得到最好的结果。
题目:

正文
思路,加入把k1到k5轮询一遍,发现k1、k2、k3可以覆盖范围最多,随便取一个,假设取k1。
那么剩下广播地区就余下除了k1的需要覆盖。
那么现在广播k1没了,就剩下k2到k5广播。
继续前面的操作,看下这次谁能覆盖剩下的多,然后就取那一个。
知道所有地区被覆盖为止。
代码实现:
static void Main(string[] args)
{
//初始化电台
Dictionary<string, HashSet<string>> broadcasts = new Dictionary<string, HashSet<string>>();
HashSet<String> k1 = new HashSet<string>();
k1.Add("北京");
k1.Add("上海");
k1.Add("天津");
HashSet<string> k2 = new HashSet<string>();
k2.Add("广州");
k2.Add("北京");
k2.Add("深圳");
HashSet<string> k3 = new HashSet<string>();
k3.Add("成都");
k3.Add("上海");
k3.Add("杭州");
HashSet<string> k4 = new HashSet<string>();
k4.Add("上海");
k4.Add("天津");
HashSet<string> k5 = new HashSet<string>();
k5.Add("杭州");
k5.Add("大连");
broadcasts.Add("k1",k1);
broadcasts.Add("k2", k2);
broadcasts.Add("k3", k3);
broadcasts.Add("k4", k4);
broadcasts.Add("k5", k5);
//初始化要覆盖的地区
HashSet<String> allAreas = new HashSet<String>();
allAreas.Add("北京");
allAreas.Add("上海");
allAreas.Add("天津");
allAreas.Add("广州");
allAreas.Add("深圳");
allAreas.Add("成都");
allAreas.Add("杭州");
allAreas.Add("大连");
//创建ArrayList, 存放选择的电台集合
List<String> selects = new List<String>();
HashSet<String> tempSet = new HashSet<String>();
string maxKey = string.Empty;
while (allAreas.Count != 0)
{
maxKey = string.Empty;
int maxNum = 0;
foreach (String key in broadcasts.Keys)
{
tempSet.Clear();
tempSet.UnionWith(allAreas);
tempSet.IntersectWith(broadcasts[key]);
if (tempSet.Count>0&&(maxKey==string.Empty||tempSet.Count> maxNum))
{
maxKey = key;
maxNum = tempSet.Count;
}
}
//选好后移除
if (maxKey != string.Empty)
{
selects.Add(maxKey);
allAreas.ExceptWith(broadcasts[maxKey]);
}
}
foreach (var data in selects)
{
Console.WriteLine(data);
}
Console.Read();
}
结果:

贪心算法不一定是最优解,但是这种解法比较快,不然要把所有的情况考虑进去。
重新整理数据结构与算法(c#)——算法套路贪心算法[二十八]的更多相关文章
- Java 算法(一)贪心算法
Java 算法(一)贪心算法 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 一.贪心算法 什么是贪心算法?是指在对问题进行求 ...
- 『嗨威说』算法设计与分析 - 贪心算法思想小结(HDU 2088 Box of Bricks)
本文索引目录: 一.贪心算法的基本思想以及个人理解 二.汽车加油问题的贪心选择性质 三.一道贪心算法题点拨升华贪心思想 四.结对编程情况 一.贪心算法的基本思想以及个人理解: 1.1 基本概念: 首先 ...
- python常用算法(6)——贪心算法,欧几里得算法
1,贪心算法 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的的时在某种意义上的局部最优解. 贪心算法并不保证会得到最优解,但 ...
- 浅谈压缩感知(二十八):压缩感知重构算法之广义正交匹配追踪(gOMP)
主要内容: gOMP的算法流程 gOMP的MATLAB实现 一维信号的实验与结果 稀疏度K与重构成功概率关系的实验与结果 一.gOMP的算法流程 广义正交匹配追踪(Generalized OMP, g ...
- JavaScript算法模式——动态规划和贪心算法
动态规划 动态规划(Dynamic Programming,DP)是一种将复杂问题分解成更小的子问题来解决的优化算法.下面有一些用动态规划来解决实际问题的算法: 最少硬币找零 给定一组硬币的面额,以及 ...
- JAVA常见算法题(二十八)
package com.forezp.util; import java.util.Arrays; /** * 两个int数组,都是从小到大的的排列,请合并为一个新的数组,也是从小到到大的排列, * ...
- 重新整理 .net core 实践篇—————Mediator实践[二十八]
前言 简单整理一下Mediator. 正文 Mediator 名字是中介者的意思. 那么它和中介者模式有什么关系呢?前面整理设计模式的时候,并没有去介绍具体的中介者模式的代码实现. 如下: https ...
- 个人总结-----非贪心算法的图的m着色判断及优化问题
1.问题描述: 对于著名的图的m着色,有两个主要的问题,一个是图的m色判定问题,一个是图的m色优化问题,描述如下. 图的m色判定问题: 给定无向连通图G和m种颜色.用这些颜色为图G的各顶点着色.问是否 ...
- 贪心算法(2)-Kruskal最小生成树
什么是最小生成树? 生成树是相对图来说的,一个图的生成树是一个树并把图的所有顶点连接在一起.一个图可以有许多不同的生成树.一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n ...
- 贪心算法:旅行商问题(TSP)
TSP问题(Traveling Salesman Problem,旅行商问题),由威廉哈密顿爵士和英国数学家克克曼T.P.Kirkman于19世纪初提出.问题描述如下: 有若干个城市,任何两个城市之间 ...
随机推荐
- Codeforces Round 169 (Div. 2)C. Little Girl and Maximum Sum(差分、贪心)
目录 题面 链接 题意 题解 代码 总结 题面 链接 C. Little Girl and Maximum Sum 题意 给q个[l,r]将所有这些区间里面的数相加和最大. 可以进行的操作是任意排列数 ...
- dos-基础用法
DOS(磁盘操作系统)是一个早期的基于命令行的操作系统,尽管现代操作系统已经发展为图形用户界面(GUI),但是了解和掌握一些基本的DOS命令仍然非常有用,尤其是在处理批处理脚本.网络管理或者在没有图形 ...
- 【python】使用百度api进行音频文件转写
[python]使用百度api进行音频文件转写 脚本目标: 智能云的音频文件转写文档只给了个demo,每次只能传1分钟以内的音频啥的,不好直接用,简单打包一下,做到把音频放文件夹,直接出转写结果就行了 ...
- pcm5102芯片解析之基本概念
一 前记 1 在音频领域深耕,那就要不断的前行.最近有几个项目需要用到pcm5102这颗料,藉此机会,针对这个料进行深入的研究一下.做一一些简要的分析. 二 概念 音频芯片的指标,其实,很多年都没啥变 ...
- Kotlin 语法糖(对象不为空返回自身,为空返回其他)
原文地址: Kotlin 语法糖(对象不为空返回自身,为空返回其他) - Stars-One的杂货小窝 开发中,经常会有这样逻辑: 判断对象如果不为空,则取对象本身; 为空,则得到其他对象; 然后每次 ...
- linux系统运行时参数命令、网络、磁盘参数和日志监控
重点内容 linux基础命令和工具 CPU性能监控 内存性能监控 文件IO性能监控 网络IO监控 1 linux基础命令和工具 1.1 Grep搜索字符 grep命令用于在文件中执行关键字搜索,并显示 ...
- Web服务器通信原理
Web服务器通信原理 1.区分系统 2.DOS系统 3.IP地址 4.域名.DNS 5.端口 6.HTTP协议 7.Web容器 8.整个流程 一.区分系统 主要三个系统Windows.Linux.Ma ...
- 对TCP/IP协议的理解
话说两台电脑要通讯就必须遵守共同的规则,就好比两个人要沟通就必须使用共同的语言一样.一个只懂英语的人,和一个只懂中文的人由于没有共同的语言(规则)就没办法沟通.两台电脑之间进行通讯所共同遵守的规则,就 ...
- struts1之global-forwards
当你的某个转发要经常用,并且要携带某些数据(request)的时候用全局转发,也就是global-forwards,例如我们在分页的时候,或者得到数据列表的时候.. ForwardAction呢,是为 ...
- GDB简洁指南
启动gdb:gdb program 设置运行参数:set args 10 20 30 启动程序: run(r),start 显示源代码:list(l) 显示当前栈帧和运行行:frame(f) 设置显示 ...