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)时间. 希望这可以帮助! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |