我有一個8個元素的數組:Bin[8]
。 Bin代表範圍容器:我收到一個號碼N
,如0 <= N <= 255
。快速範圍檢測算法
- 如果
N < 32
==>Bin[0] += 1
- 否則如果
32 <= N < 64
==>Bin[1] += 1
- ...等
我想這並不需要If-Else
指令快速解決方案,我有多個箱子可以處理。
我正在使用Java,但接受任何編程語言的解決方案。
謝謝。
我有一個8個元素的數組:Bin[8]
。 Bin代表範圍容器:我收到一個號碼N
,如0 <= N <= 255
。快速範圍檢測算法
N < 32
==>Bin[0] += 1
32 <= N < 64
==>Bin[1] += 1
我想這並不需要If-Else
指令快速解決方案,我有多個箱子可以處理。
我正在使用Java,但接受任何編程語言的解決方案。
謝謝。
確保您的數量N爲0確實< = N < = 255,則只需:
Bin[N/32]++;
編輯:另一個海報提到由5個比特右移。這也可以,但是我覺得除了32個顯示意圖更清晰之外,任何現代編譯器都會將分割優化爲位移,如果它在您所針對的平臺上更高效。
只需使用整數除法(截斷):
Bin[N/32] += 1;
我們可以使用一些位運營商這樣的:
binIndex = N >> 5;
然後
Bin[binIndex]++;
這恰恰忽略了低5位的數字,使用前三位(如果N < = 255)作爲二進制數組索引。
我知道這個問題看起來很笨...唉!但我還沒有睡一會兒! – FearUs 2011-02-17 23:07:27