问题陈述:
给定一组预先知道的整数,生成代码来测试集合中是否有单个整数。测试函数的域是某个连续范围内的整数。
现在对要测试的范围或集合一无所知。范围可以很小也可以很大(但解决方案可以拒绝很大的问题,但更高的限制更好)。可能是允许范围内的值很少在集合中,或者它们中的大多数在集合中,或者介于两者之间。该集合可以是均匀分布的或聚集的。可能有大部分只包含/不包含的值,或者在大多数条带中每种类型的值可能至少有几个。(有点像在分析排序算法时对要排序的项目所做的假设)
目标是生成用于运行测试的有效代码的过程。
想到的部分解决方案包括
- 完美的散列函数(大集合成本高)
- 范围测试:
foreach(b in ranges) if(b.l <= v && v <= b.h) return true;
- 树/索引(在某些情况下比其他更昂贵)
- 表查找(大集合成本高)
- 这些中的任何一个的倒数(杰森 S的科多斯)
似乎一个理想的解决方案能够选择最好的选项,或者如果没有一个效果很好,使用树将整个范围分解为部分,然后切换到更适合它们的其他子部分选项。
可能有用的主题包括:
注意:这不是家庭作业。如果它是作为低于博士水平的家庭作业发布的,教授应该用 Nerf 枪射击(如果你没有得到那个然后重新阅读问题,这非常重要)
注意:这是我几天前遇到的一个问题,我一直在困惑。我对此没有直接用途,但认为这将是一个很酷的攻击问题。我想要生成代码的原因是因为生成的代码不会比一般代码慢(如果需要,它可以是同一件事)并且在某些/许多情况下可能会更快。
我发布这个问题是为了澄清我的想法。如果我能想出任何合理或酷的解决方案,我计划将它们实现为模板元程序(生成代码的另一个原因)
有些人注意到这个问题非常普遍。这就是我想说的。我希望生成一个可以在一个非常普遍的领域工作的系统:某个范围内的整数集。