我有一个练习题,我有一个给定的值和给定的数字数组。我可以使用给定数组中的任何值来创建一个等于给定值的和。
原来,我的算法会针对每种可能的组合迭代数组。我后来对其进行了优化,以检查当前总和是否大于该值。如果是,请停止尝试后一种组合,因为它们都将大于该值。
出于好奇,首先计算所有总和然后对总和进行排序并进行二元搜索以找到具有相等值的总和会更好吗?我想,在每一笔总和上进行比较会比预先计算总和和结果要慢得多。
答案 0 :(得分:1)
计算所有总和,然后搜索等于所需值的总和比简单的强力搜索更有效(及时)?
如果我们考虑最坏的情况,即不存在这样的集合,那么您需要做的添加操作的数量对于两个解决方案都是相同的,因为您已经在计算解决方案中的每个总和,而且力搜索最终将尝试每种组合。
您的解决方案中的比较次数是否会小于或等于使用暴力进行的比较次数?是。你绝对不需要先计算所有总和,然后对结果进行排序:你可以在进行所有计算时简单地构建一个有序集。暴力强制最终会进行与组合一样多的比较,但是构建所有总和的排序集合,然后对匹配值进行二进制搜索不应该是指数级的。
但话说回来,你可能已经找到了解决方案,而你正在建立你的电源组,所以我不确定与简单的蛮力相比有多么不同。它只是看起来像一个更昂贵的蛮力,因为现在你必须处理存储所有这些和其他中间计算,如果你选择这样做。