【问题标题】:Pseudocode for brute-force algorithm to find largest product of two numbers in a list蛮力算法的伪代码,用于查找列表中两个数字的最大乘积
【发布时间】:2016-03-05 17:40:28
【问题描述】:

我正在尝试提出一种伪代码蛮力算法,该算法在列表 a[sub1] 到 a[subn] 中找到两个数字的最大乘积,其中 n 大于或等于 2。现在,我有

for ( i = 1 to n -1)

    a[subi] = a[subi-1] * a[subi+1]

    for (j = a[sub j+1] to n)

        a[sub j] = a[sub j-1] * a[sub j+1]

    end for

end for

return `a[sub i]`

return `a[sub j]`

但是,这是不正确的。我觉得这里缺少一些简单的东西,但我无法弄清楚。有任何想法吗?提前致谢。

【问题讨论】:

  • 为什么不将列表中的两个最大值相乘?
  • 读了你的代码后我还是想不通你想做什么,不就是2个for循环和测试a[i]*a[j]的组合是最好的吗?
  • 您可以对列表进行线性遍历并挑选出两个最高值,然后将它们相乘以获得您的结果。
  • 这可能会更好一点。这个怎么样? @shole @IsaacTurner large = a_1 * a_2 for(i = 1 to n) for(j = i+1 to n) if(large < a_i * a_j) large = a_i * a_j
  • 我认为@NickZuber 的解决方案是最好的,因为它是线性的:找到最大的 2 个负数和最大的 2 个正数,取更大的产品

标签: algorithm sorting pseudocode discrete-mathematics


【解决方案1】:
largest_product = a[1] * a[2]

for ( i = 1 to n -1)
    for (j = i + 1 to n)
        product = a [i] * a [j]

        if (product > largest_product)
            largest_product = product
        end if
    end for

end for

return largest_product

编辑

您的问题的 cmets 建议在线性时间内提供更有效的解决方案。

实施将跟进。

【讨论】:

  • 第二种实现需要将被拒绝的最大候选者从第一个缓冲区洗牌到第二个缓冲区。它也对负数失败。
  • Sailu:第二大不会从早期迭代中获取之前第一大的值,或者新的重复值。考虑产生 0 作为第二大的序列 { 1, 0, 2 }。至于负数,请考虑序列 { +1, +2, -3, -4 },其中 (+1)*(+2)=2 代替 (-3)*(-4)=12。
猜你喜欢
  • 1970-01-01
  • 2013-12-31
  • 1970-01-01
  • 2021-03-09
  • 2014-05-27
  • 2021-03-09
  • 2016-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多