档案日期2014的49

2014年12月8日 - 2014年12月14日

基数排序,桶排序,计数排序算法的区别

基数排序(Radix Sort)、桶排序(Bucket Sort)和计数排序(Counting Sort)都是非比较排序算法。也就是说,它们并不是通过比较元素之间的大小关系来进行排序的。

首先,让我们看看三种排序算法的时间复杂度:

基数排序:O(dn) (d次调用桶排序),空间复杂度 O(k) (稍后详解)

桶排序:O(n)时间复杂度,O(n)空间复杂度

计数排序:O(n)时间复杂度,O(k)空间复杂度,每一个元素都是整数,并且位于0到k - 1之间

计数排序

假设:数组中的每一个元素都位于[0, k-1]的区间内

算法:此处不做详细描述

它是一种稳定排序:

时间复杂度:O(n)

空间复杂度:O(k)

基数排序

假设:它基于下面的假设:

k1 k2 k3 ... kd,其中对于每一个元素ki均位于[0, k-1]的范围内,ki是数字。k是键(key)的基(base)。如果k=10,则键就是一个十进制数。

算法过程如下:

对于每一个数位,按照这一位对数组执行计数排序。

算法假设每一次调用计数排序时,结果都是一次稳定的排序。否则基数排序就行不通了。

时间复杂度:O(dn) 

空间复杂度:O(k)

显然,你可以通过增加k值减少d,同时牺牲一部分空间。

桶排序

假设:它使用了具有固定范围的“桶”。它假设每一个元素都会落在这些桶内。每一个桶的范围是固定的。如果桶的范围是1,则该算法就与计数排序很相似了,唯一的不同之处是,它存储的是元素本身而不是它们的计数。

算法:

假设有k个桶:B0, B1, ... ...

继续阅读

Python vs. PHP下一个项目应该用什么

PHP和Python目前是世界上最流行的两种Web编程语言,自然都有其各自的优点和缺点。然而,在澳大利亚IDG公司——Techworld Australia的出版商——我们在过去的18个月左右的时间里,正在从PHP迁移到Python。虽然我们还没有为这个决定感到后悔,但如果你觉得从PHP切换至Python是一个简单的决定,就大错特错了。

PHP vs. Python: 语言流行程度

毋庸置疑PHP非常的流行;实际上,它现在是最流行的开源编程语言。PHP开发者和PHP工作都是一抓一大把。现在,在Seek.com.au上,澳大利亚就有大概3790个PHP职位。并且这种需求通常转化为一个巨大的开发者资源池,在需要扩展你的团队时,随时可以从中选出可用的开发者。(And this demand generally translates into a large pool of developers that can be tapped into when you want to expand your team.

Python从来没有这么流行过。不过,反过来,它没有PHP那么流行有时候也是一种优势。Python开发者可能会更加稀缺,但我发现他们通常素质更高。虽然我确定市场上有一些比较差的Python开发者,但我还没有在面试时遇到过。我很希望PHP开发者也可以这样。

PHP vs. Python: 语言语法

PHP有着非常类似C的语法。任何接触过类C语言的人都可以直观地看到这一点。花括号和分号和你见过的完全一样,感觉很熟悉。在我用PHP开发第一个项目时并没有PHP经历。仅仅花了2个小时,我阅读了一个小教程,发现了我要找的bug并且修复了问题,提交到生产环境。

Python就没有这么容易了。取代了花括号的有意义的空格需要花费一些时间来适应。这个变化需要刚刚开始使用Python的开发者多花一些时间来适应。随着时间的推移,这个缺点就会自行消失,并且,由于Python语法通常极为简单,实际上读起来像伪代码。

PHP vs. ...

继续阅读

每日归档

上周

下周

归档