2011-02-17 68 views
0

我有一個8個元素的數組:Bin[8]。 Bin代表範圍容器:我收到一個號碼N,如0 <= N <= 255快速範圍檢測算法

  1. 如果N < 32 ==>Bin[0] += 1
  2. 否則如果32 <= N < 64 ==>Bin[1] += 1
  3. ...等

我想這並不需要If-Else指令快速解決方案,我有多個箱子可以處理。

我正在使用Java,但接受任何編程語言的解決方案。

謝謝。

回答

2

確保您的數量N爲0確實< = N < = 255,則只需:

Bin[N/32]++; 

編輯:另一個海報提到由5個比特右移。這也可以,但是我覺得除了32個顯示意圖更清晰之外,任何現代編譯器都會將分割優化爲位移,如果它在您所針對的平臺上更高效。

1

只需使用整數除法(截斷):

Bin[N/32] += 1; 
+0

我知道這個問題看起來很笨...唉!但我還沒有睡一會兒! – FearUs 2011-02-17 23:07:27

2

我們可以使用一些位運營商這樣的:

binIndex = N >> 5; 

然後

Bin[binIndex]++; 

這恰恰忽略了低5位的數字,使用前三位(如果N < = 255)作爲二進制數組索引。