记得在TOJ上曾经有一道题,大致意思如下:
将2N个整数平均分为两堆,每堆N个,使得两堆和的差值最小,求这个差值。
当时自己很自豪的用“随机贪心”的思想写出来的程序在OJ上居top1,(44K 0MS)
看着一大堆用DP AC的选手们几百K的内存使用量+几十毫秒的计算速度,小得意了一把。
该随机贪心思想如下:
1 将2N个数随意分为两堆,称为A、B。
2 若存在 a in A,b in B,交换a、b使得sum(A) 与 sum(B)差值更小,则交换。
3 若2不存在,跳出,否则重复2
4 得到最小 sum差
之后我自己想了一下,假如题目改为这样呢?——
将N个整数分为两堆,每堆个数不固定,使得两堆和差值最小,求这个差值。
然后我和N个同学讨论了这个问题。。未果,最后得出结论:这是一个NP问题……
我还是用随机贪心可以得出一个近似解——
0 R=正无穷
1 将N个数随机分为两堆,A、B
2 若存在a in A或者b in B,将a,b放到另一个集合中,能使得sum(A) 与 sum(B)差值更小,则调换。
3 若2不存在,跳出,否则重复2
4 得到单次最小 sum差K,若比sum差R小,则R = K
5 随机次数++
6 若随机次数>N(这个值越高,越趋近正确解)结束,输出R
7 跳到1
看上去觉得不错了,而且理论上N越大,解就越趋近正确。
我一度认为这就是一个好的解法。。直到同学WL提出来有更优解法……
1 将N个数排序,称集合A
2 取出A中最大两个数a,b,相减得c
3 a,b出集合,c进集合
4 若A只有一个元素跳出,否则跳到2
5 A中最后一个元素就是正确解
我靠~ 想了想,确实,这个问题居然就能用一个普通的贪心算法解决……
归根到底还是一个数学问题,若不平均划分,则可以这样“等价消除”各数字。(此处证明略,很显然……)
所以看来未必看上去"牛X"的算法就牛X,一切算法问题还是应该归根于其数学本质上的。
——时刻用这句话警诫自己!已经在此问题上犯了无数次错误了。
PS:该问题我曾出题到公司的天津大学/南开大学校园招聘笔试题上,当场给出第一题近似解的只有一位硕士生。。第二题没人做。。(可能时间不够)
分享到:
相关推荐
<msup> φ</ mi> <mrow> <mn> 2 </ mn> < mi> n </ mi> <mo> + </ mo> <mn> 4 </ mn> </ mrow> </ msup> </ math>领域理论的<math> <mi> n </ mi> < mo>> </ mo> <mn> 1 </ mn> </ math>。 纽...
利用Python编写小程序,并打包成exe文件,可在不同电脑上执行。 一个小功能:用户输入自己需要选择的项,系统智能判断,给出结果。
该企业库的设计思想是为了协助开发商解决企业级应用开发过程中所面临的一系列共性的问题, 如安全(Security)、日志(Logging)、数据访问(Data Access)、配置管理(Configuration Manage)等,并将这些广泛使用的应用程序...
Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示 如果还为了这个纠结,就直接看看后面的解说,做决定吧。 一般如果用到中文或者其它特殊...
1. **独立与自主**:“一个人久了,会越来越理性,越来越现实。”这表明随着个体经历的积累,人们会逐渐学会独立思考和自我照顾,变得更加成熟稳重。 2. **反思与进步**:“如果可以再一次,我一定好好珍惜你。”这...
资源储量分类标准在与国际接轨中始终存在着一个"资源类别纠结",即西方市场经济体制国家,如美国的"确定的、推定的、推测的"究竟是属于勘查区整体资源的可靠性,还是局部块段资源的可靠性问题。国内对《固体矿产资源/...
【文档标题】与【描述】提到的是一个关于心情纠结的个性签名的集合,这些签名表达了人们在情绪低落、困扰时内心的感受。虽然这不属于IT行业的专业知识,但从这些签名中可以提炼出一些与情感表达、心理状态和人际关系...
近似数是数学中一个基础且实用的概念,它涉及到数值的估计和简化,通常用于处理实际问题时的精度要求。在二年级的学习阶段,学生会接触到将较大数字简化成整千或整百的形式,以便更好地理解和比较。例如,内容中的...
合工大套卷在众多考生中的心目中还是相当有水平的。合工大整体出题水平还是很高的,题目新颖。...所以如果真题做烦了,又想找几套贴合真题的模拟题,合工大共创其实挺适合,所以就不要纠结哪套,选择适合自己的最重要。
10. **等待与行动**:“我告诉自己一个人也要坚强,可是每次都会忍不住落泪”,在等待机会的同时,我们应积极采取行动,主动创造机会。 这些情感表达和生活感悟虽然源于个人情感体验,但它们反映出的自我认知、决策...
我在网上搜索的方法都不能完成破解,因为都说要覆盖一个文件, 而这个文件,根本跟他们所说的位置不一样,找不到这个文件,怎么 能按照人家的说法破解呢? 现在我已经把这个文件给替换了,你只需要安装即可。 提醒,...
9. **方法论的应用**:使用“人、目标、遍历因素、找重点、执行和总结”这一方法论,可以帮助人们系统地处理纠结问题,提高决策效率。 10. **时间管理与生活质量**:强调时间的宝贵和保持生活与工作的平衡,避免...
"纠结"一词在现代汉语中的使用非常广泛,它反映了当代社会中人们的心理状态。"纠结"最初在《现代汉语词典》中的定义是“相互缠绕”,但在日常生活中,它已经演变成一种多用途的词汇,既可以用作动词表示内心的困扰,...
用户在选择公有云还是私有云时,常常纠结于数据安全问题。根据IDC的调查,75%的用户对云服务最关心的就是数据安全。私有云通常被认为能更好地掌控安全,但在一些行业中,如政府、金融、运营商和大型企业,由于法规...
5. **游戏规则引擎**:为了实现游戏规则,开发者可能构建了一个规则引擎,它定义了游戏的逻辑规则,并负责在适当的时候执行这些规则。 6. **优化与性能**:由于关卡是动态生成的,源码中可能会包含一些优化策略,以...
这个问题涉及到Linux操作系统,特别是CentOS,以及Realtek的R8169网卡驱动的兼容性和安装问题。在描述中提到的纠结在于CentOS自带的R8169驱动似乎与R8168网卡不兼容,导致系统在高负载下出现网络延迟异常和性能问题...
一维数组就能判断,比如Arr[i],就可以表示一个元素位于第i行第Arr[i]列——应用广泛的小技巧。而且在这里我们不用考虑去存储整个矩阵,如果Arr[i]存在,那么我们在打印的时候,打印到皇后位置的时候输出1,非皇后位...
首先,总用户数本身可能就是一个难以准确估计的数字;其次,即使总用户数已知,选择一个合适的百分比也是困难的,因为这一比例并非固定不变,而是受多种因素影响。例如,假设每个用户每个月仅在某一天使用系统,那么...
一篇文章告诉你比利时这国家有多纠结.doc