簡體   English   中英

快速范圍檢測算法

[英]Fast Range Detection Algorithm

我有一個由8個元素組成的數組: Bin[8] Bin代表范圍容器:我收到一個數字N ,例如0 <= N <= 255

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

我想要一個不需要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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM