加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C优先词典

发布时间:2020-12-16 04:57:28 所属栏目:百科 来源:网络整理
导读:我需要一个容器来存储对,我有两个操作: 按键更新值 获得具有最大价值的密钥. 对于第一个操作,map是一个很好的结构.对于第二个操作,似乎优先级队列是一个很好的.你会怎么做?无论如何在没有O(n)循环的情况下完成两个操作? 谢谢. 解决方法 对此渐近有效的解
我需要一个容器来存储对,我有两个操作:

>按键更新值
>获得具有最大价值的密钥.

对于第一个操作,map是一个很好的结构.对于第二个操作,似乎优先级队列是一个很好的.你会怎么做?无论如何在没有O(n)循环的情况下完成两个操作?
谢谢.

解决方法

对此渐近有效的解决方案是使用散列表和Fibonacci堆的组合.您可以使用哈希表在O(1)时间内访问与任何特定键相关联的值,并使用Fibonacci堆能够快速查找具有最低值的键/值对(这样做)在O(1)).

如果要更改与键关联的值,如果要增加该值,则可以通过在Fibonacci堆上使用增量键操作(缓冲)O(1)时间来执行此操作,该操作具有O(1)摊还时间.如果要减小该值,则需要O(log n)时间从Fibonacci堆中删除该元素,然后重新插入.

总的来说,这给出了时间复杂度

>插入一个新元素:O(1)表示散列,O(1)表示插入Fibonacci堆:O(1)时间.
>删除元素:O(1)表示散列,O(log n)表示从Fibonacci堆中删除:O(log n)时间.
>查找顶部元素:在Fibonacci堆中查找O(1):O(1)时间.
>增加一个值:散列为O(1),增加键为O(1):O(1)时间.
>减小值:散列为O(1),删除/插入为O(log n):O(log n)时间.

希望这可以帮助!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读