【问题标题】:The smallest absolute difference in value between two different array elements using brute force使用蛮力计算两个不同数组元素之间的最小绝对值差
【发布时间】:2012-05-02 07:30:35
【问题描述】:
  • 输入:实数数组 a[1..n];
  • 输出:两个不同数组元素之间的最小绝对差值。

我想要一个同样的蛮力算法。

有人知道吗?

【问题讨论】:

  • 对于数组中的每个元素,再次循环遍历数组(跳过该元素的索引),找到差异,如果它低于“最低”,则将其设置为最低。感谢 Dougal 的建议。
  • @birryree 或者只跟踪循环中的最小值。此外,由于它是对称的,您只需要循环 i 和内循环 j > i
  • @Dougal - 是的,这更有意义(加上跟踪所涉及的两个元素的索引)。
  • 蛮力几乎按照定义来获取每个可能对的差异,然后找到最低的。其他任何东西都不是蛮力。基本上是@birryree 的建议,除了您可以跳过该元素的索引和所有低索引(因为您在处理它们时已经将其与早期元素进行了比较)。

标签: algorithm brute-force


【解决方案1】:

如果元素已排序,那么您可能只需要按顺序比较每对项目: [1, 3, 6, 7, 28] -> 7-6 给出最小距离

为了暴力破解,我想你可以从每个值中减去每个值 (n*n-1) 并跟踪哪个对最小。您需要确保不要从自身中减去相同的元素,但应该允许具有相同值的元素成对。

【讨论】:

  • 你只需要n*(n-1)/2,不是吗?
【解决方案2】:

如果你想暴力破解它,只需遍历每一对元素:

min = infinity

for i=1 to n-1
    for j = i+1 to n
        if abs(a[i]-a[j]) < min
            min = abs(a[i]-a[j])

这需要O(n^2) 时间。可以通过先排序列表实现O(n log n)时间:

sort(a)
min = infinity

for i = 1 to n-1
    if abs(a[i+1]-a[i]) < min
        min = abs(a[i+1]-a[i])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 2021-01-31
    相关资源
    最近更新 更多