
数据挖掘
文章平均质量分 81
夏末的初雪
知乎id: 迷路森林
展开
-
贪心算法举例分析
贪心算法和动态规划的不同之处在动态规划方法中每个步骤都要进行一次选择,但选择通常依赖于子问题的解。因此,我们通常以一种自底向上的方式求解动态规划问题,先求解较小的子问题,然后是较大的子问题。我们也可以自顶向下的求解,但需要备忘机制,当然,即使算法是自顶向下进行计算,我们仍然需要的先求解子问题在进行选择。在贪心算法中,我们总是做出当时看来最佳的选择然后求解生下的唯一的子问题。贪心算法进行选择原创 2016-10-30 16:08:56 · 1263 阅读 · 1 评论 -
GeoHash 经纬度坐标编码与解码算法
关于GeoHash的了解是我在做爬虫时发现一些网站比如美团、饿了么都会把一些地理位置进行编码,在检索时能够更快的进行地理空间上的检索,找到距离相近的位置。GeoHash 原理将二维的经纬度坐标点转换为一维的字符串,也就是编码,某一个字符串表示了某一个矩形区域,也就是说在这个矩形区域中的所有经纬度点都共享一套编码也就是字符串。 内部的实现采用的是GeoHash算法,其实质其实是二分法。 纬度范围在原创 2017-09-08 12:44:10 · 19028 阅读 · 7 评论 -
ID3、C4.5、CART三种决策树的区别
很早就想写写决策树,说起决策树做过数据挖掘的就不会感觉陌生,但是可能对ID3决策树算法、C4.5决策树算法以及CART决策树之间的区别不太了解,下面就这三个比较著名的决策树算法分别写写决策树是如何工作的一棵决策树包含一个根结点、若干个内部结点和若干个叶结点;叶结点对应于决策结果,其他每个结点则对应一个属性测试;每个结点包含的样本结合根据属性测试的结果被划分到子结点中;根结点包含样本全集,从根结点到每个叶结点的每个叶结点的路径对应一个判定测试序列。决策树学习的目的是为了产生一棵泛化能力强,也就是能够处原创 2017-07-09 21:01:40 · 32760 阅读 · 1 评论 -
从Beta分布、Dirchlet分布到LDA主题模型
数学真心不太好呢,但是自己挖的坑就算是哭着也要填完,就像是双11下的单,吃土也得付款。。打算从Beta分布开始讲起,大白话开始:我们反复抛一枚硬币,假设我们不知道出现正面的概率,出现正面的概率记为e,然后根据我们的估计的就能得到下一次为正面的概率,这里用到的是先验概率,可是当我们抛之后有了事实之后就有了后验概率,我们根据经验而来的参数去估计某一个事件发生的概率,然后在根据发生后的事实来修正原创 2016-11-22 21:04:20 · 1663 阅读 · 0 评论 -
DTW的java实现
在日常的生活中我们最经常使用的距离毫无疑问应该是欧式距离,但是对于一些特殊情况,欧氏距离存在着其很明显的缺陷,比如说时间序列,举个比较简单的例子,序列A:1,1,1,10,2,3,序列B:1,1,1,2,10,3,如果用欧氏距离,也就是distance[i][j]=(b[j]-a[i])*(b[j]-a[i])来计算的话,总的距离和应该是128,应该说这个距离是非常大的,而实际上这个序列的图像是十原创 2016-08-24 18:58:32 · 2500 阅读 · 0 评论 -
DP,Douglas-Peucker算法java实现
基本思路是:对每一条曲线的首末点虚连一条直线,求所有点与直线的距离,并找出最大距离值dmax,用dmax与限差D相比: 若dmax<D,这条曲线上的中间点全部舍去; 若dmax≥D,保留dmax对应的坐标点,并以该点为界,把曲线分为两部分,对这两部分重复使用该方法。定义曲线上的点:public class Point { private double x; pr原创 2016-08-25 17:45:17 · 2066 阅读 · 0 评论 -
KMP、BM、Sunday等字符串匹配算法及实现
发现字符串的匹配完全要考虑全面,如果考虑的情况不足够全面,就很可能出现这个例子可以运行,下一个例子的就行不通,毕竟匹配可能遇到各种各样的情况。本着可以实现效果就可以的原则,编的代码也实在是不优美,BM参考了别人的代码,因为写的精炼,按照自己的思路来写,然后发现有的可以运行,有的就达不到相应的效果。主要实现了暴力字符串匹配、KMP、BM、Sunday四种原创 2016-08-28 18:25:20 · 1013 阅读 · 0 评论 -
面试中常用到机试题
题目一:连续重复的字符串进行字符串的压缩操作如wwweerqqqq输出则为3w2e1r4qpublic class Text3 { private static String str; public static void readIn(){ Scanner in = new Scanner(System.in); str = in.next(); System.ou原创 2016-10-22 22:15:42 · 510 阅读 · 0 评论 -
未解决的编程题,我会一直想的,直到想到
题目一:输入为01的二进制序列,对二进制序列进行切割,使得切割后转为10进制的各段加和的最大值最小如101101111001其实我就是想知道不同切割方案后各段的和的分布情况究竟是什么样子的题目二:2的i次幂+3的j次幂+5的k次幂的最小top15题目三:求一集合{1,2,3,4}的所有子集划分情况,总共有15种,分别有单元素{{1,2,3,4}}、双元素{{1}{2,3原创 2016-10-24 15:41:50 · 423 阅读 · 0 评论 -
动态规划算法举例解析(最大收益和最小损失选择)
在说动态规划的例子之前,先说明一下动态规划和分治算法的区别虽然两者都是通过组合子问题的解来求解原问题但是分治方法将问题划分为互不相交的子问题,递归的求解子问题再将它们的解组合起来求出原问题的解。而动态规划算法应用于子问题重叠的情况,即不同的子问题具有公共的子子问题,在这种情况下,分治算法会做许多不必要的工作,它会重复的求解这些子问题,尽管这些子问题都曾经计算过。而动态规划算法就聪明了很多,原创 2016-10-28 21:14:49 · 6822 阅读 · 0 评论