算法原理
基数排序 (Radix Sort) 是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。基数排序的发明可以追溯到 1887 年赫尔曼·何乐礼在打孔卡片制表机 (Tabulation Machine)上的贡献。
排序过程:将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。
基数排序法会使用到桶 (Bucket),顾名思义,通过将要比较的位(个位、十位、百位...),将要排序的元素分配至 0~9 个桶中,借以达到排序的作用,在某些时候,基数排序法的效率高于其它
继续阅读 »
算法原理
桶排序 (Bucket sort)或所谓的箱排序的原理是将数组分到有限数量的桶子里,然后对每个桶子再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序),最后将各个桶中的数据有序的合并起来。
排序过程:
1. 假设待排序的一组数统一的分布在一个范围中,并将这一范围划分成几个子范围,也就是桶
2. 将待排序的一组数,分档规入这些子桶,并将桶中的数据进行排序
3. 将各个桶中的数据有序的合并起来
Data Structure Visualizations 提供了一个桶排序的分步动画演示。
more
实例分析
设有数组 array = [29, 25, 3, 49, 9, 37, 21, 43],那
继续阅读 »
亲爱的程序猿们,你们肯定都用过printf吧?你们知道,看起来理所当然的简单的printf,实际上是个难倒众多计算机科学家的难题吗?直到1971年,才有我们的毒师Mr.White科学家(Jon White)解决这个问题,直到1990年,我们的Mr.White才正式发表这算法的最终版本,Dragon4,
在随后到最近的几十年来,语言上的各种浮点数打印字符串都是用Dragon4算法,其他人的研究都只是对这个算法修修补补,直到Grisu算法的出现。Grisu算法由Florian Loitsch发表,64位的浮点数可以用它表示,但是有0.6%的依然要用Dragon4算法来表示。
因此,要是想做轮子,无论如何都要懂Dragon4算法!!!
继续阅读 »
算法原理
猴子排序 (Bogo Sort) 是个既不实用又原始的排序算法,其原理等同将一堆卡片抛起,落在桌上后检查卡片是否已整齐排列好,若非就再抛一次。其名字源自 Quantum bogodynamics,又称 bozo sort、blort sort 或猴子排序(参见无限猴子定理)。并且在最坏的情况下所需时间是无限的。
伪代码:
javascript
while not InOrder(list) do
Shuffle(list)
done
more
这个排序方法没有办法给出实例分析,下面直接看代码。
JavaScript 语言实现
``` javascript
function bogoSort(array)
继续阅读 »
最近稍微整理了下tbox的utils模块,发现里面有很多都是一些,之前放置的hash算法,例如:md5, sha1, crc32, adler32啊什么,比较凌乱。
因此我抽时间整理下这些hash算法,打算单独建立个hash算法模块,来放置各种大大小小的hash算法。
顺便把tbox里面用到的一些字符串hash算法,也做了些整理,一并归并到这个新模块中,例如比较常用的一些字符串哈希:
bkdr, fnv, fnv-1a, aphash, rshash, djb2, murmur, sdbm, blizzard ...
其中 bkdr 的效果比较好,因此目前作为tbox里面主要的string哈希来用,其他的hash虽然实现
继续阅读 »
学习一门语言的最佳方式是实践——但“Hello, World!”之类的实践太过简单,然而太复杂的实践(比如一个复杂的项目代码)又让人十分痛苦。本文提供了一个不那么简单、又不会让人过于痛苦的算法用于编程实践。同时,它还提供了若干种不同编程语言对这一算法的实现——通过比较它们,我们可以对这些语言有更好的理解。
继续阅读 »
之前两个月的时间全组投入到了我们自己的TV launcher的开发, 这算是比较重要的项目, 涉及到公司未来OTT的战略性产品, 所以重视程度比较高。
我负责了轮播服务的后端开发, 当然整个技术栈还是以Tornado/Redis/MongoDB为主。经常听到兄弟们抱怨学习了那么多算法, 进BAT也得面试算法什么的, 有个啥子用, 撸了这么多年代码, 用不到啥算法, 不也照样撸的风声水起吗。哥下面就小小展示一下, 其实算法这东西是有用的, 你带着算法和数据结构的一些思想思考问题, 和你仅仅凭经验写东西, 结果是很不一样的。
所谓轮播:指的是像电视台那样的一天24小时的滚动播放,由服务端生成播放列表(频道\频道的视频列表等), 并计算
继续阅读 »
定义
基数排序(英语:Radix Sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。
more
算法步骤
将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。
然后,从最低位开始,依次进行一次排序。
这样从最低位排序一直到最高位排序完成以后,数列就变成一个有序序列。
基数排序的方式可以采用LSD(Least significant digital)或MSD(Most significant digital),LSD的排序方式由键值的最右边开始,而MSD则相反,由
继续阅读 »
最近看到微博的短链接真是很火啊,新浪、腾讯、搜狐等微博网站都加入了短链接的功能。之所以要是使用短链接,主要是因为微博只允许发140 字,如果链接地址太长的话,那么发送的字数将大大减少。短链接的主要职责就是把原始链接很长的地址压缩成只有6 个字母的短链接地址,当我们点击这6 个字母的链接后,我们又可以跳转到原始链接地址。
国内外有很多公司都提供了短链,比如微博,推特,还有各种网盘
下面是几个例子:
url.cn/JIIcys
t.cn/zHgLwAv
t.cn/8kNQmsg
最容易想到的算法可能是利用md5类的加密算法,然后针对加密后的字符串进行处理。
1)将长网址md5生成32位签名串,分为4段, 每段8个字节;
2)
继续阅读 »
R 语言用的垃圾回收算法是 分代算法, 有一个小优化就是会用 name 字段来实现 copy on write.
当 name 为0时, 没有任何人用它,可以删掉;
当 name 为1时, 正在有表达式在用它,所以复制了一份;
当 name 为2时, 证明有另一个变量指向了它,当修改时要复制一份出来.
继续阅读 »