问题陈述:
给定一组事先已知的整数,生成代码以测试集合中是否存在单个整数。测试函数的域是某个连续范围内的整数。
现在对于要测试的范围或集合没有特别了解。范围可能很小或很大(但是解决方案可以拒绝大的问题但更高的限制更好)。可能是允许范围内的极少数值在集合中,或者大多数都在或介于两者之间。该集合可以是均匀分布的或集群的。可能存在大部分仅包含/不包含的值,或者在大多数条带中可能存在至少几种类型的值。 (有点像在分析排序算法时对要排序的项目所做的假设)
目标是生成运行测试的有效代码的过程。
想到的部分解决方案包括
foreach(b in ranges) if(b.l <= v && v <= b.h) return true;
似乎理想的解决方案是能够选择最佳选项,或者如果没有选择,则使用树将整个范围分解为多个部分,然后切换到更适合它们的子部分的其他选项。
可能有用的主题包括:
注意:这不是作业。如果它是作为博士水平以下的作业发行的,教授应该用Nerf枪射击(如果你没有得到那么重新阅读问题,这非常非常重要)
注意:这是我几天前发生的一个问题,我一直在困惑。我没有直接使用它,但认为攻击是一个很酷的问题。我想生成代码的原因是因为生成的代码不会比一般代码慢(如果需要它可以是同样的东西),并且在某些/很多情况下可能更快。
我正在发布这个问题,以澄清我的想法。如果我能提出任何合理或酷的解决方案,我计划将它们作为模板元程序实现(生成代码的另一个原因)
有些人已经注意到这个问题很普遍。这就是重点。我希望生成一个可以在非常通用的域中运行的系统:某些范围内的整数集。答案 0 :(得分:1)
previous question on dictionary/spellchecking有许多回复提及Bloom filters;也许这会有所帮助。
我认为无论如何,测试大型设备都会很昂贵。
答案 1 :(得分:1)
这使得“问题”在任何实际意义上都不切实际,不明确,不可解决
如果有人想要提出解决方案,这里有一些单元测试用例:
单元测试1:
单元测试2:
答案 2 :(得分:1)
还有boost::dynamic_bitset,不确定它在时间上是如何缩放的,或者在原始数字的分布方面是在空间中。 (例如,如果位以8/16/32/64的块存储,则稀疏位集效率低)
或者this (compressed bit set)或this (bit vector)网页(我用Google搜索“大型稀疏位集”和“压缩位集”)