動的に増加/減少できる複数の範囲が構成されています。指定された数値が存在するかどうかを見つける最速の方法を見つける必要があります。存在する場合は範囲を返しますか? そのような操作を行うための C での最速のアルゴリズムまたはデータ構造を教えてください。
コード スニペットは次のとおりです。
addr = GET_U32BIT(buf);
/* Search for the corresponding address */
while(i < addr_table_size)
{
if((addr >= ntohl(table->addr_id[i].start_addr)) && \
(addr <= ntohl(table->addr_id[i].end_addr)))
{
addr_present = 1;
range_id = i;
break;
}
i++;
}
上記のコードでは、addr は、実行時に受信したバッファーから派生した 4 バイトの数値です。開始アドレスと終了アドレスが格納されているテーブルで線形検索を実行している間、テーブルは約 50,000 から 100,000 になる可能性があるため、パフォーマンスは非常に低くなります。エントリ。
ありがとう