2017-03-01 34 views
2

我有試樣編號的排序列表,例如列表:查找分辨率範圍爲浮點數

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

我試着去在數字和採取他們的差異隨着分辨率,而且只要該決議持有擴大範圍,但我在使用的情況下,如0.2難度和0.4分辨率可能是0.2,然後與0.5的下一個樣本無效。

任何人都可以幫我找到一個算法,可以做到這一點? 我使用C++,數字的精度爲3位小數,如果有任何區別。

回答

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 
+0

的問題是找到子集是什麼,他們沒有事先 –

+0

@EyalK聞名。你可以使用我描述的功能找到子集。您可以使用一段時間來識別分辨率更改,與我已經顯示的測試方式非常相似。如果smallestDifference(input,i)