
Algorithms
文章平均质量分 83
kimy
近5年的Java架构开发经验。喜欢专研技术,熟悉Python,PHP,Perl语言。希望能够为社区贡献一份力。
展开
-
Huffman编码算法之Java实现
Huffman编码介绍Huffman编码处理的是字符以及字符对应的二进制的编码配对问题,分为编码和解码,目的是压缩字符对应的二进制数据长度。我们知道字符存贮和传输的时候都是二进制的(计算机只认识0/1),那么就有字符与二进制之间的mapping关系。字符属于字符集(Charset), 字符需要通过编码(encode)为二进制进行存贮和传输,显示的时候需要解码(decode)回字符,字符集与编码原创 2013-11-29 11:55:15 · 34468 阅读 · 8 评论 -
堆排序(Heapsort)之Java实现
堆排序算法介绍堆是一种重要的数据结构,为一棵完全二叉树, 底层如果用数组存储数据的话,假设某个元素为序号为i(Java数组从0开始,i为0到n-1), 如果它有左子树,那么左子树的位置是2i+1,如果有右子树,右子树的位置是2i+2,如果有父节点,父节点的位置是(n-1)/2取整。分为最大堆和最小堆,最大堆的任意子树根节点不小于任意子结点,最小堆的根节点不大于任意子结点。所谓堆排序就是利用堆这原创 2013-12-05 22:25:31 · 65248 阅读 · 26 评论 -
一致哈希算法Java实现
一致哈希算法(Consistent Hashing Algorithms)是一个分布式系统中常用的算法。传统的Hash算法当槽位(Slot)增减时,面临所有数据重新部署的问题,而一致哈希算法确可以保证,只需要移动K/n份数据(K为数据总量, n为槽位数量),且只影响现有的其中一个槽位。这使得分布式系统中面对新增或者删除机器时,能够更快速的处理更改请求。本文将用Java实现一个简单版本的一致哈希算法原创 2014-11-19 18:12:41 · 4868 阅读 · 0 评论 -
c语言实现bit反转的最佳算法-从msb-lsb到lsb-msb
问题实现如下转换的最佳算法是什么?0010 0000 => 0000 0100具体的转换是从MSB->LSB到LSB->MSB, 所有的Bit都必须反转,那意味着,这并不是字节顺序的交换。最佳答案注意: 下面的算法都用C实现,但应该可以迁移到其它语言(只是不那么快的时候可别找我)。可选方案内存占用少(32位int,32位机器)(来源于这里)unsigned int翻译 2014-06-11 13:17:11 · 25807 阅读 · 2 评论 -
什么是游戏2048的最佳算法
问题我最近偶然发现一款叫2048的游戏。你需要通过上、下、左、右的方向移动来合并值相同的方块(Title)。每一次移动之后,一个新的值为2或者4的方块会随机的出现在某个空的位置。所有位置都塞满方块,并且没有值相同的方块可以移动的时候,游戏结束。游戏的目标是构造一个值为2048的方块。我需要遵循一套定义良好的策略来实现这个目标。所以我想到写个程序来实现。我当前的算法如下:while(!g翻译 2014-03-24 16:29:36 · 20557 阅读 · 1 评论 -
二叉搜索树之Java实现
h2 id="_1">什么是二叉搜索树二叉搜索树(Binary Search Tree),是最基础,且相对简单的一种数据结构,支持Insert,Delete,Search,Min,Max,Successor,Predecessor等操作。最大的特点是每一个节点有不超过两个子节点,并且左子节点小于或者等于父节点,而右节点大于或者等于父节点。说它基础,是因为很多其它树形数据结构以它为原型而扩展,比原创 2014-03-23 15:33:03 · 4639 阅读 · 2 评论 -
HashMap之Java实现
HashMap是使用最频繁、最重要的数据结构之一,提供了字典操作功能,Insert、Search、Delete操作的效率都很高。本文将尝试用Java实现一个最简单的HashMap。因为简单,才容易看到HashMap的本真设计思想。什么是Hash依我的理解,Hash就是把一个对象转化为一个正整数的过程。相同的对象产生相同的Hash Code,但不同的对象的Hash Code具有随机的特点,不原创 2014-03-20 23:00:38 · 10682 阅读 · 0 评论 -
归并排序(Mergesort)之Java实现
归并排序算法介绍归并排序是一个分治算法(Divide and Conquer)的一个典型实例,把一个数组分为两个大小相近(最多差一个)的子数组,分别把子数组都排好序之后通过归并(Merge)手法合成一个大的排好序的数组,归并的过程依然用扑克来解释,想象一下桌子上有两堆排好序(从小到大)的牌,每一次从两堆里面各抽取一张,比较一下两张的大小,如果两张一样大,都取出放到目标数组,否则取出较小的放到目原创 2013-12-04 22:19:34 · 17194 阅读 · 2 评论 -
快速排序(Quicktsort)之Java实现
快速排序算法介绍快速排序和归并排序都使用分治法来设计算法,区别在于归并排序把数组分为两个基本等长的子数组,分别排好序之后还要进行归并(Merge)操作,而快速排序拆分子数组的时候显得更有艺术,取一个基准元素,拆分之后基准元素左边的元素都比基准元素小,右边的元素都不小于基准元素,这样只需要分别对两个子数组排序即可,不再像归并排序一样需要归并操作。基准元素的选取对算法的效率影响很大,最好的情况是两原创 2013-12-05 13:14:31 · 46142 阅读 · 3 评论 -
选择排序(Selectsort)之Java实现
选择排序算法介绍选择排序与冒泡排序非常的相似,都是一层层筑顶的过程,不同点在于冒泡排序会频繁的互换位置,而选择排序只是记录最大元素的位置,并与顶互换,只需交换一次。所以选择排序与冒泡排序相比时间常数会更小,更有效率,尽管他们的最坏运行时间都是O(n2)。选择排序算法Java实现如《插入排序(Insertsort)之Java实现》一样,先实现一个数组工具类。代码如下:public c原创 2013-12-04 21:18:37 · 5844 阅读 · 0 评论 -
冒泡排序(Bubblesort)之Java实现
冒泡排序算法介绍冒泡排序比插入排序更简单,把最大的元素逐步推到最高位(当前须处理子数组的最高位)。依我的理解,冒泡排序是一个一层层筑顶的过程。顶筑好了,排序也就好了。冒泡排序的最坏运行时间是O(n2),效率和插入排序一样。冒泡排序算法Java实现如《插入排序(Insertsort)之Java实现》一样,先实现一个数组工具类。代码如下:public class ArrayUtils原创 2013-12-04 17:54:37 · 8166 阅读 · 0 评论 -
拓扑排序(Topologicalsort)之Java实现
拓扑排序算法介绍拓扑排序解决的是一系列相互依赖的事件的排序问题,比如Ant中有很多的Task,而某些Task依赖于另外的Task,编译之前需要清理空间,打包之前要先编译,但其它一些Task处理顺序可以调换(是无所谓前后,不是并行), 如何安排Task的执行顺序就可以用拓扑排序解决。熟悉Java的朋友应该都知道Spring,一个非常优秀的解决组件(Bean)依赖的框架,组件之间可能有依赖关系,也原创 2013-12-09 11:45:17 · 19978 阅读 · 1 评论 -
计数排序(Countsort)之Java实现
计数排序算法介绍比较排序算法可以通过决策树模型证明,其下线是O(nlgn)。而本文介绍的是时间效率为O(n)的计数排序。所谓排序算法,无非就是把正确的元素放到正确的位置,计数排序就是计算相同key的元素各有多少个,然后根据出现的次数累加而获得最终的位置信息。但是计数排序有两个限制条件,那就是存在一个正整数K,使得数组里面的所有元素的key值都不大于N,且key值都是非负整数。计数排序算法J原创 2013-12-06 21:39:09 · 9878 阅读 · 1 评论 -
插入排序(Insertsort)之Java实现
插入排序算法介绍排序算法是最简单的算法,也是最基本的算法。顾名思义,插入排序就是把当前待排序的元素插入到一个已经排好序的列表里面。 一个非常形象的例子就是右手抓取一张扑克牌,并把它插入左手拿着的排好序的扑克里面。插入排序的最坏运行时间是O(n2), 所以并不是最优的排序算法。特点是简单,不需要额外的存储空间,在元素少的时候工作得好。插入排序算法Java实现Java里面有很多数据类型,我原创 2013-12-04 17:07:17 · 31926 阅读 · 4 评论