算法
xiaomin_____
努力~~
展开
-
堆排序 Heap Sort
堆排序是一种选择排序,其时间复杂度为O(nlogn)。堆的定义 n个元素的序列{k1,k2,…,kn}当且仅当满足下列关系之一时,称之为堆。 情形1:ki <= k2i 且ki <= k2i+1 (最小化堆或小顶堆) 情形2:ki >= k2i 且ki >= k2i+1 (最大化堆或大顶堆) 其中i=1,2,…,n/2向下取整; ...原创 2016-04-06 10:58:25 · 71 阅读 · 0 评论 -
分布式一致性协议Raft原理与实例
分布式一致性协议Raft原理与实例1.Raft协议1.1 Raft简介Raft是由Stanford提出的一种更易理解的一致性算法,意在取代目前广为使用的Paxos算法。目前,在各种主流语言中都有了一些开源实现,比如本文中将使用的基于JGroups的Raft协议实现。关于Raft的原理,强烈推荐动画版Raft讲解。1.2 Raft原理在Raft中,每个结点会处于下面三...原创 2016-03-18 10:32:11 · 167 阅读 · 0 评论 -
Raft一致性算法
Why Not PaxosPaxos算法是莱斯利·兰伯特(LeslieLamport,就是 LaTeX 中的”La”,此人现在在微软研究院)于1990年提出 的一种基于消息传递的一致性算法。由于算法难以理解起初并没有引起人们的重视,使Lamport在八年后1998年重新发表到ACM Transactions on Computer Systems上(The Part-TimeParliam...原创 2016-03-18 10:30:43 · 87 阅读 · 0 评论 -
堆排序Heap sort
经典排序算法 - 堆排序Heap sort堆排序有点小复杂,分成三块第一块,什么是堆,什么是最大堆第二块,怎么将堆调整为最大堆,这部分是重点第三块,堆排序介绍 第一块,什么是堆,什么是最大堆什么是堆这里的堆(二叉堆),指得不是堆栈的那个堆,而是一种数据结构。堆可以视为一棵完全的二叉树,完全二叉树的一个“优秀”的性质是,除了最底层之外,每一层都是满的,这使得堆可...原创 2016-03-13 10:16:12 · 81 阅读 · 0 评论 -
堆排序原理及算法实现(最大堆)
堆排序 堆排序是利用堆的性质进行的一种选择排序。下面先讨论一下堆。1.堆 堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]<=key[2i+1]&&Key[i]<=key[2i+2]或者Key[i]>=Key[2i+1]&&key>=key[2i+2] 即任何一非叶节点的关键字不大于或...原创 2016-03-13 10:11:17 · 98 阅读 · 0 评论 -
速度之王 — LZ4压缩算法(一)
LZ4 (Extremely Fast Compression algorithm)项目:http://code.google.com/p/lz4/作者:Yann Collet本文作者:zhangskd @ csdn blog 简介 LZ4 is a very fast lossless compression algorithm, providing compre...原创 2016-11-03 21:28:02 · 601 阅读 · 0 评论 -
DAG图(有向无环图)
在图论中,如果一个有向图无法从任意顶点出发经过若干条边回到该点,则这个图是一个有向无环图(DAG图)。因为有向图中一个点经过两种路线到达另一个点未必形成环,因此有向无环图未必能转化成树,但任何有向树均为有向无环图。DAG可用于对数学和 计算机科学中得一些不同种类的结构进行建模。由于受制于某些任务必须比另一些任务较早执行的限制,必须排序为一个队 列的任务集合可以由一个DAG图来呈现,其中每个顶点...原创 2015-10-23 00:14:28 · 851 阅读 · 0 评论 -
一致性HASH算法的JAVA实现
一致性哈希算法是分布式系统中常用的算法。比如,一个分布式的存储系统,要将数据存储到具体的节点上,如果采用普通的hash方法,将数据映射到具体的节点上,如key%N,key是数据的key,N是机器节点数,如果有一个机器加入或退出这个集群,则所有的数据映射都无效了,如果是持久化存储则要做数据迁移,如果是分布式缓存,则其他缓存就失效了。 一致性Hash算法将 value 映射到...原创 2015-10-15 00:32:30 · 86 阅读 · 0 评论 -
Hash魔法:一致性 hash 算法
consistent hashing 一致性 hash 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出,目前在 cache 系统中应用越来越广泛。基本场景比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object 映射到 N 个 cache 上呢,你很可能会采用类似下面的通用方法计算...原创 2015-10-14 09:16:14 · 72 阅读 · 0 评论 -
一致性哈希算法(consistent hashing)
转载请说明出处:http://blog.csdn.net/cywosp/article/details/23397179 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简 单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正得...原创 2015-10-13 22:18:24 · 86 阅读 · 0 评论 -
排序——排序的基本概念
一、排序概念排序是将一组数据按递增或递减的顺序排列。排序是最一种最基础的、最常用的算法。二、排序的分类在计算机中,由于数据形式、数量和保存形式不同,对数据进行排序的方法也不同。按照排序过程中数据保存形式的不同,可以分外内部排序和外部排序1、内部排序整个排序过程不需要访问外存便能完成,则称为内部排序,内部排序的过程是一个逐步扩大记录的有序序长度的过程。2、外部排序...原创 2016-08-15 13:25:28 · 687 阅读 · 0 评论 -
递归和迭代的区别
递归的基本概念:程序调用自身的编程技巧称为递归,是函数自己调用自己. 一个函数在其定义中直接或间接调用自身的一种方法,它通常把一个大型的复杂的问题转化为一个与原问题相似的规模较小的问题来解决,可以极大的减少代码量.递归的能力在于用有限的语句来定义对象的无限集合. 使用递归要注意的有两点: 1)递归就是在过程或函数里面调用自身; 2)在使用递归时,必须有一个明确的递...原创 2015-10-05 17:15:22 · 123 阅读 · 0 评论 -
快速寻找满足条件的两个数
问题:快速找出一个数组中的两个数字,让这两个数字之和等于一个固定值,为了简化起见,我们假设这个数组中肯定存在至少一组符合要求的解。 解法1:直接枚举,计算两两数字之和,时间复杂度为O(N2)。 解法2:找sum-arr[i]是否存在。对于每个数字arr[i],查找应对的sum-arr[i]是否在数组中,那么关键就在于如何提高查找的效率。为了提高查找效率,我们可以将数组...原创 2015-09-23 00:10:29 · 170 阅读 · 0 评论 -
二分查找时间复杂度的计算
二分查找的基本思想是将n个元素分成大致相等的两部分,去a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果x<a[n/2],则只要在数组a的左半部分继续搜索x,如果x>a[n/2],则只要在数组a的右半部搜索x.时间复杂度无非就是while循环的次数!总共有n个元素,渐渐跟下去就是n,n/2,n/4,....n/2^k,其中k就是循环的次数由于你n...原创 2015-09-23 00:10:15 · 1321 阅读 · 0 评论 -
大O记法
C++的大O记法是算法的时间复杂度表达公式。简单的说大O记法可以告诉你一个算法耗费的时间长度同算法所处理的数据量大小的关系。大O记法只是一个概念性的或定性的记号,不能通过它来真正计算一个算法所耗费的精确时长。O(1) 算法只花费一个单位时间长度的时间。同所处理的数据量大小没有关系(常量时间)。 “一个单位时间长度”没有定义为1秒,1天,还是1微妙,完全随意指定。大...原创 2015-09-23 00:09:37 · 907 阅读 · 0 评论 -
raft算法与paxos算法相比有什么优势,使用场景有什么差异?
raft利用日志连续性对Paxos做了大量很好的简化,但是其中有一点有很强的误导性,就是新任leader对于旧日志的处理,他的原文描述是“Raft uses a simpler approach where it guarantees that all the committed entries from previous terms are present on each new l...原创 2016-03-22 11:14:20 · 226 阅读 · 0 评论 -
实时推荐系统的3种方式
推荐系统介绍自从1992年施乐的科学家为了解决信息负载的问题,第一次提出协同过滤算法,个性化推荐已 经经过了二十几年的发展。1998年,林登和他的同事申请了“item-to-item”协同过滤技术的专利,经过多年的实践,亚马逊宣称销售的推荐占比 可以占到整个销售GMV(Gross Merchandise Volume,即年度成交总额)的30%以上。随后Netflix举办的推荐算法优化竞赛,...原创 2016-03-24 10:18:03 · 247 阅读 · 0 评论 -
Oryx简介
Oryx 的前身叫 Myrrix,后来被 Cloudera 收购改了这个名字。值得一提的是 Oryx 的维护者就是 Mahout 的主要贡献者——Sean OwenOryx开源项目旨在提供实时的大规模机器学习/预测分析基 础框架目前它实现了一列工程应用常用到的机器学习算法:协同过滤,分类/回归以及聚类。Oryx 通过Apache hadoop来实现对大规模的数据流进行建模。同时可以通过实时的...原创 2016-04-05 10:24:36 · 1093 阅读 · 0 评论 -
oryx 推荐系统的使用
https://github.com/cloudera/oryx 在这里的readme.md文件中能看到有哪些jar包。 很惊讶的是这些jar包竟然不能在search.maven.org中找到。 于是决定到git里下载oryx源代码。 通过一下代码安装 其实安装oryx也要看相应的hadoop版本的,如果是hadoop2.3.0以前的版本的话,可以参照https:...原创 2016-04-04 13:36:03 · 314 阅读 · 0 评论 -
Java排序算法:归并排序
Java排序算法(九):归并排序归并排序(Merge)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。归 并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有...原创 2016-03-31 11:23:28 · 157 阅读 · 0 评论 -
推荐系统之协同过滤概述
协同过滤(Collaborative Filtering)是现今推荐系统中应用 最为成熟的一个推荐算法系类,它利用兴趣相投、拥有共同经验之群体的喜好来推荐使用者感兴趣的资讯,个人透过合作的机制给予资讯相当程度的回应(如评分) 并记录下来以达到过滤的目的进而帮助别人筛选资讯(参考wiki,文字有点生硬,不过却很好的描述了协同过滤的一个互动性:用户参与用户获益)。边整理边写了整整一天o(╯□╰...原创 2016-03-31 11:21:45 · 310 阅读 · 0 评论 -
SVD奇异值分解
SVD分解SVD分解是LSA的数学基础,本文是我的LSA学习笔记的一部分,之所以单独拿出来,是因为SVD可以说是LSA的基础,要理解LSA必须了解SVD,因此将LSA笔记的SVD一节单独作为一篇文章。本节讨论SVD分解相关数学问题,一个分为3个部分,第一部分讨论线性代数中的一些基础知识,第二部分讨论SVD矩阵分解,第三部分讨论低阶近似。本节讨论的矩阵都是实数矩阵。基础知识1. 矩阵...原创 2016-03-28 10:57:17 · 92 阅读 · 0 评论 -
潜在语义分析Latent semantic analysis note(LSA)原理及代码实现
文章参考:http://blog.sina.com.cn/s/blog_62a9902f0101cjl3.html Latent Semantic Analysis (LSA)也被叫做Latent Semantic Indexing(LSI),从字面上的意思理解就是通过分析文档去发现这些文档中潜在的意思和概念。假设每个词仅表示一个概念,并且每个概念仅仅被一个 词所描述,LSA将非常简单...原创 2016-03-28 10:56:26 · 401 阅读 · 1 评论 -
使用Java泛型实现快速排序(快排,Quicksort)算法
快排算法的特点实用性强。很多实际的项目中使用了快排算法。但通常对算法都进行了调整(tuning),比如Java.util.Arrays类中的sort函数就使用了快排算法,但使用了双参考值(Dual-Pivot Quicksort)等一些改进措施。由于快排算法为递归算法,可以用循环代替递归函数调用,改进性能。 不需要额外的空间。可以将数组中的数据直接交换位置实现排序,所以理...原创 2016-03-28 10:30:04 · 364 阅读 · 0 评论 -
计数排序、桶排序和基数排序
线性时间排序计数排序 计数排序的前提是确定输入范围大小为0~k。在这个前提下,我们可以使用计数的方法对数组进行排序,而不是使用比较。算法思想如下:因为输入数组a[]中的元素范围固定,因此可以使用一个大小为k的数组c对a中的元素进行映射。 1.如果输入a为i,则使得c[i]++,表示元素i输入的次数。对数组a遍历一次后,就会根据元素i的大小映射到...原创 2016-03-28 10:12:03 · 101 阅读 · 0 评论 -
Mahout学习资料整理
Mahout简介Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序Mahout相关资源Mahout主页:http://mahout.apache.org/Mahout 最新版本0.8下载: http://mirrors.hus...原创 2016-03-27 12:07:10 · 118 阅读 · 0 评论 -
分布式系统一致性问题和Raft一致性算法
阅读目录基本概念 RPC实现 Leader election Log replication Safety 原文 http://www.cnblogs.com/daizuozhuo/p/4638487.html 一致性问题一致性算法是用来解决一致性问题的,那么什么是一致性问题呢? 在分布式系统中,一致性问题(consensus pro...原创 2016-03-27 12:06:13 · 134 阅读 · 0 评论 -
Mahout的taste推荐系统里的几种Recommender分析
Taste简介Mahout 是apache下的一个java语言的开源大数据机器学习项目,与其他机器学习项目不同的是,它的算法多数是mapreduce方式写的,可以在hadoop上运行,并行化处理大规模数据。 协同过滤在mahout里是由一个叫taste的引擎提供的, 它提供两种模式,一种是以jar包形式嵌入到程序里在进程内运行,另外一种是MapReduce Job形式在hadoop...原创 2016-03-27 12:05:25 · 192 阅读 · 0 评论 -
分布式系统中, 怎么样生成全局唯一的 ID
一, 问题描述 在分布式系统存在多个 Shard 的场景中, 同时在各个 Shard 插入数据时, 怎么给这些数据生成全局的 unique ID? 在单机系统中 (例如一个 MySQL 实例), unique ID 的生成是非常简单的, 直接利用 MySQL 自带的自增 ID 功能就可以实现. 但在一个存在多个 Shards 的分布式系统 (例如多个 MySQL 实例组...原创 2016-03-26 08:39:39 · 103 阅读 · 0 评论 -
推荐系统中的常用算法
http://blog.jobbole.com/72373/在推荐系统简介中,我们给出了推荐系统的一般框架。很明显,推荐方法是整个推荐系统中最核心、最关键的部分,很大程度上决定了推荐系统性能的优劣。目前,主要的推荐方法包括:基于内容推荐、协同过滤推荐、基于关联规则推荐、基于效用推荐、基于知识推荐和组合推荐。一、基于内容推荐基 于内容的推荐(Content-based Recomme...原创 2016-03-26 08:37:56 · 100 阅读 · 0 评论 -
协同过滤推荐算法在MapReduce与Spark上实现对比
MapReduce为大数据挖掘提供了有力的支持,但是复杂的挖掘算法往往需要多个MapReduce作业才能完成,多个作业之间存在着冗余的磁盘 读写开销和多次资源申请过程,使得基于MapReduce的算法实现存在严重的性能问题。大处理处理后起之秀Spark得益于其在迭代计算和内存计算上的 优势,可以自动调度复杂的计算任务,避免中间结果的磁盘读写和资源申请过程,非常适合数据挖掘算法。腾讯TDW Sp...原创 2016-03-25 11:35:56 · 138 阅读 · 0 评论 -
十大数据分析站长是否作bi
作bi手段愈发多样化和智能化的今天,广告联盟如何应对于,怎么才能确保广告效果最大化是当务之急,不然广告效果得不到保证,广告商会急剧减少,甚至不乏影响联盟信誉以至联盟倒闭者。1、 IP防止作bi一般计费方法是依照24小时内独一IP,可以将每个IP记入数据库,当下一个访问IP与数据库已存在的IP相同时,则不计费。现在上网一般是动态IP,作bi者通过拨号器上下线来实现改变IP地址,你可以通过C段IP来...原创 2016-08-13 21:22:45 · 117 阅读 · 0 评论 -
文本特征抽取
一、课题背景概述 ?? ?? 文本挖掘是一门交叉性学科,涉及数据挖掘、机器学习、模式识别、人工智能、统计学、计算机语言学、计算机网络技术、信息学等多个领域。文本挖掘就是从大量 的文档中发现隐含知识和模式的一种方法和工具,它从数据挖掘发展而来,但与传统的数据挖掘又有许多不同。文本挖掘的对象是海量、异构、分布的文档 (web);文档内容是人类所使用的自然语言,缺乏计算机可理解的语义。传统数据挖掘...原创 2016-08-10 10:52:22 · 535 阅读 · 0 评论 -
数据挖掘-分词入门
谷 歌4亿英镑收购人工智能公司DeepMind,百度目前正推进“百度大脑”项目,腾讯、阿里等各大巨头布局深度学习。随着社会化数据大量产生,硬件速度上 升、成本降低,大数据技术的落地实现,让冷冰冰的数据具有智慧逐渐成为新的热点。要从数据中发现有用的信息就要用到数据挖掘技术,不过买来的数据挖掘书籍 一打开全是大量的数学公式,而课本知识早已还给老师了,难以下手、非常头大!我 们可以跳过数学公式,先...原创 2016-08-10 10:51:28 · 128 阅读 · 0 评论 -
数据结构与算法
数据结构是对在计算机内存中(有时在磁盘中)的数据的一种安排。数据结果包括数组、链表、栈、二叉树、哈希表等等。算法对这些结构中的数据进行各种处理,例如,查找一条特殊的数据项或对数据进行排序。可用于下面三类情况:现实数据存储程序员的工具建模数据结构的特性:数据结构优点缺点数组插入快,如果知道下标,可以非常快地存取查找...原创 2016-07-21 11:01:49 · 105 阅读 · 0 评论 -
树、森林和二叉树之间的转换
1、树转化为二叉树 2、森林转化为二叉树 3、二叉树转化为树4、二叉树转化为森林 http://my.oschina.net/u/2444659/blog/703386...原创 2016-07-01 09:55:21 · 151 阅读 · 0 评论 -
中文分词算法概述
一、中文分词技术综述1、全文检索技术所谓全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就 根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。在中文文档中根据是否采用分词技术,索引项可以是字、词或词组,由此可分为基于字的全 文索引和基于词的全文索引。基于字的全文索引是指对于文章中的每一个字...原创 2016-05-20 10:59:32 · 641 阅读 · 0 评论 -
使用虚拟节点改进的一致性哈希算法
分布式存储中的应用在分布式存储系统中,将数据分布至多个节点的方式之一是使用哈希算法。假设初始节点数为 N,则传统的对 N 取模的映射方式存在一个问题在于:当节点增删,即 N 值变化时,整个哈希表(Hash Table)需要重新映射,这便意味着大部分数据需要在节点之间移动。因此现在普遍使用的是被称为一致性哈希(Consistent Hashing)的一类算法。“一致性” 这个定语的意义...原创 2016-05-12 10:03:51 · 158 阅读 · 0 评论 -
Jedis之ShardedJedis虚拟节点一致性哈希分析
Jedis之ShardedJedis一致性哈希分析 ShardedJedis通过一致性哈希实现的的分布式缓存。主要思路:redis服务器节点划分:将每台服务器节点采用hash算法划分为160个虚拟节点(可以配置划分权重)将划分虚拟节点采用TreeMap存储对每个redis服务器的物理连接采用LinkedHashMap存储对Key or ...原创 2016-05-12 10:03:36 · 205 阅读 · 0 评论 -
一致性hash 虚拟桶
关于数据分片讨论最多的是一致性hash,然而它并不是分布式设计中的银弹百试百灵。 在数据稳定性要求比较高的场景下它的缺点是不能容忍的。比如在Redis分布式缓存设计中,使用一致性Hash进行key分片存储,通过虚拟节点最大化降低添加或删除节点带来的影响。这里强调降低二字,即是它还是有影响的,在一般情况下我们还可以接受。但是某些场景下要求动态扩容无影响就无法满足了。上次(探索c#之一致性Ha...原创 2016-05-12 10:02:20 · 257 阅读 · 0 评论