• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

重新整理数据结构与算法(c#)——算法套路贪心算法[二十八]

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

前言

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

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

题目:

正文

思路,加入把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();
}

结果:

贪心算法不一定是最优解,但是这种解法比较快,不然要把所有的情况考虑进去。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#获取IIS所有站点及虚拟目录和应用程序(包含名称及详细信息) ...发布时间:2022-07-13
下一篇:
C#使用Gecko实现浏览器发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap