由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - n个排序链表,如何O(1) space合并成一个
相关主题
贡献一个groupon的电面题G面试题求解
A very bad phone interview from AmazonGoogle phone interview
T家一面合并两个排序好的链表, 优解?
弱问C++用heap的题能用multiset吗弱问一个小问题,leetcode 上merge sorted list
很久前,面亚麻时被出了个hard的求一下这题解法。
google phone interview变相的merge sort
链表插入排序都写了一个小时,对人生失去信心了。Facebook第一面经,通话质量差
海量数据用什么排序方法好median of an array of ints, 请问这题的经典回答是什么?谢谢
相关话题的讨论汇总
话题: lsts话题: heap话题: merge话题: null话题: node
进入JobHunting版参与讨论
1 (共1页)
l**h
发帖数: 893
1
之前看到面经:"n个排序链表,每个有m个元素,如何合并成一个。最开始说的是min
heap的方法,他要求的是O(1) space但是时间效率一样的,想出来了,然后证明时间开
销,写了代码。"
min heap的方法容易解释,但是怎么O(1) space合并而时间效率和min heap一样呢?
b*****u
发帖数: 648
2
heap size n:
mn*logn
heap size k:
mn * log n * log k
(每个数要经历logn次merge)
所以还是同阶
l**h
发帖数: 893
3
没有太看懂你的
用一个size为n的min heap, 可以达到 mn*logn.
问题是现在只准用O(1) space, 要达到同样的时间效率

【在 b*****u 的大作中提到】
: heap size n:
: mn*logn
: heap size k:
: mn * log n * log k
: (每个数要经历logn次merge)
: 所以还是同阶

w****x
发帖数: 2483
4
NODE* mergLists(NODE* lsts[], int n)
{
if (lsts == NULL || n <= 0)
return NULL;
while (n > 1)
{
for (int i = 0; i < n; i += 2)
{
if (i+1 >= n)
{
lsts[(n-1)/2] = lsts[i];
break;
}
lsts[i/2] = mergeTwoList(lsts[i], lsts[i+1]);
}
n = (n+1)/2;
}
return lsts[0];
}
l**h
发帖数: 893
5
通过多次两路归并?这个复杂度比min heap要高吧,
假如合并之后的总数据长度为n,
多次两路归并 O(nlog(n))
多路归并(用min heap): O(nlog(k)), k是原始linkedlist个数

【在 w****x 的大作中提到】
: NODE* mergLists(NODE* lsts[], int n)
: {
: if (lsts == NULL || n <= 0)
: return NULL;
: while (n > 1)
: {
: for (int i = 0; i < n; i += 2)
: {
: if (i+1 >= n)
: {

b*****u
发帖数: 648
6
假设k 是常数。 也就是用一个常数size的heap
这样每轮merge对每个数插入的开销减小了,merge的轮数增多了。但是开销仅仅增大了
logk 倍

【在 l**h 的大作中提到】
: 没有太看懂你的
: 用一个size为n的min heap, 可以达到 mn*logn.
: 问题是现在只准用O(1) space, 要达到同样的时间效率

p*****2
发帖数: 21240
7
但是怎么O(1) space合并而时间效率和min heap一样呢?
哪里来的这个要求?
r*********n
发帖数: 4553
8
interesting
are you suggesting double-layer merge?
merge every k lists and then merge n/k items from the previous merge
m*n*lgk*lg(n/k)
but in the second layer of merge, you still need O(n) space

【在 b*****u 的大作中提到】
: 假设k 是常数。 也就是用一个常数size的heap
: 这样每轮merge对每个数插入的开销减小了,merge的轮数增多了。但是开销仅仅增大了
: logk 倍

l**h
发帖数: 893
9
原题:
http://www.mitbbs.com/article_t/JobHunting/32279127.html
第五轮,n个排序链表,每个有m个元素,如何合并成一个。最开始说的是min heap的方
法,他要求的是O(1) space但是时间效率一样的,想出来了,然后证明时间开销,写了
代码。

【在 p*****2 的大作中提到】
: 但是怎么O(1) space合并而时间效率和min heap一样呢?
: 哪里来的这个要求?

l**h
发帖数: 893
10
原题:
http://www.mitbbs.com/article_t/JobHunting/32279127.html
第五轮,n个排序链表,每个有m个元素,如何合并成一个。最开始说的是min heap的方
法,他要求的是O(1) space但是时间效率一样的,想出来了,然后证明时间开销,写了
代码。

【在 p*****2 的大作中提到】
: 但是怎么O(1) space合并而时间效率和min heap一样呢?
: 哪里来的这个要求?

w****x
发帖数: 2483
11

嗯,是啊。有道理。
可能面试官自己也搞错了

【在 l**h 的大作中提到】
: 通过多次两路归并?这个复杂度比min heap要高吧,
: 假如合并之后的总数据长度为n,
: 多次两路归并 O(nlog(n))
: 多路归并(用min heap): O(nlog(k)), k是原始linkedlist个数

1 (共1页)
进入JobHunting版参与讨论
相关主题
median of an array of ints, 请问这题的经典回答是什么?谢谢很久前,面亚麻时被出了个hard的
MS一道onsite面题 白板codinggoogle phone interview
判断一个string是否是某个pattern的周期循环链表插入排序都写了一个小时,对人生失去信心了。
问个面试题目海量数据用什么排序方法好
贡献一个groupon的电面题G面试题求解
A very bad phone interview from AmazonGoogle phone interview
T家一面合并两个排序好的链表, 优解?
弱问C++用heap的题能用multiset吗弱问一个小问题,leetcode 上merge sorted list
相关话题的讨论汇总
话题: lsts话题: heap话题: merge话题: null话题: node