需要查找任何给定范围内是否已存在数字

时间:2012-11-06 18:00:45

标签: c data-structures

我配置了多个可以动态增加/减少的范围,我需要找到最快的方法来查找给定数字是否存在任何范围,如果是,则返回范围?有人可以建议我用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个条目。

由于

1 个答案:

答案 0 :(得分:0)

您可以使用Interval树执行此操作。 对于每个范围,在区间树中插入一个条目。

现在,如果你想搜索数字'k'所在的范围。 在区间树中搜索。 此外,每当范围更改时,从Interval中删除该范围,并将其重新插入新值。