前言

贪心算法,记得学的时候还是大学的时候,再次来总结一下吧。

贪心算法并不是指具体的固定代码,而是指一种思路,加入我们每次都选最好的选择,那么很大可能会得到最好的结果。

题目:

正文

思路,加入把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#)——算法套路贪心算法[二十八]的更多相关文章

  1. Java 算法(一)贪心算法

    Java 算法(一)贪心算法 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 一.贪心算法 什么是贪心算法?是指在对问题进行求 ...

  2. 『嗨威说』算法设计与分析 - 贪心算法思想小结(HDU 2088 Box of Bricks)

    本文索引目录: 一.贪心算法的基本思想以及个人理解 二.汽车加油问题的贪心选择性质 三.一道贪心算法题点拨升华贪心思想 四.结对编程情况 一.贪心算法的基本思想以及个人理解: 1.1 基本概念: 首先 ...

  3. python常用算法(6)——贪心算法,欧几里得算法

    1,贪心算法 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的的时在某种意义上的局部最优解. 贪心算法并不保证会得到最优解,但 ...

  4. 浅谈压缩感知(二十八):压缩感知重构算法之广义正交匹配追踪(gOMP)

    主要内容: gOMP的算法流程 gOMP的MATLAB实现 一维信号的实验与结果 稀疏度K与重构成功概率关系的实验与结果 一.gOMP的算法流程 广义正交匹配追踪(Generalized OMP, g ...

  5. JavaScript算法模式——动态规划和贪心算法

    动态规划 动态规划(Dynamic Programming,DP)是一种将复杂问题分解成更小的子问题来解决的优化算法.下面有一些用动态规划来解决实际问题的算法: 最少硬币找零 给定一组硬币的面额,以及 ...

  6. JAVA常见算法题(二十八)

    package com.forezp.util; import java.util.Arrays; /** * 两个int数组,都是从小到大的的排列,请合并为一个新的数组,也是从小到到大的排列, * ...

  7. 重新整理 .net core 实践篇—————Mediator实践[二十八]

    前言 简单整理一下Mediator. 正文 Mediator 名字是中介者的意思. 那么它和中介者模式有什么关系呢?前面整理设计模式的时候,并没有去介绍具体的中介者模式的代码实现. 如下: https ...

  8. 个人总结-----非贪心算法的图的m着色判断及优化问题

    1.问题描述: 对于著名的图的m着色,有两个主要的问题,一个是图的m色判定问题,一个是图的m色优化问题,描述如下. 图的m色判定问题: 给定无向连通图G和m种颜色.用这些颜色为图G的各顶点着色.问是否 ...

  9. 贪心算法(2)-Kruskal最小生成树

    什么是最小生成树? 生成树是相对图来说的,一个图的生成树是一个树并把图的所有顶点连接在一起.一个图可以有许多不同的生成树.一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n ...

  10. 贪心算法:旅行商问题(TSP)

    TSP问题(Traveling Salesman Problem,旅行商问题),由威廉哈密顿爵士和英国数学家克克曼T.P.Kirkman于19世纪初提出.问题描述如下: 有若干个城市,任何两个城市之间 ...

随机推荐

  1. AI大模型加速RPAxAI时代到来,谁会是RPA领域的杀手级应用?

    GPT等AI大模型震撼来袭,基于RPA的超级自动化仍是最佳落地载体 对话弘玑CPO贾岿,深入了解国产RPA厂商对AI大模型的探索与实践 文/王吉伟 关于RPA已死的说法,在中国RPA元年(2019年) ...

  2. idea技巧-自定义后缀补全

    Idea技巧-Postfix Completion 在idea中可以使用.xxx进行后缀补全 比如.sout 如何自定义后缀补全? 比如.log 在idea中打开设置 File | Settings ...

  3. Caxa 二次开发 ObjectCRX-1 踩坑:环境配置以及 Helloworld

    绝了,坑是真 nm 的多,官方给的文档里到处都是坑. 用的环境 ObjectCRX,以下简称 objcrx. #1 安装环境 & 参考文档的大坑 #1.1 Caxa 提供的文档和环境安装包 首 ...

  4. stm32L4xx串口日志配置解析

    前言: st这两年推出了一款超低功耗的芯片,stm32l4xx系列,该系列芯片有着功耗低,尺寸小等特点,非常适合应用在可穿戴式设备. 团队在这一领域深耕,所以不可避免的要用到这款芯片,这里就针对该芯片 ...

  5. ETL工具-KETTLE教程实例实战3----转换(输入、输出)

    ETL工具-KETTLE教程实例实战3----转换(输入.输出) 欢迎关注笔者的公众号: java大师, 每日推送java.kettle运维等领域干货文章,关注即免费无套路附送 100G 海量学习.面 ...

  6. TornadoFx的EventBus使用

    原文地址:TornadoFx中的EventBus使用 | Stars-One的杂货小窝 这里默认各位都清楚EventBus的具体作用,稍微有点短,主要国家没有啥好补充的吧 1.定义事件 //接收事件首 ...

  7. 一种OSD 简单实现 (文字反色---opencv、字体切换---freetype2(中文、空格))

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  8. makefile 编写要点

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  9. C++ 构造函数 explicit 关键字 成员初始化列表

    通常,构造函数具有public可访问性,但也可以将构造函数声明为 protected 或 private.构造函数可以选择采用成员初始化表达式列表,该列表会在构造函数主体运行之前初始化类成员.与在构造 ...

  10. Clang开发注意事项

    Clang tools need their builtin headers and search for them the same way Clang does. Thus, the defaul ...