簡體   English   中英

如何估算LUT指數?

[英]How to approximate LUT index?

我有一個陣列

...
//a      b
{860,   -30},
{853,   -29},
{846,   -28},
{838,   -27},
{830,   -26},
{822,   -25},
{814,   -24},
...

什么是用C找到找到最快捷的方式b給定a值? 我想這需要一些近似值? 例如,當a = 851我想盡快找到-29

最快的通用算法是二進制搜索。 根據映射數組的大小,您可以考慮手動編碼搜索; 對於32碼來說這可能是合理的,但我不會變得更大。 如果你很幸運的話,在微控制器上,完全擴展的二進制搜索可能會快50%。

但如果映射不是非線性的,那么有一個很好的選擇。

a的范圍除以k相等大小的范​​圍,其中k不大於映射數組中的條目數,使得每個范圍端點的映射與下一個范圍端點相同或比一個更多。 (如果這是可能的;這正是我所說的“不太非線性”)。 創建另一個數組,將每個端點映射到原始數組的索引中。 (你只需要的索引,而不是端點,因為端點均勻地間隔開)。對於每個范圍,底部端點的對應指數值最小的索引a原始數組不大於該范圍的頂部端點少值。 需要注意的是由於需求上面提出,可以有至多一個a在每一個范圍值,所以每個端點的索引將始終指向a為范圍的終值,以及a對的起始值范圍將始終是相同或先前的索引。

現在,要查找一個值,首先要找出合適的范圍索引,這是一個簡單的線性計算( (val - minval)/k ),然后通過查找比較的索引將該值與指示a值進行比較。 如果該值小於查找的a ,則從索引中減去1。 然后從索引返回b值。

有關此類算法的示例,請參閱此處的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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