找到两个数组元素的乘积之和的最小绝对值,允许排列

时间:2020-02-02 12:12:09

标签: arrays algorithm sorting

给出一个实数数组。称为A []。现在考虑另一个整数数组B []。 求出sum_i(a_i * b_j)的最小绝对值,其中a_i = A [i],b_j = B [j]对于0 <= i < / p>

这似乎可以通过递归来完成(也许可以通过备忘录来降低复杂性)。我只是想不出一种形成递归关系的方法。我可以得到提示吗?

示例:取A = {1.2,3}和B = {-1,2,1}。然后,我们可以生成3 * 3 = 9(不一定是不同的)可能的总和(例如:abs(1.2 * -1 + 3 * 1)或abs(1.2 * 2 + 3 * 2)等)。您需要找到最少的此类绝对值。

这是一个主意:

  1. 创建矢量Res []。

  2. 用A [0]乘以B []的每个元素,并将结果记录到Res []中。 Res现在有M个元素。

  3. 立即执行A [1]。将其与每个B [j]相乘,然后添加到Res []的每个元素中。删除前M个元素。 Res现在有M ^ 2个元素。

  4. 立即执行A [2]。将其与每个B [j]相乘,然后添加到Res []的每个元素中。立即删除前M ^ 2个元素。 Res []现在有M ^ 3个元素。

  5. 继续执行此操作,直到Res []具有M ^ N个元素。

  6. 现在执行线性扫描以找到最小的绝对值。

以下问题已经困扰了我很长时间:

  1. 可以将此方法修改为递归方法吗?更好,以某种方式使用备忘录进行递归。

  2. 是否可以使用非粗略(更有效)的解决方案?


注意:由于我们关注绝对值,因此不能通过“重排”不等式“直接”完成此操作。对其进行修改可能会很有用;我现在想不出更好的方法。

0 个答案:

没有答案