我配置了多个可以动态增加/减少的范围,我需要找到最快的方法来查找给定数字是否存在任何范围,如果是,则返回范围?有人可以建议我用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个条目。
由于
答案 0 :(得分:0)
您可以使用Interval树执行此操作。 对于每个范围,在区间树中插入一个条目。
现在,如果你想搜索数字'k'所在的范围。 在区间树中搜索。 此外,每当范围更改时,从Interval中删除该范围,并将其重新插入新值。