我有一个样本编号的排序列表,例如:
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
我需要找到样本的分辨率和这些分辨率所持有的范围。限制是,一旦你达到较低的分辨率(数字之间的较高的增量),你就不能回去了。
该示例的正确输出应为:
我尝试查看数字并将它们的差异作为分辨率,并在分辨率保持不变的情况下扩展范围,但我遇到的情况很困难,例如介于0.2和0.4之间,分辨率可能为0.2,其中然后使用下一个0.5的样本无效。
任何人都可以帮我找到可以实现此目的的算法吗? 我正在使用c ++,数字精度为3位小数,如果这有任何区别的话。
答案 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