查找浮点数列表的分辨率范围

时间:2017-03-01 11:06:29

标签: algorithm

我有一个样本编号的排序列表,例如:

0.1,0.2,0.4,0.5,0.8,0.9,1.0,1.5,2.0,4.0,4.5,5.0,10.0,15.0,20.0

我需要找到样本的分辨率和这些分辨率所持有的范围。限制是,一旦你达到较低的分辨率(数字之间的较高的增量),你就不能回去了。

该示例的正确输出应为:

  1. 从0.1到1.0,分辨率为0.1
  2. 从1.0到5.0,分辨率为0.5
  3. 从5.0到20.0,分辨率为5.0
  4. 我尝试查看数字并将它们的差异作为分辨率,并在分辨率保持不变的情况下扩展范围,但我遇到的情况很困难,例如介于0.2和0.4之间,分辨率可能为0.2,其中然后使用下一个0.5的样本无效。

    任何人都可以帮我找到可以实现此目的的算法吗? 我正在使用c ++,数字精度为3位小数,如果这有任何区别的话。

1 个答案:

答案 0 :(得分:1)

您需要找到数组子集中的最小差异。伪代码

function smallestDifference(input, index)
    min <- -1
    while index + 1 < input.length
        difference = input[index + 1] - input[index]
        if min = -1 or min > difference then
            min <- difference
        end if
        index <- index + 1
    end while
    return min
end function

该函数将找到索引输入的分辨率。如果对最后一个元素执行此操作,将返回-1,否则返回所需的确切值。

测试它:

i <- 0
while i < input.length
    print smallestDifference(input, i)
    i <- i + 1
end while