前言

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

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

题目:

正文

思路,加入把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. Codeforces Round 169 (Div. 2)C. Little Girl and Maximum Sum(差分、贪心)

    目录 题面 链接 题意 题解 代码 总结 题面 链接 C. Little Girl and Maximum Sum 题意 给q个[l,r]将所有这些区间里面的数相加和最大. 可以进行的操作是任意排列数 ...

  2. dos-基础用法

    DOS(磁盘操作系统)是一个早期的基于命令行的操作系统,尽管现代操作系统已经发展为图形用户界面(GUI),但是了解和掌握一些基本的DOS命令仍然非常有用,尤其是在处理批处理脚本.网络管理或者在没有图形 ...

  3. 【python】使用百度api进行音频文件转写

    [python]使用百度api进行音频文件转写 脚本目标: 智能云的音频文件转写文档只给了个demo,每次只能传1分钟以内的音频啥的,不好直接用,简单打包一下,做到把音频放文件夹,直接出转写结果就行了 ...

  4. pcm5102芯片解析之基本概念

    一 前记 1 在音频领域深耕,那就要不断的前行.最近有几个项目需要用到pcm5102这颗料,藉此机会,针对这个料进行深入的研究一下.做一一些简要的分析. 二 概念 音频芯片的指标,其实,很多年都没啥变 ...

  5. Kotlin 语法糖(对象不为空返回自身,为空返回其他)

    原文地址: Kotlin 语法糖(对象不为空返回自身,为空返回其他) - Stars-One的杂货小窝 开发中,经常会有这样逻辑: 判断对象如果不为空,则取对象本身; 为空,则得到其他对象; 然后每次 ...

  6. linux系统运行时参数命令、网络、磁盘参数和日志监控

    重点内容 linux基础命令和工具 CPU性能监控 内存性能监控 文件IO性能监控 网络IO监控 1 linux基础命令和工具 1.1 Grep搜索字符 grep命令用于在文件中执行关键字搜索,并显示 ...

  7. Web服务器通信原理

    Web服务器通信原理 1.区分系统 2.DOS系统 3.IP地址 4.域名.DNS 5.端口 6.HTTP协议 7.Web容器 8.整个流程 一.区分系统 主要三个系统Windows.Linux.Ma ...

  8. 对TCP/IP协议的理解

    话说两台电脑要通讯就必须遵守共同的规则,就好比两个人要沟通就必须使用共同的语言一样.一个只懂英语的人,和一个只懂中文的人由于没有共同的语言(规则)就没办法沟通.两台电脑之间进行通讯所共同遵守的规则,就 ...

  9. struts1之global-forwards

    当你的某个转发要经常用,并且要携带某些数据(request)的时候用全局转发,也就是global-forwards,例如我们在分页的时候,或者得到数据列表的时候.. ForwardAction呢,是为 ...

  10. GDB简洁指南

    启动gdb:gdb program 设置运行参数:set args 10 20 30 启动程序: run(r),start 显示源代码:list(l) 显示当前栈帧和运行行:frame(f) 设置显示 ...