算法
sysmedia
这个作者很懒,什么都没留下…
展开
-
斐波那契数列三种算法(fibonacci)
题目要求:编写程序在控制台输出斐波那契数列前20项,每输出5个数换行方法一:public class Fibonacci1{ //定义三个变量方法 public static void main(String[] args) { int a=1, b=1, c=0; System.out.println("斐波那契数列前20项为:"); System.out.原创 2016-12-12 14:24:13 · 925 阅读 · 0 评论 -
海量数据处理算法—Bloom Filter
1. Bloom-Filter算法简介 Bloom-Filter,即布隆过滤器,1970年由Bloom中提出。它可以用于检索一个元素是否在一个集合中。 Bloom Filter(BF)是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。它是一个判断元素是否存在集合的快速的概率算法。Bloom Filter有转载 2017-03-26 20:34:03 · 2224 阅读 · 0 评论 -
基数排序
(1)基本思想:将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后,数列就变成一个有序序列。(2)实例:(3)用java实现[plain] view plain copy print?import java.util.ArrayList;转载 2016-12-20 10:50:19 · 213 阅读 · 0 评论 -
归并排序
(1)基本排序:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。(2)实例:(3)用Java实现[plain] view plain copy print?import java.util.Arrays; public class转载 2016-12-20 10:49:45 · 210 阅读 · 0 评论 -
希尔排序
2, 希尔排序(最小增量排序)(1)基本思想:算法先将要排序的一组数按某个增量d(n/2,n为要排序数的个数)分成若干组,每组中记录的下标相差d.对每组中全部元素进行直接插入排序,然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序。当增量减到1时,进行直接插入排序后,排序完成。(2)实例:(3)用java实现[plain]转载 2016-12-20 10:47:09 · 197 阅读 · 0 评论 -
直接插入排序
先来看看8种排序之间的关系: 1, 直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。(2)实例(3)用java实现[plain] view plain copy p转载 2016-12-20 10:46:25 · 192 阅读 · 0 评论 -
堆排序
4,堆排序(1)基本思想:堆排序是一种树形选择排序,是对直接选择排序的有效改进。堆的定义如下:具有n个元素的序列(h1,h2,...,hn),当且仅当满足(hi>=h2i,hi>=2i+1)或(hi算法描述来看,堆排序需要两个过程,一是建立堆,二是堆顶与堆的最后一个元素交换位置。所以堆排序有两个函数组成。一是建堆的渗透函数,二是反复调用渗透函数实现排序的函数。(2)实例:初转载 2016-12-20 10:44:28 · 297 阅读 · 0 评论 -
简单选择排序
3.简单选择排序(1)基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换;然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。(2)实例:(3)用Java实现[plain] view plain copy print?publicclass selectSort {转载 2016-12-20 10:43:45 · 280 阅读 · 0 评论 -
快速排序
6.快速排序(1)基本思想:选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。(2)实例:(3)用java实现 [plain] view plain copy print?p转载 2016-12-20 10:12:09 · 269 阅读 · 0 评论 -
冒泡排序
正宗的冒泡排序:[plain] view plain copy print?public class bubbleSort { public bubbleSort(){ int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,2转载 2016-12-20 10:09:36 · 352 阅读 · 0 评论 -
如何在O(n)的时间复杂度内找出数组中
方法一:每次取出两个不同的数,剩下的数字中重复出现次数超过一半的数字肯定,将规模缩小化。如果每次删除两个不同的数,这里当然不是真的把它们踢出数组,而是对于候选数来说,出现次数减一,对于其他数来说,循环遍历就行。在剩余的数字里,原最高频数出现的频率一样超过了50%,不断重复这个过程,最后剩下的将全是同样的数字,即最高频数。此算法避免了排序,时间复杂度只有O(n).程序示例如下:转载 2016-12-09 16:23:51 · 1138 阅读 · 0 评论 -
旋转数组的最小数字
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的旋转,输出旋转数组中最小的元素。例如数组{3,4,5,1,2} 位{1,2,3,4,5}的一个旋转,该数组的最小值为1.思路:首先不考虑重复元素出现的情况,可以和二分查找一样, 用两个索引指针index1和index2分别指向数组的第一个元素和最后一个元素。根据题目中的转载 2016-12-09 15:53:13 · 344 阅读 · 0 评论 -
用递归方法求数组的最大值
采用递归方法,主要思路:“数组元素的第一个值”与“数组中其他元素组成的字数组的最大值”的最大值代码实现public class MaxNumber { public static int findMax(int[] A, int begin){ int len = A.length - begin; if(len==1) {转载 2016-12-09 15:41:03 · 2746 阅读 · 0 评论 -
如何找出数组中唯一的重复元素
数组a[N],1至N-1这N-1个数存放在a[N]中,其中某个数重复一次,写一个函数, 找出被重复的数字。要求每个数组元素只能访问一次,不用辅助存储空间。由于题目要求每个数组元素只能访问一次,不用辅助存储空间,可以从原理上入手,采用数学求和法,因为只有一个数字重复一次,而数又是连续的,根据累加和原理,对数组的所有项求和,然后减去1至N-1的和,即为所求的重复数。程序代码如下:转载 2016-12-09 15:37:25 · 623 阅读 · 0 评论 -
从2.5亿个数字里面找出不重复的数字的个数
问题描述如下:有2.5亿个整数(这2.5亿个整数存储在一个数组里面,至于数组是放在外存还是内存,没有进一步具体说明);要求找出这2.5亿个数字里面,不重复的数字的个数;另外,可用的内存限定为600M;要求算法尽量高效,最优;用一个bit表示一个数是否存在,32bit中无符号整数有4G个,共需4G bits,每个字节8 bits,需要4G/8 = 512M字节转载 2016-12-08 10:54:14 · 9468 阅读 · 1 评论 -
ehcache memcache redis 三大缓存男高音
最近项目组有用到这三个缓存,去各自的官方看了下,觉得还真的各有千秋!今天特意归纳下各个缓存的优缺点,仅供参考! Ehcache在Java项目广泛的使用。它是一个开源的、设计于提高在数据从RDBMS中取出来的高花费、高延迟采取的一种缓存方案。正因为Ehcache具有健壮性(基于java开发)、被认证(具有apache 2.0 license)、充满特色(稍后会详细介绍),所以被转载 2016-12-13 11:36:32 · 439 阅读 · 0 评论 -
Bit Map算法简介
1. Bit Map算法简介 来自于《编程珠玑》。所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。2、 Bit Map的基本思想 我们先来看一个具体的例子,假设我们要对0-7内的5个元素(4,7,2,5,3)排序(这转载 2017-03-26 20:35:39 · 644 阅读 · 0 评论