首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将n个值分配给大小为n O(n)的数组的时间复杂度是多少?

将n个值分配给大小为n O(n)的数组的时间复杂度是多少?
EN

Stack Overflow用户
提问于 2019-05-29 17:32:34
回答 1查看 412关注 0票数 0

我正在尝试哈希中的索引映射来搜索数组中的元素。线性搜索在一个大小为n的数组中搜索一个元素需要O(n)。在散列中,我们所做的基本上是通过创建一个2维的零矩阵(比如hash1000),并在ai为正的情况下将hasha[i]重新分配为1,如果ai为负,则将hash-a[i]的时间复杂度降低到O(1)。这里ai是我们应该搜索元素的数组。

代码语言:javascript
运行
复制
    for(i=0 ;i<n    ;i++)
    {
        if(a[i]>=0)
            has[a[i]][0]=1;
        else
            has[-a[i]][1]=1;
    }

执行上面的代码需要多长时间?即使通过散列,我们的时间复杂度不也是O(n),就像线性搜索一样吗?在二维零数组中分配n个1所消耗的时间不等于以线性方式搜索一个元素所花费的时间吗?

EN

回答 1

Stack Overflow用户

发布于 2019-05-29 17:42:15

这里的典型做法是维护一个按散列键排序的数组,然后使用二进制搜索来定位元素,最坏情况下的时间复杂度为O(log )。

通过使用与查找现有元素相同的二进制搜索来插入新元素,可以保持排序顺序。

最后一点很重要:正如评论中指出的那样,在每次搜索之前进行排序会降低搜索时间,以至于对于小数据集,蛮力线性搜索的速度更快。但是可以消除这种开销;如果在插入新元素时保持排序顺序,则永远不需要对数组进行排序。

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

https://stackoverflow.com/questions/56357378

复制
相关文章

相似问题

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