
算法
young-ming
路漫漫其修远兮 吾将上下而求索
个人QQ:284407890
个人github:https://github.com/xmingyang
展开
-
二叉树Z型遍历
给定一棵二叉树,从顶向下,进行Z字形分层遍历,即:如果本层是从左向右的,下层就是从右向左。public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; }}import java.util.Deque;import java.util.LinkedList;import java.util.List;pub.转载 2020-09-01 12:23:15 · 2544 阅读 · 0 评论 -
重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回思路:根据前序遍历找到根,根据中序遍历找到左右子树,依次递归。public static TreeNode Tree(List<int> preTree, List<int> midTree) { if转载 2020-08-28 10:29:59 · 298 阅读 · 0 评论 -
P2P 网络核心技术:Gossip 协议
背景Gossip protocol 也叫 Epidemic Protocol (流行病协议),实际上它还有很多别名,比如:“流言算法”、“疫情传播算法”等。这个协议的作用就像其名字表示的意思一样,非常容易理解,它的方式其实在我们日常生活中也很常见,比如电脑病毒的传播,森林大火,细胞扩散等等。Gossip protocol 最早是在 1987 年发表在 ACM 上的论文 《Epidemi...转载 2020-03-21 17:35:45 · 561 阅读 · 0 评论 -
分布式多副本一致性协议paxos
一、前言 分布式多副本一致性在现实应用中是非常重要的,它既可以保证数据节点无单点(HA)时还能保证数据节点的一致性。此类协议比较著名的有paxos、raft和zab(zookeeper实现)等。其中,paxos允许多点写,而raft则是会先选举出一个leader,所有的写都会通过leader完成。 本文会先介绍paxos思想,以后还会介绍raft。关于paxos的文章已经转载 2017-10-20 10:25:03 · 1147 阅读 · 0 评论 -
Paxos master选举--PaxosLease算法
众所周知,为了避免Paxos算法的活锁问题,必须选举唯一的proposor。偏偏在Paxos原论文中,作者L. Lamport不屑于讨论这个问题,因为选举过程中,即使出现多个master共存,也不影响Paxos算法正确性。另一方面,由著名的Fischer-Lynch-Paterson结论可知,不采取超时机制,任何算法都不能保证在有限时间内选举成功。不过这个结论在这里对我们影响不大,我们只要设计一个转载 2017-10-21 11:45:05 · 331 阅读 · 0 评论 -
一致性哈希算法
一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简 单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正得到应用。 一致性hash算法提出了在动态变化的Cache环境中,判定哈希算法好坏的四个定义:1转载 2017-11-11 22:04:11 · 214 阅读 · 0 评论 -
彻底搞懂CNN
之前通过各种博客视频学习CNN,总是对参数啊原理啊什么的懵懵懂懂。。这次上课终于弄明白了,O(∩_∩)O~上世纪科学家们发现了几个视觉神经特点,视神经具有局部感受野,一整张图的识别由多个局部识别点构成;不同神经元对不同形状有识别能力,且视神经具有叠加能力,高层复杂的图案可以由低层简单线条组成。之后人们发现经过conclusional的操作,可以很好反映视神经处理计算的过程,典型的是1998转载 2017-12-10 21:57:02 · 508 阅读 · 0 评论 -
用paxos实现多副本日志系统--basic paxos部分
为了理解paxos协议,开始时看了好些资料,但始终没有理解透,直到我看了这个视频:http://v.youku.com/v_show/id_XNjgyODc3ODU2.html。看懂之后,我就想按照自己的理解重新写一遍paxos的说明。结果写到一半,我发现越讲越不明白,反而不如之前我看到但没懂的资料了。这时我才意识到,或许这个斯坦福教授的讲解思路已经是最好的了,至少我跟着这个思路,把paxo...转载 2018-08-19 01:20:53 · 807 阅读 · 1 评论 -
用paxos实现多副本日志系统--multi paxos部分
接下来,我们来讲解multi-paxos。大家应该还记得我们开始时提到的multi-paxos的目标是实现多副本log系统。要实现多副本log系统的一种方法就是,使用一组彼此独立的basic paxos实例,每个独立的basic paxos实例用来决定一系列log当中的一条。为了做到这一点,我们需要给Prepare和Accept两个rpc增加一个参数,index,用来表示这个basic ...转载 2018-08-19 01:22:59 · 874 阅读 · 0 评论 -
大量数据去重:Bitmap和布隆过滤器(Bloom Filter)
5TB的硬盘上放满了数据,请写一个算法将这些数据进行排重。如果这些数据是一些32bit大小的数据该如何解决?如果是64bit的呢?在面试时遇到的问题,问题的解决方案十分典型,但对于海量数据处理接触少的同学可能一时也想不到什么好方案。介绍两个算法,对于空间的利用到达了一种极致,那就是Bitmap和布隆过滤器(Bloom Filter)。Bitmap算法在网上并没有找到Bitmap算法的中文...转载 2018-11-20 15:42:25 · 596 阅读 · 0 评论 -
SkipList跳表基本原理
为什么选择跳表目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树出来吗? 很难吧,这需要时间,要考虑很多细节,要参考一堆算法与数据结构之类的树,还要参考网上的代码,相当麻烦。用跳表吧,跳表是一种随机化的数据结构,目前开源软件 Redis 和 LevelDB...转载 2019-01-24 18:41:40 · 177 阅读 · 0 评论 -
探索HyperLogLog算法
引言HyperLogLog算法经常在数据库中被用来统计某一字段的Distinct Value(下文简称DV),比如Redis的HyperLogLog结构,出于好奇探索了一下这个算法的原理,无奈中文资料很少,只能直接去阅读论文以及一些英文资料,总结成此文。介绍HyperLogLog算法来源于论文《HyperLogLog the analysis of a near-optimal car...转载 2019-01-25 11:55:06 · 551 阅读 · 0 评论 -
判断两个二叉树是否完全相等
递归实现static public bool IsSameTree(TreeNode root1, TreeNode root2) { if (root1 == null && root2 == null) { return true; } if ((root1 == null && root2 != null) || (root1 != null ...转载 2019-04-17 10:51:17 · 4498 阅读 · 1 评论 -
链表常见算法
链表转置public Node reverseList(Node head){ //头节点的上一个节点为 null Node pre = null; Node next = null; while(head != null){ next = head.next; head.next = pre; pre = head...转载 2019-04-22 11:35:49 · 733 阅读 · 0 评论 -
php与java通用AES加密解密算法
AES指高级加密标准(Advanced Encryption Standard),是当前最流行的一种密码算法,在web应用开发,特别是对外提供接口时经常会用到,下面是我整理的一套php与java通用的AES加密解密算法。php版代码如下:class CryptAES{ protected $cipher = MCRYPT_RIJNDAEL_128; pr转载 2016-07-28 18:51:53 · 943 阅读 · 0 评论 -
一致性哈希算法
一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简 单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正得到应用。 一致性hash算法提出了在动态变化的Cache环境中,判定哈希算法好坏的四个定义:1、平衡性(B转载 2016-01-20 20:37:23 · 385 阅读 · 0 评论 -
字符串匹配的KMP算法
字符串匹配是计算机的基本任务之一。 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"? 许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Donald Knuth。 这种算法不太容转载 2015-08-11 09:07:39 · 486 阅读 · 0 评论 -
快速排序Java实现
快速排序主题思想:分区法+挖坑填数法。 1、先从数列中取出一个数作为枢纽关键字,一般用第一个元素 2、分区过程,将比这个枢纽关键字大的数全放在它的右边,把小于或者等于的数全放在它左边 3、再对左右分区进行第二步的操作,也就是递归。知道各个区间只有一个数为止时间复杂度:快速排序不断的进行递归,将比枢纽关键字小的放在左边,否则放在右边,平均情况下需要递归log2N次原创 2013-09-02 11:27:21 · 1148 阅读 · 0 评论 -
java实现栈(链表方式)
Node类 public class Node { T data; Node next=null; public Node(T data) { this.data=data; }}Stack类public class Stack { private Node top; private int size; public vo原创 2013-10-09 21:21:12 · 957 阅读 · 0 评论 -
java实现栈(数组方式)
StackArray类import java.util.Arrays;public class StackArray { T[] ars; private int default_capacity=10; //元素个数 private int size=0; private int top=-1; @SuppressWarnings("unchecked")原创 2013-10-09 21:22:26 · 1011 阅读 · 0 评论 -
java实现队列(数组方式)
QueueArray类import java.util.Arrays;public class QueueArray { T[] ars; private int default_capacity=10; //元素个数 private int size=0; //队头 private int font=-1; //队尾 private int rear=原创 2013-10-09 21:23:52 · 1422 阅读 · 0 评论 -
java实现队列(链表方式)
Node类public class Node { public T data; Node next; public Node (T d) { this.data=d; } }Queue类public class Queue { private Node font; private Node rear; private int s原创 2013-10-09 21:25:06 · 1036 阅读 · 0 评论 -
单链表操作java实现
目标:实现单链表的增删改查,克隆复制,容量计算,是否为空判断.public class Node { T data; Node next=null; public Node(T data) { this.data=data; } public Node() { }} public class LinkedList { No原创 2013-10-27 21:00:41 · 1506 阅读 · 0 评论 -
贪心算法java实现
实例:活动安排问题:问题表述:设有n个活动的集合E = {1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si < fi 。如果选择了活动i,则它在半开时间区间[si, fi)内占用资源。若区间[si, fi)与区间[sj, fj)不相交,则称活动i与活动j是相容的。也就是说,当si >= fj或sj >= fi时,活动i与活动j相容。解决方案:使用贪心算法,按结束时间排序原创 2013-10-27 21:37:03 · 3906 阅读 · 1 评论 -
折半查找
折半public class MidSearch { public static void main(String[] args) { int a[]={1,4,6,9,12}; int i=search(a,0,a.length-1,6); System.out.println(i); } public static int search(int a[],i...原创 2013-10-22 20:59:36 · 877 阅读 · 0 评论 -
简单选择排序
/* 简单选择排序 * 基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换;然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止 * */public class SelectSort { public SelectSort(){ int a[]={1,54,6,3,78,34,原创 2013-10-22 21:08:23 · 842 阅读 · 0 评论 -
二叉树java实现
目标 实现二叉树的增加、查找、删除、遍历 实现 结点类public class Node{int key;int data;Node lchild=null;Node rchild=null;public Node(int key,int data){ this.key=key; this.data=data; }} 二叉树类:...原创 2013-10-29 21:14:36 · 1117 阅读 · 0 评论 -
动态规划算法0-1背包问题和剪绳子
import java.util.ArrayList;import java.util.HashMap;/* * 实际就是一种分而治之的思想 每次加入新物品i的时候,将总的容量-物品i的容量即是前i-1种物品可以使用的,得出原创 2013-10-23 21:51:21 · 4765 阅读 · 0 评论 -
归并排序
public class MergeSort {public static void main(String[] args){int a[]={1,3,0,5,6};MergeSort ms=new MergeSort();ms.sort (a,0,4);for (int i=0;iSystem.out.println(a[i]);}public v原创 2014-03-13 14:41:31 · 727 阅读 · 0 评论 -
java实现堆排序
import java.util.Random; /** * 堆排序 * 堆排序定义:n个关键字序列Kl,K2,…,Kn称为堆,当且仅当该序列满足如下性质(简称为堆性质): (1) ki≤K2i且ki≤K2i+1 或(2)Ki≥K2i且ki≥K2i+1(1≤i≤ ) */ public class HeapSort { public static转载 2014-06-24 07:38:17 · 697 阅读 · 0 评论 -
归并排序Java实现
归并排序的主题思想:两组有序的数据列表,要合并成一组排好序的数据列表,方法是循环每次分别用两组数据最小的数据进行比较,取较小者,即为当前合并后最小的数据项,最后将其中一个数据列表剩余数据项直接copy到合并后的数据表表尾部。OK,现在有一组数据,使用归并排序的思想进行排序,对数据不断的进行折半拆分递归,最后拆成最原子粒度级别的数据列表只有一项数据,两个数据列表分别只有一项数据,进行合并排序原创 2013-09-02 10:52:15 · 1049 阅读 · 0 评论