2013-02-22 30 views
-2

我有一個浮點數組Float_t xbins[41],它定義了40個bin,即浮點範圍。 例如y在bin 7中,如果y > xbins[7] && !(y > xbins[8])如何確定一個浮球應該在哪個艙中? C++

如何確定,而不必40 if語句給定的浮動應該屬於什麼倉?

請用C++回答,因爲我不說其他語言。

+4

我不知道你想要什麼。 – RvdK 2013-02-22 11:11:06

+0

您沒有告訴我應該選擇「垃圾箱」的標準,那麼我們如何告訴您更好的方法來實施這些標準呢? – PlasmaHH 2013-02-22 11:11:52

+0

每個垃圾桶的浮動範圍是多少?它們是完全武斷的,還是可以計算垃圾箱的數量? – JasonD 2013-02-22 11:12:16

回答

4

如果數組進行排序,然後做一個二進制搜索找到正確的垃圾桶。你需要組合std::sort(如果沒有排序),然後像std::lower_bound,來定位。您需要確保operator<正確實施爲Float_t

+0

謝謝,std :: lower_bound似乎是我需要的。 – user2099143 2013-02-22 11:26:03

+1

這41個浮點數可以定義40個bin的唯一方法就是對數組進行排序。 – 2013-02-22 11:27:27

0

由於事實證明,箱不是均勻間隔的,但有整數界限,可能最快的方法是有一個(反)查找表,顯然有大約100個條目。一個需要基本上比較兩個較低的較高邊界的比較。

如果陣列界限用公式導出,它可以是可以寫入的逆公式優於LUT方法。

對於一般情況二進制搜索是一種方式 - 甚至可以通過執行線性插值來改進一點,而不是將範圍精確地細分爲一半。與二進制搜索的O(logn)相比,速度(如果數據不是病態的)將是O(loglogn)。

相關問題