算法基础
wanhf11
无。
展开
-
KNN Hadoop MapReduce
K Nearest Neighbor算法K Nearest Neighbor算法又叫KNN算法,这个算法是机器学习里面一个比较经典的算法, 总体来说KNN算法是相对比较容易理解的算法。其中的K表示最接近自己的K个数据样本。KNN算法和K-Means算法不同的是,K-Means算法用来聚类,用来判断哪些东西是一个比较相近的类型,而KNN算法是用来做归类的,也就是说,有一个样本空间里的样本分成很几个类型原创 2016-05-15 14:23:03 · 3934 阅读 · 3 评论 -
HMM 解码问题
问题定义所求的 Q 应当在某个准则下是 “ 最优 ” 的 , 因此也称 Q 为最优路径 , 解码问题即是确定 最优路径的问题。Viterbi算法HMM模型如下,试根据Viterbi算法计算产生观察符号序列O={ABAB}的最优状态序列Q 算法流程 概率流动图原创 2016-05-21 15:15:16 · 1831 阅读 · 0 评论 -
HMM 学习问题
EM(Expectation-Maximization)算法由于HMM中的状态序列是观察不到的(隐变量),以上的最大似然估计不可行。EM算法可用于含有隐变量的统计模型的最大似然估计。 EM算法是一个由交替进行的“期望(E过程)”和“极大似然估计(M过程)”两部分组成的迭代过程: 对于给定的不完全数据和当前的参数值,“E过程”从条件期望中相 应地构造完全数据的似然函原创 2016-05-21 16:56:06 · 1743 阅读 · 1 评论 -
HMM 模型
马尔可夫链一个系统有N个状态 S1,S2,···,Sn,随着时间推移,系统从某一状态转移到另一状态,设qt为时间t的状态,系统在时间t处于状态Sj 的概率取决于其在时间 1 ,2,···,t-1 的状态,该概率为: 如果系统在t时间的状态只与其在时间 t -1的状态相关,则该系统构成一个离散的一阶马尔可夫链(马尔可夫过程): 马尔可夫模型如果只考虑独立于时间t的随机过程: 其中状态转移原创 2016-05-21 09:39:12 · 1413 阅读 · 0 评论 -
决策树 算法
机器学习中,决策树是一个预测模型;他代表的是对象属性与对象值之间的一种映射关系。树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每个叶结点则对应从根节点到该叶节点所经历的路径所表示的对象的值。决策树仅有单一输出,若欲有复数输出,可以建立独立的决策树以处理不同输出。 从数据产生决策树的机器学习技术叫做决策树学习, 通俗点说就是决策树,说白了,这是一种依托于分类、训练上的预测树,根转载 2016-05-21 17:07:56 · 322 阅读 · 0 评论 -
推荐系统 分析
推荐系统的组成收集用户信息的行为记录模块分析用户喜好的模型分析模块推荐算法模块推荐系统分类推荐算法 1. 基于内容的推荐系统(Content-based recommendation) 2. 协同过滤推荐系统(Collaborative Filtering recommendation) 3. 混合推荐系统(Hybrid recommendation) 4. 基于网络结构的推原创 2016-05-29 17:11:36 · 774 阅读 · 0 评论 -
Rsync 算法
算法:分块Checksum算法传输算法checksum查找算法比对算法Adler-32 checksumThe function may be expressed asA = 1 + D1 + D2 + ... + Dn (mod 65521) B = (1 + D1) + (1 + D1 + D2) + ... + (1 + D1 + D2 + ... + Dn) (mod 6552转载 2016-05-29 16:31:22 · 302 阅读 · 0 评论 -
不重复ip问题
问题:有一个文本文件,1G大小,每一行是IP地址,有重复的IP,要求快速的删除重复IP,将不重复的IP写到一个新文件中。回答:读取文件: 1. 读入整个文件(Java 标准读入方式)【前提:内存足够大】 2. 分批次读入文件(mmap) File file = new File(PATH); RandomAccessFile randomAccessFi原创 2016-06-27 11:43:56 · 812 阅读 · 0 评论 -
网易秋招 第2题(90%)
求最长的出路import java.util.ArrayDeque;import java.util.Deque;import java.util.Scanner;/** * Created by wwhhff11 on 16-8-2. */public class Main { private static class Point { int x;原创 2016-08-03 19:52:59 · 376 阅读 · 0 评论 -
HMM 评估问题
前向算法HMM模型如下,试根据前向算法计算产生观察符号序列O={ABAB}的概率。 概率流向: /** * 前向算法内容 时间复杂度O(T*N^2) * * @param hmm * HMM模型 * @param o * 观察序列 * @return 观察序列概率原创 2016-05-21 15:08:27 · 1117 阅读 · 0 评论 -
PageRank 算法
PageRank基本模型: 如果当前在A网页,上网者将会各以1/3的概率跳转到B、C、D,这里的3表示A有3条出链,如果一个网页有k条出链,那么跳转任意一个出链上的概率是1/k,同理D到B、C的概率各为1/2,而B到C的概率为0。一般用转移矩阵表示上网者的跳转概率,如果用n表示网页的数目,则转移矩阵M是一个n*n的方阵;如果网页j有k个出链,那么对每一个出链指向的网页i,有M[i][j]=1/k,原创 2016-04-23 12:51:08 · 2642 阅读 · 0 评论 -
从n个数选出最大的m个的算法比较
n×m遍扫描 【算法基本描述】n×m遍扫描 【算法思想】每次都扫描一遍数组,取出最大元素,这样扫描m遍就能得到m个最大的数 【算法复杂度】O(nm)2.排序后取最大m个数 【算法基本描述】对n个数排序,对拍完序后的序列取m个最大的数 【算法复杂度】视排序的复杂度,一般为O(nlogn)或O(n^2)3.最小堆 【算法基本描述】一遍扫描+最小堆 【算法伪代码】00-建立一个最小堆(优先转载 2016-04-20 19:46:09 · 5351 阅读 · 0 评论 -
拿石头问题
桌上有 100 颗石头,你和一朋友轮流从桌上拿石头,一次可以拿 1-3 颗石头,最后没石头可取的人失败后手获胜:每轮和对手拿的石头的个数的和是4。 先手获胜:先取1个石头,然后和后手获胜的策略相同。原创 2016-04-21 08:56:07 · 1097 阅读 · 0 评论 -
字符串变形
对于一个给定的字符串,我们需要在线性(也就是O(n))的时间里对它做一些变形。首先这个字符串中包含着一些空格,就像”Hello World”一样,然后我们要做的是把着个字符串中由空格隔开的单词反序,同时反转每个字符的大小写。比如”Hello World”变形后就变成了”wORLD hELLO”。import java.util.ArrayList;import java.util.Arrays;原创 2016-04-21 10:19:26 · 804 阅读 · 0 评论 -
TF-IDF 商品推荐用户短期兴趣与长期爱好的识别
TF-IDF:term frequency–inverse document frequency 词频除以出现该词的文档数短期兴趣: 指的是收到外界因素的影响,例如出差需要定机票车票还有酒店。长期爱好: 指的是对于人自身长期养成的习惯和爱好,例如集邮。识别长期爱好和短期兴趣,有利于提高商品的推荐的准确度。在一定时间t内,用户1发生行为a的次数为num(a)user=1e=num(a)t,use原创 2016-05-11 11:33:43 · 2766 阅读 · 0 评论 -
文本求相似度
最长公共字符子序列package demo;public class LCS { private final static int maxn=50; public static double getSimilarity(String a,String b){ int m=a.length(),n=b.length(); int c[][]=new int[原创 2016-03-04 11:24:18 · 703 阅读 · 0 评论 -
地域划分
现在有一块长条形的土地,这个土地我们可以看成是由n块小方格连接而成的(这些小方格我们可以将之编号为1到n)。而我们需要将其划分成两个部分,分别种上不同的作物(即作物A和B),划分必须在某两个小方格之间进行,或者在土地的最左端或最右端,若划分在第i块到第i+1块间进行,则划分后,第1至第i块地种A,剩下的地种B。现在有一些专家对土地进行了检测,他们每个人评估了每块土地适合种的作物。请你找到一个合适的划原创 2016-04-21 14:53:28 · 340 阅读 · 0 评论 -
树上最长单色路径
对于一棵由黑白点组成的二叉树,我们需要找到其中最长的单色简单路径,其中简单路径的定义是从树上的某点开始沿树边走不重复的点到树上的另一点结束而形成的路径,而路径的长度就是经过的点的数量(包括起点和终点)。而这里我们所说的单色路径自然就是只经过一种颜色的点的路径。你需要找到这棵树上最长的单色路径。 给定一棵二叉树的根节点(树的点数小于等于300,请做到O(n)的复杂度),请返回最长单色路径的长度。这里原创 2016-04-22 08:52:26 · 542 阅读 · 0 评论 -
Jaccard相似系数和皮尔逊相关系数
Jaccard相似系数 主要用于计算符号度量或布尔值度量的个体间的相似度,因为个体的特征属性都是由符号度量或者布尔值标识,因此无法衡量差异具体值的大小,只能获得“是否相同”这个结果,所以Jaccard系数只关心个体间共同具有的特征是否一致这个问题。如果比较X与Y的Jaccard相似系数,只比较xn和yn中相同的个数,公式如下: 如集合A={1,2,3,4};B={3,4,5,6}; 那么他们的转载 2016-05-29 16:57:28 · 7272 阅读 · 0 评论 -
B树、B-树、B+树与红黑树
参考二叉查找树(BST):二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3)左、右子树也分别为二叉排序树;(4)没有键值相等的节点(因此,插入的时候一定是叶子节点)。插入有序节点,退化成单支树 1.查找效率最好O(logn),最坏O(n)原创 2016-03-21 11:04:23 · 24320 阅读 · 4 评论 -
SimHash算法
simhash算法的输入是一个向量,输出是一个f位的签名值。 为了陈述方便,假设输入的是一个文档的特征集合,每个特征有一定的权重。比如特征可以是文档中的词,其权重可以是这个词出现的次数。1. 将一个f维的向量V初始化为0;f位的二进制数S初始化为0;2. 对每一个特征:用传统的hash算法对该特征产生一个f位的签名b。对i=1到f:如果b的第i位为1,则V的第i个元素加上该特征的权重;否则,转载 2016-08-07 16:29:47 · 473 阅读 · 0 评论 -
规律矩阵找数
网易面试一道智力题:一个矩阵,横向和纵向均递增,如何才能最快找到其中一个数?原创 2016-09-02 12:09:11 · 357 阅读 · 0 评论 -
最小覆盖子串
参考import java.util.HashMap;import java.util.Map;public class Solution { public String minWindow(String s, String t) { HashMap<Character, Integer> tp = new HashMap<>(); HashMap<Chara原创 2016-09-26 10:57:05 · 540 阅读 · 0 评论 -
有序链表转BST(平衡查找二叉树)
private static class ListNode { public int value; public ListNode next = null; } private static class TreeNode { public int value; public TreeNode left = null;原创 2016-09-26 16:28:29 · 543 阅读 · 0 评论 -
二叉树非递归遍历
参考转载 2016-09-28 18:16:07 · 289 阅读 · 0 评论 -
生成树字符串
输入:5a v b d e输出: a(v,b(d),e)import java.util.ArrayList;import java.util.Scanner;public class Main { private static class Node { public String value; public int level; }原创 2016-09-29 07:34:01 · 408 阅读 · 0 评论 -
磁盘和内存选择B树和红黑树的原因
数据均在叶子节点,相邻的节点靠近,可减少殉职空间按块选址空间可浪费原创 2016-08-12 17:35:56 · 1436 阅读 · 0 评论 -
Paxos分布式一致性算法
Proposer生成提案proposer 选择一个新的填编号Mn,然后向某个Acceptor集合成员发送Perpare请求,acceptor应作出如下回应:1. 如果Acceptor未批准了提案,向Proposer承诺,保证不再批准任何编号小于Mn的提案2. 如果Acceptor已经批准了提案,反馈小于Mn并且最大的提案编号proposer收到来自半数的以上的Acceptor响应结果,可以在原创 2017-03-22 16:59:04 · 365 阅读 · 0 评论 -
统计二进制中1的个数
package test;public class Main { public static void main(String[] args) { int n=19; System.out.println(Integer.toBinaryString(n)); int cnt=0; while(n!=0){原创 2016-07-07 17:49:36 · 244 阅读 · 0 评论 -
最大堆和最小堆
最大堆和最小堆是二叉堆的两种形式。 最大堆:根结点的键值是所有堆结点键值中最大者,且每个结点的值都比其孩子的值大。 最小堆:根结点的键值是所有堆结点键值中最小者,且每个结点的值都比其孩子的值小。 最小堆和最大堆的增删改相似,其实就是把算法中的大于改为小于,把小于改为大于。 生成最大堆:最大堆通常都是一棵完全二叉树,因此我们使用数组的形式来存储最大堆的值,从1号单元开始存储,因此父结点跟子转载 2016-03-14 20:21:49 · 376 阅读 · 0 评论 -
一天24小时钟表中时针,分针和秒针重合了多少次
一天24小时钟表中时针,分针和秒针重合了多少次1:05之后有一次2:10之后有一次3:15之后有一次4:20之后有一次5:25之后有一次6:30之后有一次7:35之后有一次8:40之后有一次9:45之后有一次10:50之后有一次12:00整有一次11*2=22转载 2016-10-11 18:51:44 · 8682 阅读 · 2 评论 -
排序算法
稳定的排序算法冒泡排序、插入排序、归并排序和基数排序不稳定排序算法选择排序、快速排序、希尔排序、堆排序插入排序 O(n*n) private static void insertSort(int[] arr) { int len = arr.length; for (int i = 1; i < len; i++) { int key =原创 2016-03-09 10:28:05 · 2166 阅读 · 0 评论 -
和为指定数的组合个数
问题:输入两个整数 n 和 m,从数列1,2,3…….n 中 随意取几个数, 使其和等于 m ,要求将其中所有的可能组合列出来解答:排序 + 0-1背包: 若第i个数放入,剩下0~i-1个数取出sum-ai 否则0~i-1取出sum /** * 从i个数里取出和为sum的组合个数 * 不去重 * * @param i * @param sum原创 2016-09-03 11:45:20 · 624 阅读 · 0 评论 -
环的相关问题
判断单链表是否为环因为指针或者引用一旦进入环便再不会出来,所以在单链表起点设置一个fast的指针(每次走2步)和一个slow指针(每次走1步),必定会在环中变成追赶的关系,并且最终会在环的某个点(相交点)相遇。找出环的入口在这个问题,为了方便描述,拿了小C爱学习里的一幅图: 在这先说明几个变量的意义; head:单链表的起点,也就是“判断单链表是否为环”的那个两个指针出发的地点。 l1:单链表原创 2016-09-15 10:51:25 · 261 阅读 · 1 评论 -
腾讯面试智力题
现在有100瓶药,只有1瓶是有毒的,老鼠试完药后,需要3天才能才能知道药是否有毒,而现在需要3天知道100瓶中哪1瓶有毒,请问最少需要多少只老鼠。 因为2^7=128>=100,最少需要7只 将1~100转换为2进制数,一共7位。 假设对于某数的2进制为:C1 C2 C3 C4 C5 C6 C7 老鼠mi将ci为1的药都试了,若mi在3天后死了,说明毒药为2进制的第ci原创 2016-08-12 11:26:28 · 11740 阅读 · 6 评论 -
二叉树性质
参考转载 2016-09-04 11:09:04 · 269 阅读 · 0 评论 -
2进制、8进制、16进制相互转换
这里写链接内容原创 2016-09-04 16:22:04 · 289 阅读 · 0 评论 -
股票交易日
在股市的交易日中,假设最多可进行两次买卖(即买和卖的次数均小于等于2),规则是必须一笔成交后进行另一笔(即买-卖-买-卖的顺序进行)。给出一天中的股票变化序列,请写一个程序计算一天可以获得的最大收益。请采用实践复杂度低的方法实现。 给定价格序列prices及它的长度n,请返回最大收益。保证长度小于等于500。public class Stock { public int maxProfit原创 2016-09-17 22:33:25 · 468 阅读 · 0 评论 -
凑硬币
小Y有一朋友有很多硬币,由于实在太多,我们就假设有无限个。某天,他答应给小Y其中两种面值的硬币,数量不限, 现在小Y想知道这两种硬币能凑出哪些面值,不能凑出哪些面值,估计准备去逛商场了吧。 import java.util.Scanner;public class Main { private static long gcd(long a, long b) { if (a原创 2016-09-06 11:03:14 · 393 阅读 · 0 评论 -
简单跳跃表的实现
Java中的跳跃表Java API中提供了支持并发操作的跳跃表ConcurrentSkipListSet和ConcurrentSkipListMap。下面摘录”Java多线程(四)之ConcurrentSkipListMap深入分析“中的一些结论。 有序的情况下: 1. 在非多线程的情况下,应当尽量使用TreeMap(红黑树实现)。 2. 对于并发性相对较低的并行程序可以使用Collec原创 2017-05-10 18:29:52 · 584 阅读 · 0 评论