算法
文章平均质量分 80
_宇宙浪子_
与其遥望远方,不如说走就走~
展开
-
Raft协议实战之Redis Sentinel的选举Leader源码解析
Raft协议是用来解决分布式系统一致性问题的协议,在很长一段时间,Paxos被认为是解决分布式系统一致性的代名词。但是Paxos难于理解,更难以实现,诸如Google大牛们开发的分布式锁系统Chubby都遭遇了很多坑。Raft协议设计的初衷就是容易实现,保证对于普遍的人群都可以十分舒适容易的去理解。另外,它必须能够让人形成直观的认识,这样系统的构建者才能够在现实中进行必然的扩展。本文从Redi...转载 2019-09-11 20:02:48 · 166 阅读 · 0 评论 -
STL系列之九 探索hash_set
Title: STL系列之九 探索hash_setAuthor: MoreWindowsBlog: http://blog.csdn.net/MoreWindowsE-mail: morewindows@126.comKeyWord: C++ STL set hash_set 哈希表 链地址法 本文将着重转载 2014-09-27 17:37:56 · 405 阅读 · 0 评论 -
最短路径-Dijkstra
path算法[cpp] view plaincopyvoid Dijkstra( MGraph G, int i, int path[], VRType dist[] ) { //用Dijkstra算法求有向网G从源点vi到其余顶点vj的最短路径path[j]及 //带权路径长度 dist[j]转载 2014-09-24 15:00:02 · 401 阅读 · 0 评论 -
动态规划
第 3 章 动态规划 动态规划是本书介绍的五种算法设计方法中难度最大的一种,它建立在最优原则的基础上。采用动态规划方法,可以优雅而高效地解决许多用贪婪算法或分而治之算法无法解决的问题。在介绍动态规划的原理之后,本章将分别考察动态规划方法在解决背包问题、图象压缩、矩阵乘法链、最短路径、无交叉子集和元件折叠等方面的应用。 3.1 算法思想 和贪婪算法一样转载 2014-09-26 15:55:36 · 1725 阅读 · 0 评论 -
动态规划:从新手到专家
前言我们遇到的问题中,有很大一部分可以用动态规划(简称DP)来解。 解决这类问题可以很大地提升你的能力与技巧,我会试着帮助你理解如何使用DP来解题。 这篇文章是基于实例展开来讲的,因为干巴巴的理论实在不好理解。注意:如果你对于其中某一节已经了解并且不想阅读它,没关系,直接跳过它即可。简介(入门)什么是动态规划,我们要如何描述它?动态规划算法通常基于一个递推公转载 2014-09-26 15:52:11 · 458 阅读 · 0 评论 -
程序员编程艺术第一~二十二章集锦与总结(教你如何编程)
程序员编程艺术第一~二十二章集锦与总结(教你如何编程) 作者:July、编程艺术室。出处:http://blog.csdn.net/v_JULY_v 。题记 好久没更新博客了,虽只有一个月,但对我来说,已是长久。最重要的是11月初来北京后,在这近一个月找工作的过程中,面试、拜访、购书、读书,亦许久没有敲代码了,手异常生疏,虽只有一个月,但对我转载 2014-09-26 14:23:05 · 653 阅读 · 0 评论 -
程序员编程艺术:第三章、寻找最小的k个数
程序员编程艺术:第三章、寻找最小的k个数作者:July。时间:二零一一年四月二十八日。致谢:litaoye, strugglever,yansha,luuillu,Sorehead,及狂想曲创作组。微博:http://weibo.com/julyweibo。出处:http://blog.csdn.net/v_JULY_v。--------------------------转载 2014-09-26 14:12:59 · 689 阅读 · 0 评论 -
程序员编程艺术:第二章、字符串是否包含问题
程序员编程艺术:第二章、字符串是否包含问题作者:July,yansha,caopengcs。时间:二零一一年四月二十三日。致谢:老梦,nossiac,Hession,Oliver,luuillu,啊菜,雨翔,及微软100题实现小组所有成员。题目描述:假设这有一个各种字母组成的字符串A,和另外一个字符串B,字符串里B的字母数相对少一些。什么方法能最快的查出转载 2014-09-26 14:11:15 · 649 阅读 · 0 评论 -
最近公共祖先LCA:Tarjan算法(介绍2)
对于有根树T的两个结点u、v,最近公共祖先LCA(T,u,v)表示一个结点x,满足x是u、v的祖先且x的深度尽可能大。目录1百科名片2简介3算法▪ 离线算法 Tarjan▪ 在线算法 倍增法4算法实例1百科名片编辑最近公共祖先(Least Common Ancesto转载 2014-09-24 14:51:29 · 610 阅读 · 0 评论 -
hash_map
本文转自说来惭愧,使用了很久Visual Stdio 2003了,只知道MFC升级到了7.0,ATL也升级到了7.0,对于这两个经典的类库做了一些研究,但一直没有注意C++标准库的变化。 今天尝试的使用了stdext::hash_map这个库,果然不错。下面写下一些心得。 hash_map类在头文件hash_map中,和所有其它的C++标准库一样,头文件转载 2014-09-27 17:34:57 · 423 阅读 · 0 评论 -
红黑树从头至尾插入和删除结点的全程演示图
红黑树插入和删除结点的全程演示作者:July、saturnman。时间:二零一一年三月二十八日。出处:http://blog.csdn.net/v_JULY_v。声明:版权所有,侵权必究。-----------------------------------引言: 目前国内图书市场上,抑或网上讲解红黑树的资料层次不齐,混乱不清,没有一个完整而统一的转载 2014-09-27 17:38:35 · 536 阅读 · 0 评论 -
教你透彻了解红黑树
教你透彻了解红黑树 作者:July、saturnman 2010年12月29日本文参考:Google、算法导论、STL源码剖析、计算机程序设计艺术。推荐阅读:Left-Leaning Red-Black Trees, Dagstuhl Workshop on Data Structures, Wadern, Germany, Fe转载 2014-09-27 17:43:36 · 387 阅读 · 0 评论 -
搜索引擎-倒排索引基础知识
搜索引擎的索引1.单词——文档矩阵 单词-文档矩阵是表达两者之间所具有的一种包含关系的概念模型,图3-1展示了其含义。图3-1的每列代表一个文档,每行代表一个单词,打对勾的位置代表包含关系。  ...转载 2019-08-26 17:03:19 · 156 阅读 · 0 评论 -
Lucene系列二:反向索引及索引原理
了解关系型数据库的童靴都了解它底层结构采用b+tree的实现,而Lucene则是基于反向索引实现,并将它发挥到了极致。如果不了解Lucene是什么,可以参阅《系列一之全文检索》目录1. 什么是反向索引2. 如何设计反向索引2.1 如何快速查询与苍老师有关的新闻?2.2 有标题列索引和内容列索引会有...转载 2019-08-26 16:41:43 · 1011 阅读 · 0 评论 -
三种常见的限流算法
在开发高并发系统时,有三把利器用来保护系统:缓存、降级和限流。那么何为限流呢?顾名思义,限流就是限制流量,就像你宽带包了1个G的流量,用完了就没了。通过限流,我们可以很好地控制系统的qps,从而达到保护系统的目的。本篇文章将会介绍一下常用的限流算法以及他们各自的特...转载 2019-05-30 16:03:07 · 982 阅读 · 0 评论 -
分布式数据库数据一致性原理说明与实现
转自:https://blog.csdn.net/SequoiaDB_Official/article/details/78252439?from=groupmessage&isappinstalled=0目录1.数据一致性1.1数据一致性是什么1.2关系型数据库如何保障数据一致性1.3分布式存储如何保障数据一致性2.Raft算法2.1Raft算法背景2.2...转载 2018-12-06 18:48:12 · 920 阅读 · 0 评论 -
海量用户积分排名算法探讨
转自:https://www.cnblogs.com/xiangshancuizhu/p/4394949.html这篇可参考http://www.cnblogs.com/weidagang2046/archive/2012/03/01/massive-user-ranking.html#!comments问题某海量用户网站,用户拥有积分,积分可能会在使用过程中随时更新。现在要为该网...转载 2018-12-05 17:01:17 · 431 阅读 · 0 评论 -
随机数产生转换-根据(1,5)随机数生成器,生成(1,7)之内的随机数
原文:http://www.cnblogs.com/pangxiaodong/archive/2011/10/21/2220582.html1. 题目 给定一个随机数生成器,这个生成器能均匀生成1到5(1,5)的随机数,如何使用这个生成器生成均匀分布的1到7(1,7)的数?2. 思路 方法一:生成两个(1,5)的随机数,这样一共是25种情况,注意这两个数是有顺序的,从转载 2016-03-31 11:44:52 · 731 阅读 · 0 评论 -
从头到尾彻底理解KMP(2014年8月22日版)
作者:July本文转自:http://blog.csdn.net/v_july_v/article/details/7041827时间:最初写于2011年12月,2014年7月21日晚10点 全部删除重写成此文,随后的半个多月不断反复改进。1. 引言 本KMP原文最初写于2年多前的2011年12月,因当时初次接触KMP,思路混乱导致写也写得混乱,如此,留言转载 2014-09-30 13:01:29 · 445 阅读 · 0 评论 -
程序员编程艺术:第二章、字符串是否包含问题
程序员编程艺术:第二章、字符串是否包含问题作者:July,yansha,caopengcs。时间:二零一一年四月二十三日。致谢:老梦,nossiac,Hession,Oliver,luuillu,啊菜,雨翔,及微软100题实现小组所有成员。题目描述:假设这有一个各种字母组成的字符串A,和另外一个字符串B,字符串里B的字母数相对少一些。什么方法能最快的查出转载 2014-10-07 11:02:58 · 597 阅读 · 0 评论 -
经典算法研究系列:五、红黑树算法的实现与剖析
红黑树算法的层层剖析与逐步实现 ----作者 July 二零一零年十二月三十一日本文主要参考:算法导论第二版本文主要代码:参考算法导论。本文图片来源:个人手工画成、算法导论原书。推荐阅读:Leo J. Guibas 和 Robert Sedgewick 于1978年写的关于红黑树的一篇论文。-------------------------------转载 2014-09-27 18:12:43 · 438 阅读 · 0 评论 -
一致性哈希算法(Consistent Hashing)
应用场景这里我先描述一个极其简单的业务场景:用4台Cache服务器缓存所有Object。那么我将如何把一个Object映射至对应的Cache服务器呢?最简单的方法设置缓存规则:object.hashCode() % 4。Cache 0:object.hashCode() % 4 == 0Cache 1:object.hashCode() % 4 ==转载 2014-09-26 17:16:18 · 467 阅读 · 0 评论 -
程序员编程艺术第三十九~四十章:最近公共祖先LCA、打印螺旋矩阵
前言 整个编程艺术系列写到了本第三十九和第四十章,系列越写到后,对题材的选取越严格,写作过程也更困难,毕竟不是任何一个编程问题都可以收录到本系列中。 再者,之前已写的38章尚存在诸多问题,为了和大家一起更好的改进整个系列,特把它同步到了github上,见:https://github.com/julycoding/The-Art-Of-Programming-by-Ju转载 2014-09-26 10:07:08 · 750 阅读 · 0 评论 -
一致性哈希算法及其在分布式系统中的应用
摘要本文将会从实际应用场景出发,介绍一致性哈希算法(Consistent Hashing)及其在分布式系统中的应用。首先本文会描述一个在日常开发中经常会遇到的问题场景,借此介绍一致性哈希算法以及这个算法如何解决此问题;接下来会对这个算法进行相对详细的描述,并讨论一些如虚拟节点等与此算法应用相关的话题。分布式缓存问题假设我们有一个网站,最近发现随着流量增加,服务器压力越来越大转载 2014-09-26 17:13:24 · 416 阅读 · 0 评论 -
海量数据处理之Bloom Filter详解
海量数据处理之Bloom Filter详解 前言 本博客内曾已经整理过十道海量数据处理面试题与十个方法大总结。接下来,本博客内会重点分析那些海量数据处理的方法,并重写十道海量数据处理的面试题。如果有任何问题,欢迎不吝指正。谢谢。一、什么是Bloom Filter Bloom Filter是一种空间效率很高的随机数据结构,它的原理是,当一个元素被加转载 2014-09-14 17:16:19 · 409 阅读 · 0 评论 -
Trie字典树算法
前一段时间写了个微型输入法,使用map进行查找,发现效率不高。正好最近也在针对一个查找功能做优化,针对我的应用场景使用了Trie字典树。特性Trie树属于树形结构,查询效率比红黑树和哈希表都要快。假设有这么一种应用场景:有若干个英文单词,需要快速查找某个单词是否存在于字典中。使用Trie时先从根节点开始查找,直至匹配到给出字符串的最后一个节点。在建立字典树结构时,预先把带有相同前缀的单词合转载 2014-09-23 22:35:37 · 576 阅读 · 0 评论 -
教你如何迅速秒杀掉:99%的海量数据处理面试题
本文转自:http://blog.csdn.net/v_JULY_v 教你如何迅速秒杀掉:99%的海量数据处理面试题作者:July出处:结构之法算法之道blog前言 一般而言,标题含有“秒杀”,“99%”,“史上最全/最强”等词汇的往往都脱不了哗众取宠之嫌,但进一步来讲,如果读者读罢此文,却无任何收获,那么,我也甘愿背转载 2014-09-23 17:51:18 · 374 阅读 · 0 评论 -
常见hash算法的原理
散列表,它是基于快速存取的角度设计的,也是一种典型的“空间换时间”的做法。顾名思义,该数据结构可以理解为一个线性表,但是其中的元素不是紧密排列的,而是可能存在空隙。散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。转载 2014-09-23 17:34:13 · 444 阅读 · 0 评论 -
Trie树:应用于统计和排序
1. 什么是trie树 1.Trie树 (特例结构树) Trie树,又称单词查找树、字典树,是一种树形结构,是一种哈希树的变种,是一种用于快速检索的多叉树结构。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。 Trie的核心思想是空间换时间。转载 2014-09-23 22:26:46 · 440 阅读 · 0 评论 -
程序员面试、算法研究、编程艺术、红黑树、数据挖掘5大系列集锦
程序员面试、算法研究、编程艺术、红黑树、数据挖掘5大经典原创系列集锦与总结(部分博文github优化版阅读地址:https://github.com/julycoding/The-Art-Of-Programming-By-July)作者:July--结构之法算法之道blog之博主。时间:2010年10月-2013年10月。出处:http://blog.cs转载 2014-09-23 17:47:14 · 602 阅读 · 0 评论 -
红黑树
1. 简介红黑树是一种自平衡二叉查找树。它的统计性能要好于平衡二叉树(AVL树),因此,红黑树在很多地方都有应用。在C++ STL中,很多部分(目前包括set, multiset, map, multimap)应用了红黑树的变体(SGI STL中的红黑树有一些变化,这些修改提供了更好的性能,以及对set操作的支持)。它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的:转载 2014-09-23 15:45:08 · 363 阅读 · 0 评论 -
算法研究--使用 红黑树 解决实际问题(理论与实践)
在查找中,虽然hash表查找非常迅速,但是随着数据的种类增多,hash表长会变得更长,且冲突也会越来越多,那么如何能实现无论在多大数据量的情况下,查找依然是高性能的呢? 在1978年,Leo J.Guibas 与 Robert Sedgewick写了一篇论文中谈到了一种较好的用于查找的数据结构----红黑树 一般来说,树是很好的一种数据结构,那用于插入,删除转载 2014-09-23 15:27:58 · 3173 阅读 · 0 评论 -
B-树和B+树的应用:数据搜索和数据库索引
B-树1 .B-树定义B-树是一种平衡的多路查找树,它在文件系统中很有用。定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树:⑴树中每个结点至多有m 棵子树;⑵若根结点不是叶子结点,则至少有两棵子树;⑶除根结点之外的所有非终端结点至少有[m/2] 棵子树;⑷所有的非终端结点中包含以下信息数据: (n,A0,K1,A转载 2014-09-22 14:07:23 · 477 阅读 · 0 评论 -
从头到尾彻底解析Hash 表算法
本文转自:http://blog.csdn.net/v_JULY_v/article/details/6256463从头到尾彻底解析Hash 表算法作者:July、wuliming、pkuoliver 出处:http://blog.csdn.net/v_JULY_v。 说明:本文分为三部分内容, 第一部分为一道百度面试题Top K算法的详解;第转载 2014-09-14 17:33:46 · 461 阅读 · 0 评论 -
最近公共祖先LCA:Tarjan算法(介绍1)
本文转自:转载 2014-09-24 14:44:50 · 668 阅读 · 0 评论 -
深度优先遍历
深度优先遍历(Depth-First Search)类似于对树的先序遍历 遍历规则:首先访问初始点vi ,并将其标记为已访问过,然后从vi 的任一未被访问过的邻接点(有向图的入边邻接点除外,下同)w出发进行深度优先遍历,当vi的所有邻接点均被访问过时,则回退到已被访问的顶点序列中最后一个拥有未被访问的邻接点的顶点vk,从vk的未被访问过的邻接点出发进行深度转载 2014-09-24 14:57:24 · 754 阅读 · 0 评论 -
动态规划及其应用
本文转自:1.动态规划概述1.1 什么是动态规划相信大家都遇到过这样一个问题:例题1 如图1,有一个有向图,图中有n层顶点,除了第n层以外,第i层与第i+1层之间有边。边上的数值代表两个顶点的距离。要求找一条从第1层到第n层的路径,使得走过的边的和最短。算法分析解决这个问题有3种思路。第1种:回溯算法。直接列举出从A到J的所有路径,并且求出所有路径当中走过距离最短的。转载 2014-09-26 16:07:15 · 807 阅读 · 0 评论 -
动态规划和贪心算法的区别
(转自)http://hi.baidu.com/35661327/blog/item/d5463e17f1e8d011972b439c.html 动态规划和贪心算法的区别2009-07-27 13:18动态规划和贪心算法的区别动态规划和贪心算法都是一种递推算法 均有局部最优解来推导全局最优解 不同点: 贪心算法: 1.贪心转载 2014-09-26 15:52:11 · 601 阅读 · 0 评论 -
编程艺术第十六~第二十章:全排列/跳台阶/奇偶调序,及一致性Hash算法
第十六~第二十章:全排列,跳台阶,奇偶排序,第一个只出现一次等问题作者:July、2011.10.16。出处:http://blog.csdn.net/v_JULY_v。引言 最近这几天闲职在家,一忙着投简历,二为准备面试而搜集整理各种面试题。故常常关注个人所建的Algorithms1-14群内朋友关于笔试,面试,宣讲会,offer转载 2014-09-26 09:45:17 · 620 阅读 · 0 评论 -
广度优先遍历
广度优先遍历(Breadth-First Search)类似于对树的层序遍历 遍历规则为:首先访问初始点vi,并将其标记为已访问过,接着访问vi的所有未被访问过的邻接点,其访问次序可以任意,假定依次为vi1,vi2,...,vit,并均标记为已访问过,然后在按照vi1,vi2,...,vit的次序,访问每一个顶点的所有未被访问过的邻接点(次序任意),并均转载 2014-09-24 14:58:46 · 1050 阅读 · 0 评论