
算法
文章平均质量分 90
帅性而为1号
就读于东南大学,现阿里巴巴Java工程师
展开
-
使用Guava RateLimiter限流以及源码解析
前言在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流缓存 缓存的目的是提升系统访问速度和增大系统处理容量 降级 降级是当服务出现问题或者影响到核心流程时,需要暂时屏蔽掉,待高峰或者问题解决后再打开 限流 限流的目的是通过对并发访问/请求进行限速,或者对一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务、排队或等待、降级等处理常用的限流算法漏桶算...转载 2020-04-10 20:16:19 · 637 阅读 · 0 评论 -
关于海量数据查找排序问题
问题:假设一个文件中有9亿条不重复的9位整数,现在要求对这个文件进行排序。 一般解题思路: 1、将数据导入到内存中 2、将数据进行排序 (比如插入排序、快速排序) 3、将排序好的数据存入文件 难题: 一个整数为4个字节 即使使用数组也需要900,000,000 * 4byte = 3.4G内存 对于32位系统,访问2G以上的内存非常困难,而且一般设备也没有这转载 2016-06-22 21:55:06 · 992 阅读 · 0 评论 -
寻找迷宫的一条出路算法
寻找迷宫的一条出路,1代表障碍,0代表通。算法描述:这里可以使用几种方法,我知道的有使用《数据结构》上“穷举求解”的方法,还有就是使用遗传算法寻找最优路径。这里我先简单描述下“穷举求解”,然后再做遗传算法的方式。1 问题中要涉及走过路径的回溯,因为栈是先进后出,所以利于回溯,选择栈来存储走过路径2 每一步有四个方向可以走,每到一步依次判断每一个方向,只要判断转载 2016-06-22 21:58:26 · 2223 阅读 · 0 评论 -
Trie树
参考链接:http://blog.youkuaiyun.com/v_july_v/article/details/6897097 百度百科 http://blog.youkuaiyun.com/hackbuteer1/article/details/7964147一、知识简介 最近在看字符串算法了,其中字典树原创 2016-08-03 19:22:29 · 812 阅读 · 0 评论 -
布隆过滤器(Bloom Filter)详解
原文来源:http://www.cnblogs.com/haippy/archive/2012/07/13/2590351.html http://www.cnblogs.com/heaad/archive/2011/01/02/1924195.html 布隆过滤器概念 (Bloom Filter)是由布隆(Burton转载 2016-07-31 10:13:10 · 2633 阅读 · 0 评论 -
字符串中最长回文算法
解法一:这是一个非常常见的java面试问题,要解决这个问题,首先,我们要确定解决问题的基本思路。这里关键是要先找到回文的中间点位置,然后比较它左右位置的字符是否相同。例如12321,这里的中间点为3,然后依次比较两侧的字符2和1。如果回文长度为偶数,例如12333321,这里中间点为33,然后依次比较3,2,1。public class LongestPalindromeFinde原创 2016-08-01 00:02:20 · 411 阅读 · 0 评论 -
java实现迷宫算法
回溯法是一种不断试探且及时纠正错误的搜索方法,下面的求解过程采用回溯法。从入口出发,按某一方向向前探索,若能走通(未走过的),即某处可以到达,则到达一个新点,否则试探下一个方向;若所有的方向均没有通路,则沿原路返回前一点,换下一个方向继续试探,直到所有可能的通路都搜索到,或找到一条通路,或无路可走又返回到入口点。这里可以用一个栈来实现,每走一步,将该位置压入栈中,若该点无路可走,则出栈返回上一位置转载 2016-08-04 14:24:08 · 1877 阅读 · 0 评论 -
P2P中四大算法之Chord算法原理
Chrod算法是P2P中的四大算法之一,是有MIT(麻省理工学院)于2001年提出,其他三大算法分别是:CANPastryTapestryChord的目的是提供一种能在P2P网络快速定位资源的的算法,Cord并不关心资源是如何存储的,只是从算法层面研究资源的取得,因此Chord的API就简单到只有一个set、get。1、Chord是什么?Chord是一个算法,也是一个协议。作为转载 2016-08-28 15:22:59 · 10673 阅读 · 0 评论 -
分布式系统中Viewstamps算法
1. 前言Viewstamps算法是Oki和Liskov于1988年发表的论文,Liskov是一位计算机世界中杰出的女性,08年图灵奖得主、著名面向对象五原则中“Liskov可替换原则”的提出者。我们已无精力考证Viewstamps是否是第一个多数派表决的算法,但知道其比Paxos(1998)整整早了10年,杯具的是,随着06年google chubby论文发表,Paxos迅速闻名于世,而Vi转载 2016-08-28 15:28:04 · 1201 阅读 · 0 评论 -
动态hash思想方法
文将介绍三种动态hash方法。散列是一个非常有用的、非常基础的数据结构,在数据的查找方面尤其重要,应用的非常广泛。然而,任何事物都有两面性,散列也存在缺点,即数据的局部集中性会使散列的性能急剧下降,且越集中,性能越低。数据集中,即搜索键在通过hash函数运算后,得到同一个结果,指向同一个桶,这时便产生了数据冲突。通常解决数据冲突的方法有:拉链法(open hashing)和开地址法(o原创 2016-08-08 22:47:10 · 534 阅读 · 0 评论 -
矩阵乘法的应用
昨天,帮同学做了一道算法题,要实现输出增量矩阵、转置矩阵以及矩阵相乘。做完后我一直在想,我们可以用矩阵做些什么东西呢?对于矩阵的操作,我们一般是算得多,用得少,后来查了一些资料,我就把它总结了一下。我们先来看看增量矩阵、转置矩阵以及矩阵相乘的概念。概念增量矩阵就是一个元素为初始值initialValue的递增值的矩阵。例如,如果初始值initialValue=1且维度为ro原创 2016-09-14 11:24:20 · 5327 阅读 · 0 评论 -
一致性 hash 算法( consistent hashing )
一致性Hash算法背景 一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得DHT可以在P2P环境中真正得到应用。 但现在一致性hash算法在分布式系统中也得到了广泛应用,研究过memcache转载 2016-09-14 15:13:35 · 1109 阅读 · 0 评论 -
按照概率生成随机数
提出问题现实中,人员学历一定不是均匀分布的,例如某高科技企业员工学历分布如下:大学本科:40%专科:24%中专:20%高中以下:10%硕士研究生:5%博士研究生:1%如何按照这样的比例设定随机学历的出现概率呢?——控制随机数出现几率。解决方案:设定一个范围为0-99的随机数生成器:生成0--39的概率是40%,与向量一中的0匹配,原创 2016-12-06 15:00:50 · 4248 阅读 · 0 评论 -
为什么Map桶中个数超过8才转为红黑树
被问及的一个问题,应该不少人看到这个问题都会一面懵逼。因为,大部分的文章都是分析链表是怎么转换成红黑树的,但是并没有说明为什么当链表长度为8的时候才做转换动作。笔者第一反应也是一样,只能初略的猜测是因为时间和空间的权衡。 要弄明白这个问题,我们首先要明白为什么要转换,这个问题比较简单,因为Map中桶的元素初始化是链表保存的,其查找性能是O(n),而树结构能将查找性能提升...原创 2019-07-24 11:38:45 · 475 阅读 · 0 评论 -
倒排索引篇
1、海量数据处理之倒排索引2、Lucene 4.X 倒排索引原理与实现: (1) 词典的设计3、倒排索引构建算法BSBI和SPIMI Java实现4、浅谈——倒排索引5、倒排索引原理和实现原创 2016-07-28 16:15:57 · 821 阅读 · 0 评论 -
红黑树
红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。它是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树(symmetric binary B-trees)。后来,在1978年被 Leo J. Guibas 和 Robert Sedgewick 修改为如今的“红黑树”。红黑树和AVL树类似原创 2016-06-18 22:25:04 · 274 阅读 · 0 评论 -
结构之法and算法之道(合集)
结构之法,算法之道,面试、算法、机器学习在线课程:julyedu.com博客地址:http://blog.youkuaiyun.com/v_JULY_v最好的学习和面试资料原创 2016-07-14 21:09:54 · 1019 阅读 · 0 评论 -
链表面试题Java实现【重要】
【正文】这份笔记整理了整整一个星期,每一行代码都是自己默写完成,并测试运行成功,同时也回顾了一下《剑指offer》这本书中和链表有关的讲解,希望对笔试和面试有所帮助。OMG! 本文包含链表的以下内容: 1、单链表的创建和遍历 2、求单链表中节点的个数 3、查找单链表中的倒数第k个结点(剑指offer,题15) 4、查找单链表中的中间结转载 2016-05-16 17:09:58 · 616 阅读 · 0 评论 -
面试大总结:Java搞定面试中的二叉树题目
转载自:http://blog.youkuaiyun.com/fightforyourdream/article/details/16843303这是本系列的第二篇,与前一篇 面试大总结之一:Java搞定面试中的链表题目 相比,二叉树的题目可以变化的就更多了。本文还是参考整合重写了《轻松搞定面试中的二叉树题目》和《算法大全(3) 二叉树》两篇大作。本文一个小亮点就是几乎每一道题都用了递归和迭代两种方法转载 2016-05-16 17:12:49 · 499 阅读 · 0 评论 -
LRU缓存算法实现
private void moveToFront(int index){ int nextIndex, prevIndex; if(head != index) { nextIndex = next[index]; prevIndex = prev[index]; // Only the head has a prev en转载 2016-04-24 10:31:20 · 1589 阅读 · 0 评论 -
常见算法:C语言求最小公倍数和最大公约数三种算法
最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,其中一个最小的公倍数是他们的最小公倍数,同样地,若干个整数公有的倍数中最小的正整数称为它们的最小公倍数,维基百科:定义点击打开链接求最小公倍数算法:最小公倍数=两整数的乘积÷最大公约数求最大公约数算法:(1)辗转相除法有两整数a和b:① a%b得余数c② 若c=0,则b即为两数的最大公约数③ 若c转载 2016-06-27 12:34:04 · 425 阅读 · 0 评论 -
牛顿迭代法
在MIT公开课《计算机科学与编程导论》的第五讲中,讲到编写求解平方根的函数sqrt时,提到了牛顿迭代法。今天仔细一查,发现这是一个用途很广、很牛的计算方法。首先,考虑如何编写一个开平方根的函数sqrt(float num, float e)。参数num是要求开平方根的实数,参数e是计算结果可以达到多大误差。这是一个无法得到精确解,只能求出近似解的问题。该如何编写呢?转载 2016-06-27 12:45:29 · 907 阅读 · 0 评论 -
查找两个字符串a,b中的最长公共子串
题目描述查找两个字符串a,b中的最长公共子串 输入描述:输入两个字符串输出描述:返回重复出现的字符输入例子:abcdefghijklmnopabcsafjklmnopqrstuvw输出例子:jklmnop解法一:import java.util.*;public class Main{ public stat原创 2016-06-27 17:46:39 · 4737 阅读 · 2 评论 -
数据结构中常见的树(BST二叉搜索树、AVL平衡二叉树、RBT红黑树、B-树、B+树、B*树)
BST树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如: BST树的搜索,从根结点开始,如果查询的关键字与结点的转载 2016-06-28 15:06:41 · 432 阅读 · 0 评论 -
大数据排序算法总结
1、(算法课大报告)大数据的查找与排序2、算法的力量:位运算在排序与搜索中的应用3、大数据分析中常用的7种排序算法的视觉图4、对大数据量进行排序--位图法5、大数据排序的实现代码, 理论上支持几百亿没问题吧6、大文件内数据排序问题:采用文件映射内存技术7、堆排序 海量数据求前N大的值8、大数据排序相关9、【参考】给大数据量的磁盘文件排序10、原创 2016-06-29 10:51:25 · 11135 阅读 · 0 评论 -
Strategy设计模式之Comparable&Comparator接口
前面我们说TreeMap和TreeSet都是有顺序的集合,而顺序的维持是要靠一个比较器Comparator或者map的key实现Comparable接口。 既然说到排序,首先我们不用去关心什么是Strategy设计模式,也不用关心它为了解决什么问题而存在,我们直接从排序开始看。 1.排序 假设我们有一个int数组需要排序,想一想应该怎么实现转载 2016-07-12 14:20:44 · 1185 阅读 · 0 评论 -
字符统计(经典的算法与思想)
题目描述如果统计的个数相同,则按照ASII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。实现以下接口: 输入一个字符串,对字符中的各个英文字符,数字,空格进行统计(可反复调用) 按照统计个数由多到少输出统计结果,如果统计的个数相同,则按照ASII码由小到大排序输出 清空目前的统计结果,重新统计调用者会保证:输入的字符串以‘原创 2016-07-13 17:29:48 · 1071 阅读 · 0 评论 -
二维码的生成细节和原理
二维码又称QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型:比如:字符,数字,日文,中文等等。这两天学习了一下二维码图片生成的相关细节,觉得这个玩意就 是一个密码算法,在此写一这篇文章 ,揭露一下。供好学的人一同学习之。关于QR Code Specification转载 2016-07-14 10:51:46 · 572 阅读 · 0 评论 -
二叉搜索树JAVA实现
引入:二叉搜索树是这样的一种二叉树:(1)每个元素都有一个关键值,并且没有任意两个元素有相同的关键值(2)根节点的左子树中任意元素的关键值小于根节点的关键值。(3)根节点的右子树中任意元素的关键值大于根节点的关键值。(4)根节点的左右子树也是二叉搜索树。我们这里就用程序来实现这样一颗二叉搜索树。分析:从定义看出,二叉搜索树原创 2016-07-14 14:03:40 · 1659 阅读 · 0 评论 -
五大常用算法:分治、动态规划、贪心、回溯和分支界定
分治算法一、基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)…… 任何一个可以用计算机求解的转载 2016-07-14 20:54:43 · 1294 阅读 · 1 评论 -
蚁群算法浅谈
本文参考:http://www.cnblogs.com/biaoyu/archive/2012/09/26/2704456.html http://blog.163.com/ykn_2010/blog/static/1420333362012111411258466/简介 蚁群算法(ant colony optimization, ACO),又称原创 2016-04-06 16:36:25 · 44085 阅读 · 4 评论