leetcode -- Maximum Gap -- 与distributed sorting有关,重点复习一下

来源:互联网 发布:java生成验证码工具类 编辑:程序博客网 时间:2024/06/12 10:09

https://leetcode.com/problems/maximum-gap/

sort 算法除了比较算法之外,还有distributed sort,时间效率可以优于O(nlogn),甚至可以达到O(n).包括couting sort, bucket sort, radix sort.

复习这三种的原理。
参考https://www.byvoid.com/blog/sort-radix

这里对于bucket sort,提到

可能你会发现,计数排序似乎饶了点弯子,比如当我们刚刚统计出CC[i]可以表示A中值为i的元素的个数,此时我们直接顺序地扫描C,就可以求出排序后的结果。的确是这样,不过这种方法不再是计数排序,而是桶排序(Bucket Sort),确切地说,是桶排序的一种特殊情况。用这种方法,可以很容易写出程序,比计数排序还简单,只是不能求出稳定的Order

这里就解释了我对counting sort的疑惑,count了之后其实可以直接再scan一遍c就可以得到排序的结果了,这样其实就变成了bucket sort。

这里还要注意bucket sort,分配元素到每个bucket的方式,每个bucket的范围已经是有序的了,所以也就是最后只需要scan一下每个bucket就得到了排序的结果。而最极端的情况就是最大值是k,那么就分配k个bucket。这样就是O(n)的了,

通常

当桶的个数M接近于N是,桶排序的时间复杂度就可以近似认为是O(N)的。就是桶越多,时间效率就越高,而桶越多,空间却就越大,由此可见时间和空间是一个矛盾的两个方面。

所以一般可以认为bucket sort可以达到最好的time complexity O(n)

这题目就是bucket sort或者radix sort之后,再找gap就行了

排序算法参考
http://www.jianshu.com/p/ae97c3ceea8d#、
https://www.byvoid.com/blog/sort-radix
https://segmentfault.com/a/1190000003054515
http://blog.csdn.net/cauchyweierstrass/article/details/49781571
https://segmentfault.com/a/1190000002595152

关于这道题:
http://yucoding.blogspot.hk/2014/12/leetcode-question-maximum-gap.html
http://bookshadow.com/weblog/2014/12/14/leetcode-maximum-gap/

0 0
原创粉丝点击