Redian新闻
>
弱问C++用heap的题能用multiset吗
avatar
弱问C++用heap的题能用multiset吗# JobHunting - 待字闺中
b*i
1
问问,因为multiset实在写习惯了,新的priority_queue反而怕出bug。
请问面试的时候用multiset来代替heap可以吗(如果不要求实现heap本身的话),
multiset是基于红黑树的,复杂度应该都是log(n)的。
avatar
k*p
2
总感觉用红黑树代替heap有点overkill。 红黑树相对heap更加有序,虽然insert和
delete操作都是log(n),但红黑树前面系数会大很多。另外heap的getmin()或getmax()
O(1), 如果这个操作比较频繁的话,最好不要用红黑树。当然你可以改进红黑树,加个
max或min变量,也能到O(1)。
priority_queue不如自己写的heap灵活,不能update节点,比如不能用来实现http://www.geeksforgeeks.org/greedy-algorithms-set-7-dijkstras-algorithm-for-adjacency-list-representation/
avatar
b*i
3
同意,
priority_queue不能update节点。
但我指的情况比如leetcode上面merge K sorted list那题不是要用个heap吗,这种情
况如果我就用multiset面试官会说吗?

()

【在 k****p 的大作中提到】
: 总感觉用红黑树代替heap有点overkill。 红黑树相对heap更加有序,虽然insert和
: delete操作都是log(n),但红黑树前面系数会大很多。另外heap的getmin()或getmax()
: O(1), 如果这个操作比较频繁的话,最好不要用红黑树。当然你可以改进红黑树,加个
: max或min变量,也能到O(1)。
: priority_queue不如自己写的heap灵活,不能update节点,比如不能用来实现http://www.geeksforgeeks.org/greedy-algorithms-set-7-dijkstras-algorithm-for-adjacency-list-representation/

avatar
k*p
4
那样可以用priority_queue。priority_queue的函数名和stack一样的,pop,push,top很
好记。
面试官怎么看,我也不清楚。面试经验不多。。。
另外那个题也可以两两merge。假设总长度N,heap复杂度O(Nlog(K))。 两两merge的话
,每轮最多2N(list奇数2N,偶数N)。有log(K)轮。

【在 b******i 的大作中提到】
: 同意,
: priority_queue不能update节点。
: 但我指的情况比如leetcode上面merge K sorted list那题不是要用个heap吗,这种情
: 况如果我就用multiset面试官会说吗?
:
: ()

avatar
b*i
5
恩,有道理,两两merge

【在 k****p 的大作中提到】
: 那样可以用priority_queue。priority_queue的函数名和stack一样的,pop,push,top很
: 好记。
: 面试官怎么看,我也不清楚。面试经验不多。。。
: 另外那个题也可以两两merge。假设总长度N,heap复杂度O(Nlog(K))。 两两merge的话
: ,每轮最多2N(list奇数2N,偶数N)。有log(K)轮。

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。