随笔分类 - 算法与数据结构
摘要:分为饿汉模式及懒汉模式 饿汉模式是初始化时创建。 懒汉模式是使用时创建。 饿汉模式: public class Student1 { // 2:成员变量初始化本身对象 private static Student1 student = new Student1(); // 1:构造私有 privat
阅读全文
摘要:最新一期的 KDnuggets 调查展示了一份数据科学家使用度最高的算法列表,这份列表中包含了很多惊喜,包括最学术的算法和面向产业化的算法。 哪些方法/算法是您在过去 12 个月中运用到一个实际的数据科学相关的应用程序中的? 这是基于 844 个投票者的结果 排名前十的算法以及他们的投票者的比例分布
阅读全文
摘要:普通办法:扫一遍知道长度,然后再扫到中间点。高级办法:两个指针去扫,每当第一个指针扫两次时第二个指针搜一次,第一个指针到了终点时,第二个指针刚好到了中间点………………这高级办法真是很巧妙哇。
阅读全文
摘要:算法说明假设煎锅里边有N个煎饼摞在了一起,它们大小不一并且顺序不一致,我们需要通过拿铲子将它们不停的翻个,进行排序,最终得到一个底下是大的煎饼,上边是小的煎饼的序列。这个排序的过程就是煎饼排序。这个算法有两种解,一种是普通解,一种是最优解。普通论证:例如你的初始煎饼顺序是[2,4,3,1]然后2与4...
阅读全文
摘要:算法说明图书馆排序是插入排序的变种,典型的以空间换时间的一种方法。我个人感觉这种思路可以学习借鉴,但直接使用的场景应该不大。我们知道,真正的插入排序通常往前边插入元素后,我们要把后边所有的元素后移。而图书馆排序的思路就是将每个元素后边都预留N个空间(例如预留10个元素空间),这样往某个元素前插入时,...
阅读全文
摘要:算法说明耐心排序是插入排序的一种,至少wikipedia是这么分的。话说我明白这个算法的实现思路了,但是不明白这么做的意义何在? 如果明白的朋友帮忙留个言说一下,以后如果我明白的话,我会来修改这个博文记录清楚的。其实这个算法很简单,先是自动分桶(哈哈,有别于桶排序,耐心排序的分桶是根据实际待排数组的...
阅读全文
摘要:算法说明多路归并排序也叫k路归并排序,实际上是归并排序的扩展版,同样也是归并排序的一种,通常的应用场景的针对大数据量的排序。实现过程:1、从字面可以看出,多路归并就是将待排的大数据量分成K路,然后将K路的每个子数据集进行排序;然后将排序的结果存储至磁盘中,这也就是所谓的外排序。2、子数据集中的排序我...
阅读全文
摘要:算法说明若领图排序是分布排序的一种。个人理解,若领图排序算是桶排序+计数排序的变异版,桶排序计数排序理解了,那么若领图排序理解起来就会比较容易。区别其实就是存储中间值的方式做了调整……话说,这个代码我写的很烂很吃力,而且写好几个小时才写好,再次证明我的资质真的很差哟。。。好了,结合代码大概说一下流程...
阅读全文
摘要:---恢复内容开始---算法说明珠排序是分布排序的一种。说实在的,这个排序看起来特别的巧妙,同时也特别好理解,不过不太容易写成代码,哈哈。这里其实分析的特别好了,我就不画蛇添足啦。 大家看一下这个分析,特别特别简单的。然后我对于下面的代码做一下描述:1、找到数组的最大值(20-23行代码)2、创建珠...
阅读全文
摘要:算法说明鸽巢排序是分布排序的一种,我理解其实鸽巢就是计数排序的简化版,不同之处就是鸽巢是不稳定的,计数排序是稳定的。逻辑很简单,就是先找出待排数组的最大值maxNum,然后实例一个maxNum+1长度的数组。例如待排数组int[] arrayData = { 22, 33, 57, 55, 58, ...
阅读全文
摘要:算法说明锦标赛排序是选择排序的一种。实际上堆排序是锦标赛排序的优化版本,它们时间复杂度都是O(nlog2n),不同之处是堆排序的空间复杂度(O(1))远远低于锦标赛的空间复杂度(O(2n-1))堆排序是基于二叉树的, 所以锦标赛排序也是基于二叉树的,并且是完美二叉树。我尝试用最通俗的方法来做一下解释...
阅读全文
摘要:算法说明圈排序是选择排序的一种。其实感觉和快排有一点点像,但根本不同之处就是丫的移动的是当前数字,而不像快排一样移动的是其它数字。根据比较移动到不需要移动时,就代表一圈结束。最终要进行n-1圈的比较。 这个比较说起来比较抽象,所以举例子是最好的方法,这里例子使用的是这里的,望见谅:待排数组[ 6 ...
阅读全文
摘要:算法说明梳排序是交换排序的一种,它其实也是改自冒泡排序,不同之处是冒泡排序的比较步长恒定为1,而梳排序的比较步长是变化的。步长需要循环以数组长度除以1.3,到最后大于等于1即可。光说可能比较抽象,所以实例举个例子可能会好些,这里使用的例子从这里转载过来的假设待数组[8 4 3 7 6 5 2 1]待...
阅读全文
摘要:算法说明地精排序是交换排序的一种,它是冒泡排序的一种改良,我感觉和鸡尾酒排序挺像的。不同之处是鸡尾酒排序是从小到大,然后再从大到小切换着排序的。而地精排序是上来先从小到大排序,碰到交换到再从大到小,接着再从小到大进行排序。举个例子:对8,6,4,5,1进行升序排序1、8与6交换,结果是{6,8,4,...
阅读全文
摘要:算法说明Bogo排序是交换排序的一种,它是一种随机排序,也是一种没有使用意义的排序,同样也是一种我觉得很好玩的排序。举个形象的例子,你手头有一副乱序的扑克牌,然后往天上不停的扔,那么有一定机率会变成有序的。哈哈,就是这样。看一下代码大家就知道了。代码使用的是javapackage hark.sort...
阅读全文
摘要:算法说明个人感觉是没有意义的算法,只是用来作为学术研究。或者说开拓一下思维。从wikipedia copy来的一句解释的话:Stooge排序是一种低效的递归排序算法,甚至慢于冒泡排序。在《算法导论》第二版第7章(快速排序)的思考题中被提到,是由Howard、Fine等教授提出的所谓“漂亮的”排序算法...
阅读全文
摘要:算法说明奇偶排序又叫奇偶换位排序,砖排序。它是一种交换排序,也是冒泡的一个变种顾名思义,奇偶排序,其实就是先循环奇数位,然后将奇数位与偶数位比较计算。 然后再循环偶数位,再和奇数位比较运算。看一下代码大家就明白了。据wiki所述,这种算法是一种并行算法,个人对这块现在不太理解,没明白这块所谓的并行是...
阅读全文
摘要:算法说明鸡尾酒排序又叫定向冒泡排序,鸡尾酒搅拌排序,搅拌排序,涟漪排序,回来排序,快乐小时排序。鸡尾酒排序是交换排序的一种,它是冒泡排序的一个轻微的变种。冒泡是从低向高比较排序,鸡尾酒从低向高,从高向低交换着进行排序。大家看一下代码就知道了。某些特殊有序数组情况下,鸡尾酒排序是效率略好于冒泡排序,例...
阅读全文
摘要:算法说明桶排序的逻辑其实特别好理解,它是一种纯粹的分而治之的排序方法。举个例子简单说一下大家就知道精髓了。假如对11,4,2,13,22,24,20 进行排序。那么,我们将4和2放在一起,将11,13放在一起,将22,24,20放在一起。 然后将这三部分分别排序(可以根据实现情况任意选择排序方式,我...
阅读全文
摘要:算法说明基数排序是基于计数排序的,所以看这个之前要先看一下计数排序对于理解基数排序是很有帮助的(发现计数和基数的音节几乎一致啊)。这个我有写,请点击。OK,现在你肯定已经熟悉了计数排序,那么我就来说一下基数排序。所谓基数排序,其实就是分别对数字的个位,十位,百位,百位。。。。分别进行计数排序。当然可...
阅读全文