首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我需要找出一个数字是否已经存在于任何给定的范围内

我需要找出一个数字是否已经存在于任何给定的范围内
EN

Stack Overflow用户
提问于 2012-11-07 02:00:45
回答 1查看 98关注 0票数 2

我配置了多个可以动态增加/减少的范围,我需要找到最快的方法来确定给定的数字是否存在于任何一个范围中,如果存在,则返回该范围?有没有人能给我推荐一下用C语言实现这种运算的最快算法或数据结构?

代码片段如下所示:

代码语言:javascript
复制
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字节的数字,它是从运行时接收的缓冲区中派生出来的,当在存储开始和结束addr的表中进行线性搜索时,性能非常低,因为表可以有大约50,000到100,000个条目。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2012-11-07 17:06:08

你可以使用区间树来实现这一点。对于每个范围,在区间树中插入一个条目。

现在如果你想搜索数字'k‘所在的范围。在区间树中搜索。此外,只要某个范围发生更改,就从Interval中删除该范围,然后用新值重新插入。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13256675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档