[英]Fast Range Detection Algorithm
我有一個由8個元素組成的數組: Bin[8]
。 Bin代表范圍容器:我收到一個數字N
,例如0 <= N <= 255
。
N < 32
==> Bin[0] += 1
32 <= N < 64
==> Bin[1] += 1
我想要一個不需要If-Else
指令的快速解決方案,因為我要處理多個Bin。
我正在使用Java,但是可以接受任何編程語言的解決方案。
謝謝。
確保您的數字N確實為0 <= N <= 255,然后簡單地:
Bin[N/32]++;
編輯:另一位海報提到右移5位。 這也將起作用,但是我覺得除以32表示意圖更清潔,如果在目標平台上更有效,任何現代編譯器都會將除法優化為位移。
我們可以為此使用一些按位運算符:
binIndex = N >> 5;
然后
Bin[binIndex]++;
這只是忽略了數字的低5位,而使用前三位(如果N <= 255)作為bin數組的索引。
只需使用整數除法(截斷):
Bin[N / 32] += 1;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.