弱问C++用heap的题能用multiset吗# JobHunting - 待字闺中b*i2015-03-25 07:031 楼问问,因为multiset实在写习惯了,新的priority_queue反而怕出bug。请问面试的时候用multiset来代替heap可以吗(如果不要求实现heap本身的话),multiset是基于红黑树的,复杂度应该都是log(n)的。
k*p2015-03-25 07:032 楼总感觉用红黑树代替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/。
b*i2015-03-25 07:033 楼同意,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/。
k*p2015-03-25 07:034 楼那样可以用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面试官会说吗?: : ()
b*i2015-03-25 07:035 楼恩,有道理,两两merge【在 k****p 的大作中提到】: 那样可以用priority_queue。priority_queue的函数名和stack一样的,pop,push,top很: 好记。: 面试官怎么看,我也不清楚。面试经验不多。。。: 另外那个题也可以两两merge。假设总长度N,heap复杂度O(Nlog(K))。 两两merge的话: ,每轮最多2N(list奇数2N,偶数N)。有log(K)轮。