由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 问一个排序的问题
相关主题
heap sort的缺点是什么?和quick sort比ebay 电面
面试中举例常见的高效排序算法, 为什么都举quicksort和mergesort, 很少说heapsort呢刚完的amazon电话面试
junior level的工作对算法要求有多高?linkedin今天的电面题
Your mind must be fxxx up!【已派完】宝贝今天满月,顺便给爸爸带来一份新工作。
谁知道STL sort用的啥算法?备考google onsite, 讨论堆排序的时间复杂度
哪位大写给说说 何时用 merge sort, 何时用 quick sort, 何时 heap sort菜鸟刷题两个星期了。。。
LA码农工资咋样?带点面经其实我很想知道, 多少软工能25分钟内把heapsort写下
ebay二轮电面面经为什么quicksort会比heapsort快?
相关话题的讨论汇总
话题: quicksort话题: heapsort话题: mergesort话题: sort话题: 交换
进入JobHunting版参与讨论
1 (共1页)
g***j
发帖数: 1275
1
为啥quicksort的空间是lgN, 为啥mergesort的最坏的情况是N? 一般情况是什么?
quicksort, mergesort, heapsort,如何选择用哪个sort? 我只知道mergesort
stable,那么quicksort和heapsort的差别呢?除了worse case quicksort是n^2
另外,是不是只要涉及到交换的,都不stable?
g***j
发帖数: 1275
2
自己顶一下

【在 g***j 的大作中提到】
: 为啥quicksort的空间是lgN, 为啥mergesort的最坏的情况是N? 一般情况是什么?
: quicksort, mergesort, heapsort,如何选择用哪个sort? 我只知道mergesort
: stable,那么quicksort和heapsort的差别呢?除了worse case quicksort是n^2
: 另外,是不是只要涉及到交换的,都不stable?

x*******6
发帖数: 262
3
quicksort空间是O(1)吧,mergesort有最坏情况?一直都是O(nlogn)时间O(n)空间
吧。
磁盘上mergesort有优势。heapsort效率和quicksort相当但是多些额外操作所以一般没
人用吧。
l***i
发帖数: 1309
4
quicksort needs to maintain a stack of logn, either explicitly or by the
compiler implicitly.
o***d
发帖数: 313
5
space complexity of quicksort should be ologn, right? not o1 because of the
stack depth

【在 x*******6 的大作中提到】
: quicksort空间是O(1)吧,mergesort有最坏情况?一直都是O(nlogn)时间O(n)空间
: 吧。
: 磁盘上mergesort有优势。heapsort效率和quicksort相当但是多些额外操作所以一般没
: 人用吧。

r********d
发帖数: 7742
6
每种sort都有自己的优势和劣势,它们各自都有存在的道理。
quicksort有最好的实践效率。同时是in-place。配上random pivot/shuffle,median-
of-K 和 少量元素转insertion sort是最实用的排序方法。O(n^2)复杂度是极其小概率
事件,一般不会发生。同时因为其对硬件cache的应用效率较高,实践中Quicksort很难
被beat, 因为cache的访问速度比内存寻址快两个数量级。
Mergesort的优势是stable以及在external sort中的使用. 理论分析时候的也会用到
worstcase n(log(n))。同时基本的merge想法和变形,不需要random access, 常常用
在很多其他问题的解决之中。比如说merge lists。但是megersort的constant factor
比较大,是quicksort的好几倍。一般比Quicksort慢。
Heapsort因为在时间上和空间上都是最优,在很多论文只要涉及到sort都会用它做理论
分析。constant factor还不错,比merge sort的好。但是它的致命弱点是对cache利用
的不好,比如说max-heapify的过程中,很少有相邻元素的处理。虽然有这些缺点,有
时小规模排序时还是有用。
并不是涉及到交换的都是不stable,比如说insertion sort就是stable的。关键要看交
换的过程是怎么样的。
如果要想真正理解这些算法,建议把基本的排序算法及其改进和变形都实现一下,同时
分析它的基本操作,时间空间复杂度。然后在不同大小和类型的数据集上运行一下这些
算法,分析结果,你就会有更深入的了解。

【在 g***j 的大作中提到】
: 为啥quicksort的空间是lgN, 为啥mergesort的最坏的情况是N? 一般情况是什么?
: quicksort, mergesort, heapsort,如何选择用哪个sort? 我只知道mergesort
: stable,那么quicksort和heapsort的差别呢?除了worse case quicksort是n^2
: 另外,是不是只要涉及到交换的,都不stable?

d**********x
发帖数: 4083
7
作为一个补充,stl的sort是introsort,除了这里提到的对quicksort的优化以外,还
可能会在quicksort递归深度过深的时候切换成heapsort

median-
factor

【在 r********d 的大作中提到】
: 每种sort都有自己的优势和劣势,它们各自都有存在的道理。
: quicksort有最好的实践效率。同时是in-place。配上random pivot/shuffle,median-
: of-K 和 少量元素转insertion sort是最实用的排序方法。O(n^2)复杂度是极其小概率
: 事件,一般不会发生。同时因为其对硬件cache的应用效率较高,实践中Quicksort很难
: 被beat, 因为cache的访问速度比内存寻址快两个数量级。
: Mergesort的优势是stable以及在external sort中的使用. 理论分析时候的也会用到
: worstcase n(log(n))。同时基本的merge想法和变形,不需要random access, 常常用
: 在很多其他问题的解决之中。比如说merge lists。但是megersort的constant factor
: 比较大,是quicksort的好几倍。一般比Quicksort慢。
: Heapsort因为在时间上和空间上都是最优,在很多论文只要涉及到sort都会用它做理论

k****r
发帖数: 807
8
lz, 关于sort的特点,ls说的都很好了。
对于你的困惑about lgn space of quicksort,我个人认为是quicksort没层递归需要
为stack存下partition point,这样一层一层的,需要lgn space。
我自己的理解,不知道对不对。
r********d
发帖数: 7742
9
btw, 递归不仅仅是存partition point,递归的过程中堆栈会存储所有function call
和相关变量的信息。

【在 k****r 的大作中提到】
: lz, 关于sort的特点,ls说的都很好了。
: 对于你的困惑about lgn space of quicksort,我个人认为是quicksort没层递归需要
: 为stack存下partition point,这样一层一层的,需要lgn space。
: 我自己的理解,不知道对不对。

k****r
发帖数: 807
10
只是递归这样,还是所有call function这样?

call

【在 r********d 的大作中提到】
: btw, 递归不仅仅是存partition point,递归的过程中堆栈会存储所有function call
: 和相关变量的信息。

相关主题
哪位大写给说说 何时用 merge sort, 何时用 quick sort, 何时 heap sortebay 电面
LA码农工资咋样?带点面经刚完的amazon电话面试
ebay二轮电面面经linkedin今天的电面题
进入JobHunting版参与讨论
d**********x
发帖数: 4083
11
任何function call都这样
不过64bit的堆栈已经大幅简化了

【在 k****r 的大作中提到】
: 只是递归这样,还是所有call function这样?
:
: call

g***j
发帖数: 1275
12
谢谢大牛指点! 能不能详细谈谈这里的cache的问题,我一直困惑的是为啥heapsort用
得少,既然你谈到了他的致命的弱点,我还是不太清楚,请可以详细谈谈么?
另外,你这里constant factor具体指的什么?是 cNlgN里面的c么?

median-
factor

【在 r********d 的大作中提到】
: 每种sort都有自己的优势和劣势,它们各自都有存在的道理。
: quicksort有最好的实践效率。同时是in-place。配上random pivot/shuffle,median-
: of-K 和 少量元素转insertion sort是最实用的排序方法。O(n^2)复杂度是极其小概率
: 事件,一般不会发生。同时因为其对硬件cache的应用效率较高,实践中Quicksort很难
: 被beat, 因为cache的访问速度比内存寻址快两个数量级。
: Mergesort的优势是stable以及在external sort中的使用. 理论分析时候的也会用到
: worstcase n(log(n))。同时基本的merge想法和变形,不需要random access, 常常用
: 在很多其他问题的解决之中。比如说merge lists。但是megersort的constant factor
: 比较大,是quicksort的好几倍。一般比Quicksort慢。
: Heapsort因为在时间上和空间上都是最优,在很多论文只要涉及到sort都会用它做理论

g***j
发帖数: 1275
13
另外你说的insertion sorting, 应该不是用到了交换吧,它应该用到的是平移和插入
,跟quicksort和heapsort里面的纯交换两个元素的位置,不是一个意思吧?

median-
factor

【在 r********d 的大作中提到】
: 每种sort都有自己的优势和劣势,它们各自都有存在的道理。
: quicksort有最好的实践效率。同时是in-place。配上random pivot/shuffle,median-
: of-K 和 少量元素转insertion sort是最实用的排序方法。O(n^2)复杂度是极其小概率
: 事件,一般不会发生。同时因为其对硬件cache的应用效率较高,实践中Quicksort很难
: 被beat, 因为cache的访问速度比内存寻址快两个数量级。
: Mergesort的优势是stable以及在external sort中的使用. 理论分析时候的也会用到
: worstcase n(log(n))。同时基本的merge想法和变形,不需要random access, 常常用
: 在很多其他问题的解决之中。比如说merge lists。但是megersort的constant factor
: 比较大,是quicksort的好几倍。一般比Quicksort慢。
: Heapsort因为在时间上和空间上都是最优,在很多论文只要涉及到sort都会用它做理论

u**h
发帖数: 509
14
正解。

median-
factor

【在 r********d 的大作中提到】
: 每种sort都有自己的优势和劣势,它们各自都有存在的道理。
: quicksort有最好的实践效率。同时是in-place。配上random pivot/shuffle,median-
: of-K 和 少量元素转insertion sort是最实用的排序方法。O(n^2)复杂度是极其小概率
: 事件,一般不会发生。同时因为其对硬件cache的应用效率较高,实践中Quicksort很难
: 被beat, 因为cache的访问速度比内存寻址快两个数量级。
: Mergesort的优势是stable以及在external sort中的使用. 理论分析时候的也会用到
: worstcase n(log(n))。同时基本的merge想法和变形,不需要random access, 常常用
: 在很多其他问题的解决之中。比如说merge lists。但是megersort的constant factor
: 比较大,是quicksort的好几倍。一般比Quicksort慢。
: Heapsort因为在时间上和空间上都是最优,在很多论文只要涉及到sort都会用它做理论

r********d
发帖数: 7742
15
Insertion sort 可以交换实现,比如说我这样写:
void insertionsort(vector &v) {
for (int i = 1; i < v.size(); ++i)
for (int j = i-1; j>=0 && v[j] > v[j+1]; --j)
swap(v, j, j+1);
}
交换到底是否影响stability,主要看交换是怎么做的,stable就是说值相同的情况下
保持原序。所以只要
你的交换是按着顺序来就没问题。所以关键是看怎么换,和谁换。

【在 g***j 的大作中提到】
: 另外你说的insertion sorting, 应该不是用到了交换吧,它应该用到的是平移和插入
: ,跟quicksort和heapsort里面的纯交换两个元素的位置,不是一个意思吧?
:
: median-
: factor

r********d
发帖数: 7742
16
多谢补充,学习了。

【在 d**********x 的大作中提到】
: 作为一个补充,stl的sort是introsort,除了这里提到的对quicksort的优化以外,还
: 可能会在quicksort递归深度过深的时候切换成heapsort
:
: median-
: factor

r********d
发帖数: 7742
17
Cache就是数据locality的问题。Cache都小,但是快。所以如果程序处理的数据都是连
续的,或者说有很好locality的特性,Cache hit概率就大,运行就快。
关于Constant factor,就是那个C。有很多影响因素,先说俩个。
1) 你如果仔细分析算法的话,是可以数出基本步数的,比如有的算法是6n步,有的是
2n步,循环6次和循环两次都是O(n),但是执行时间肯定是不一样的。
2) 每一步的内容,拿排序来说,基本操作有交换和比较,虽然都是基本操作,但是花
费是不一样的。这也会影响程序快慢。
不用客气,我解释的过程也是整理思路的过程,自己也受益匪浅。

【在 g***j 的大作中提到】
: 谢谢大牛指点! 能不能详细谈谈这里的cache的问题,我一直困惑的是为啥heapsort用
: 得少,既然你谈到了他的致命的弱点,我还是不太清楚,请可以详细谈谈么?
: 另外,你这里constant factor具体指的什么?是 cNlgN里面的c么?
:
: median-
: factor

1 (共1页)
进入JobHunting版参与讨论
相关主题
为什么quicksort会比heapsort快?谁知道STL sort用的啥算法?
问一道programming peals上的题哪位大写给说说 何时用 merge sort, 何时用 quick sort, 何时 heap sort
现在这些公司的面试机制很有问题LA码农工资咋样?带点面经
~~~~~~~~问个G家的题~~~~~~~~~~~ebay二轮电面面经
heap sort的缺点是什么?和quick sort比ebay 电面
面试中举例常见的高效排序算法, 为什么都举quicksort和mergesort, 很少说heapsort呢刚完的amazon电话面试
junior level的工作对算法要求有多高?linkedin今天的电面题
Your mind must be fxxx up!【已派完】宝贝今天满月,顺便给爸爸带来一份新工作。
相关话题的讨论汇总
话题: quicksort话题: heapsort话题: mergesort话题: sort话题: 交换