随笔分类 -  Algorithms

水塘抽样(Reservoir Sampling)问题
摘要:水塘抽样是一系列的随机算法,其目的在于从包含n个项目的集合S中选取k个样本,其中n为一很大或未知的数量,尤其适用于不能把所有n个项目都存放到主内存的情况。 在高德纳的计算机程序设计艺术中,有如下问题:可否在一未知大小的集合中,随机取出一元素?。或者是Google面试题: I have a linke 阅读全文

posted @ 2019-03-03 14:44 ym65536 阅读(201) 评论(0) 推荐(0)

Bloom filter(布隆过滤器)概念与原理
摘要:https://en.wikipedia.org/wiki/Bloom_filter https://en.wikipedia.org/wiki/Bloom_filter 写在前面 在大数据与云计算发展的时代,我们经常会碰到这样的问题。我们是否能高效的判断一个用户是否访问过某网站的主页(每天访问量上 阅读全文

posted @ 2018-04-29 19:31 ym65536 阅读(952) 评论(0) 推荐(0)

无锁编程
摘要:无锁编程,即不使用锁的情况下实现多线程之间的变量同步,也就是在没有线程被阻塞的情况下实现变量的同步,所以也叫非阻塞同步(Non-blocking Synchronization)。 实现非阻塞同步的方案称为“无锁编程算法”( Non-blocking algorithm)。 多线程编程条件下,多个线 阅读全文

posted @ 2017-02-19 22:57 ym65536 阅读(791) 评论(0) 推荐(0)

最长递增子序列
摘要:参考<Intruction to algorithm - a creative approach> 6.11 阅读全文

posted @ 2016-06-29 09:02 ym65536 阅读(198) 评论(0) 推荐(0)

令牌桶-流量控制
摘要:作为后台服务,通常有一个处理极限PPS(packets per second),如果请求超过了这个处理能力,可能会出现“雪崩效应”,因此后台服务需要有过载保护机制。 1、有个简单的算法可以实现流量控制功能:设置一个单位时间(如1s, 1min)内的最大访问量,并维护一个单位时间里的计数器。 当访问请 阅读全文

posted @ 2016-01-06 11:40 ym65536 阅读(4532) 评论(0) 推荐(1)

[zz]一致性哈希算法及其在分布式系统中的应用
摘要:原文链接:http://blog.codinglabs.org/articles/consistent-hashing.html摘要本文将会从实际应用场景出发,介绍一致性哈希算法(Consistent Hashing)及其在分布式系统中的应用。首先本文会描述一个在日常开发中经常会遇到的问题场景,借此... 阅读全文

posted @ 2015-08-28 08:10 ym65536 阅读(169) 评论(0) 推荐(0)

算法导论Part3: 二叉搜索树
摘要:1、概念二叉搜索树性质:设x是二叉搜索树的一个节点,那么:a) 对x左子树中任意节点y, y.key = x.key2、数据结构 1 struct TreeNode 2 { 3 TreeNode(int key): left(NULL), right(NULL), parent(NULL),... 阅读全文

posted @ 2015-05-31 11:44 ym65536 阅读(195) 评论(0) 推荐(0)

图算法(一)
摘要:图G=(V, E)是由若干给定的顶点V及连接两顶点的边E所构成的图形,图论起源于柯尼斯堡七桥问题。1、图的表示邻接矩阵:表示简单,但是对于稀疏矩阵,浪费空间严重。邻居表:相对于邻接矩阵,存储复制,稀疏矩阵情况下空间利用率高。以下用邻接表来存储图结构: 1 struct graph 2 { 3 ... 阅读全文

posted @ 2015-04-09 21:45 ym65536 阅读(165) 评论(0) 推荐(0)

跳跃表skiplist
摘要:1、简介跳跃列表(也称跳表)是一种随机化数据结构,基于并联的链表,其效率可比拟于二叉查找树(对于大多数操作需要O(log n)平均时间)。基本上,跳跃列表是对有序的链表增加上附加的前进链接,增加是以随机化的方式进行的,所以在列表中的查找可以快速的跳过部分列表,因此得名。所有操作都以对数随机化的时间进... 阅读全文

posted @ 2015-03-29 14:41 ym65536 阅读(331) 评论(0) 推荐(0)

线性排序算法
摘要:1. 计数排序已知输入数组input[0...n-1], 任意 x IN input[], 如果已知有C[x]个数 = 0; j--)16 { 17 output[C[key(input[j])] - 1] = input[j];18 C[key(inpu... 阅读全文

posted @ 2015-02-26 10:15 ym65536 阅读(206) 评论(0) 推荐(0)

选择中位数(第k大的数)
摘要:在查找中位数时,我们可以先排序,再找中间位置的数值即可,这样时间复杂度是O(nlbn). 参考快速排序的分割算法,我们可以得到O(n)复杂度的算法。 首先,把问题推广到查找第k小的数,每次分割之后,我们只需要在pivot的一侧查找即可。 时间复杂度: T(n) = T(n/2) / 2 + n == 阅读全文

posted @ 2015-02-01 15:47 ym65536 阅读(360) 评论(0) 推荐(0)

堆排序
摘要:堆是一种完全二叉树,因此可以用数组来表示。给定节点下标i,1 #define PARENT(i) ((i) >> 1)2 3 #define LEFT(i) ((i) = A[i]堆排序的原理为:1、首先构建一棵大顶堆2、交换根节点和堆的最后一个节点,堆大小减一3、重复2,直达堆大小为1voi... 阅读全文

posted @ 2015-01-08 22:41 ym65536 阅读(154) 评论(0) 推荐(0)

二分查找
摘要:二分查找算法,又称折半查找,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,1)如果中间元素正好是要查找的元素,则搜素过程结束;2)如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找;3)数组为空,退出代码如下: 1 int binary... 阅读全文

posted @ 2014-12-07 11:28 ym65536 阅读(196) 评论(0) 推荐(0)

散列表
摘要:散列表(Hash table,也叫哈希表),是根据关键字(Key value)而直接访问在内存存储位置的数据结构。也就是说,把键值通过一个函数的计算,映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做散列表。类似于数学中的映射关系。 现假设关键字的全域... 阅读全文

posted @ 2014-11-30 11:57 ym65536 阅读(170) 评论(0) 推荐(0)

二叉树
摘要:一、二叉树简介 二叉树节点定义为:1 struct TreeNode 2 {3 int val;4 TreeNode *left;5 TreeNode *right;6 TreeNode(int x) : val(x), left(NULL), right(NULL... 阅读全文

posted @ 2014-11-26 22:26 ym65536 阅读(230) 评论(0) 推荐(0)

异或运算
摘要:异或运算是位运算,不产生进位,也不会对其他bit产生影响。一般用XOR表示,在C语言中,异或用'^'表示。异或运算法则与无进位的二进制加法一致:0^0=0,1^0=1,0^1=1,1^1=0(同为0,异为1), 其逻辑表达式为A XOR B=A'B + AB'对任意元素a, 令其二进制位第k位为... 阅读全文

posted @ 2014-11-17 17:58 ym65536 阅读(863) 评论(0) 推荐(0)

归并排序
摘要:归并排序重点在治,即合并两个有序数组: 1 void merge(int A[], int p, int q, int r) 2 { 3 int i = 0, j = 0, k = p; 4 int m = q - p + 1; 5 int n = r - q; 6 ... 阅读全文

posted @ 2014-11-06 17:55 ym65536 阅读(159) 评论(0) 推荐(0)

快速排序
摘要:快速排序和归并排序都是分治法的典型应用,主要区别在于,快速排序重在分,而归并排序重在治。 快速排序基于以下假设:已知x,序列中一半的数据大于x,另一半小于等于x,且小于等于x的数据在数组前一半,大于x的在后一半。这种分割不需要额外的存储空间,对两侧数据分别递归进行,最终数组排序即可完成。 实... 阅读全文

posted @ 2014-11-06 10:43 ym65536 阅读(289) 评论(0) 推荐(0)

字符串匹配
摘要:字符串匹配是经常遇到的问题,比如信息检索、拼写检查,甚至是生物信息学中DNA相关的问题。1、比较简单的匹配算法是直接暴力匹配,算法原理:1)取指针i,j分别指向字符串S和目标串P,如果S[i] == P[j],i和j分别自增。2)如果不相等,i回溯到初始位置的下一个位置,即i = i - j + 1... 阅读全文

posted @ 2014-10-07 20:42 ym65536 阅读(240) 评论(0) 推荐(0)