
基础算法
lime1991
这个作者很懒,什么都没留下…
展开
-
ID3算法思想解析
http://blog.sina.com.cn/s/blog_6e85bf420100ohma.html转载 2015-03-09 11:15:08 · 819 阅读 · 0 评论 -
防止过拟合的几个方法
讲得很好的防止过拟合的方法博客地址: http://blog.youkuaiyun.com/u012162613/article/details/44261657 几种方法归纳: - early stop,当模型训练到一定规模时提前停止。 - 正则化方法 修改代价函数 - 数据集扩增 可减少过拟合,训练更好的模型. - 各种剪枝方法 -悲观剪枝 不需额外数据集 -代价复杂度原创 2015-09-14 11:23:22 · 1888 阅读 · 0 评论 -
Random Forest及Bagging,boosting简介
http://blog.youkuaiyun.com/jlei_apple/article/details/8168856转载 2015-09-16 20:45:32 · 607 阅读 · 0 评论 -
背包问题
ProblemN件物品和一个容量为V的背包,第i个物品的价值为w[i]w[i],体积为c[i]c[i],求解哪些物品装入背包价值最大。 0-1背包:没见物品只有一个,要么装入要么不装入。Solutiondp问题,定义递归式opt[i][j]opt[i][j]为前i个物品在容量为j的情况下的最大装载价值。 对于第i个物品来说,它只有两种选择:装入或者不装入。定义递归式:opt[i][j]=max(原创 2015-08-31 20:53:04 · 758 阅读 · 0 评论 -
C++的几个知识点
union 联合体 union是平常编程中使用比较少的数据结构。不同于结构体struct中每个数据单独开辟相应大小的内存,union联合体中数据是相互覆盖,共享内存的。 用途:使几个不同类型的变量共占一段内存(相互覆盖)union demo{ int a; char c[2];}u;在联合体demo中,整型量a和字符c公用同一内存位置。当一个联合被说明时,编译程序自动地产原创 2015-10-24 19:17:48 · 525 阅读 · 0 评论 -
Random Forest
RF优点: 随机森林是一个最近比较火的算法,它有很多的优点:1.在数据集上表现良好 2.在当前的很多数据集上,相对其他算法有着很大的优势 3.它能够处理很高维度(feature很多)的数据,并且不用做特征选择 4. 在训练完后,它能够给出哪些feature比较重要 5.在创建随机森林的时候,对generlization error使用的是无偏估计 6.训练速度快 7.在训练原创 2015-09-17 22:38:33 · 539 阅读 · 0 评论 -
链表的第一个公共节点
//两个单链表有公共节点,那么公共节点一定出现在两个链表的尾部。//从两个链表的尾部向前比较,最后一个相同的节点就是我们要找的节点。//方法1:用“先进后出”的想法——栈来实现。把两个链表的节点放入两个栈中,依次弹出比较两个栈顶节点是否相同。//方法2:链表的长度不同时,从头开始遍历到尾节点的时间就会不同。//首先遍历两个链表的长度,得到长的链表比短的链表多n个节点。//然后第二次遍历时,在原创 2015-10-10 21:37:32 · 526 阅读 · 0 评论 -
反转单链表
//保存三个指针,pNode,pPre,PNext;//pNode表示当前要反转的节点//pPre表示当前节点在原链表中的前一节点//pNext表示当前节点在原链表中的后一节点#include<iostream>using namespace std;struct ListNode{ int value; ListNode* next;};ListNode* Rever原创 2015-10-10 23:24:56 · 401 阅读 · 0 评论 -
树的最近公共祖先
//如果是二叉搜索树的话,//若当前节点t大于节点u,v,说明u,v的LCA在t的左节点中,故从t的左节点中继续查找//若当前节点t小于节点u,v,说明u,v的LCA在t的右节点中,从t的右节点继续查找//当找到一个节点满足u<t<v时,该节点就是u,v的LCA//当t的一个节点的值等于u或v时,说明其中一个节点是另一个节点的父节点,返回t的父节点struct TreeNode{原创 2015-10-10 22:35:27 · 433 阅读 · 0 评论 -
合并有序链表
/从链表的头结点开始,若phead1>phead2,那么合并后链表的头结点是phead1.反之,则是phead2//剩余链表仍然有序,合并步骤同上一步一样,可采用递归的方法解决//边界条件 phead1为NULL,phead2为NULL#include<iostream>using namespace std;struct ListNode{ int value; ListN原创 2015-10-11 09:27:58 · 529 阅读 · 0 评论 -
海量数据处理问题
1.Bloom Filter 1. 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url? 解法一:哈希分治法 50G*64B=320G,内存放不下。 将其拆分成1000个文件hash(url)%1000,每个小文件比较。 解法二:Bloom Filter http://blog.youkuaiyun.com/hguisu/转载 2015-09-21 23:03:55 · 713 阅读 · 0 评论 -
LR VS D-Tree VS SVM
分享两篇LR,D-tree及SVM算法的对比文章,作者剖析了三种不同算法的切分超平面及优点缺点。 http://www.edvancer.in/logistic-regression-vs-decision-trees-vs-svm-part1/ http://www.edvancer.in/logistic-regression-vs-decision-trees-vs-svm-part2/原创 2015-11-23 21:14:17 · 712 阅读 · 0 评论 -
钢条切割-动态规划
Problem给定一段长度为n英寸的钢条和一个价格表pi(i=1,2....)p_i(i=1,2....),求钢条切割方案使销售收益rnr_n最大。注意:切割没有成本,若长度为nn英寸的钢条价格pnp_n足够大,最优价格可能完全不用切割。solution对于rn(n>=1)r_n(n>=1),总可以用更短的钢条的最优收益切割来描述它: rn=max(pn,r1+r(n−1),r2+r(n−2)..原创 2015-09-15 10:42:19 · 561 阅读 · 0 评论 -
求解1-10000区间内的素数
转载自:http://blog.youkuaiyun.com/lxmky/article/details/7913885 问题: 求出所有1-MAX之间的素数分析: 我们知道如何判断一个数是否为素数,判断number是否可以被1到sqrt(num)之间数整除,如果存在被整除的,不是素数,否则就是素数。但是,如果用这种方法来计算,时间复杂度会非常高,我们采用另一种更好的方法——筛选法。筛选法直观上比较好理解转载 2015-09-05 10:47:15 · 648 阅读 · 0 评论 -
Fibonacci数列与跳台阶问题
Problem一个台阶总共有n级,一次可以跳一格,也可以跳两格,问总共有多少种跳法。Solution以F(n)表示n级台阶的跳法总数。 n=1时,只有一种跳法,一次跳一格。 n=2时,有两种跳法。跳法1:跳两步每次一格;跳法2:跳一步两格。 当n较大时,从最后一步到达第n格只有两种方法。跳法1:最后一步跳一格,所以需要知道F(n-1).跳法2:最后一步跳二格,需要知道F(n-2)。因此问题退化原创 2015-09-03 22:09:41 · 417 阅读 · 0 评论 -
C4.5决策树算法
http://blog.sina.com.cn/s/blog_68ffc7a40100urn3.html转载 2015-04-13 10:25:51 · 610 阅读 · 0 评论 -
维特比算法C++实现
维特比算法C++实现概述维特比算法用来解决HMM的预测问题(解码decoding),即已知模型HMM和观测序列O=(O1,O2,...On)O=(O_1,O_2,...O_n),求对给定观测序列条件概率P(I/O)P(I/O)的最大状态序列I=(I1,I2,...In)I=(I_1,I_2,...I_n).维特比算法实际用动态规划的思想来求解HMM模型预测问题。由动态规划原理,最优路径具有这样特性:原创 2015-07-27 22:53:17 · 5399 阅读 · 3 评论 -
优化机器学习不平衡数据集的八大策略
什么是不平衡数据不平衡对于分类问题来说是指数据集中样本的类别不平均。比如, 对于一个样本总数为100的二分类问题来说,80个样本被标为类别1,剩下的20个样本被标为类别2.这是一个不平衡的数据集,因为类别1比类别2的样本总数为4:1.不仅仅是二分类问题有类别不平衡问题,多分类问题也存在类别不平衡的问题。不平衡问题很常见大部分的分类数据集中各类别的样本总数不会绝对一样,但是稍稍有一些差别无妨。比如,描翻译 2015-08-24 23:08:25 · 4547 阅读 · 0 评论 -
KNN算法理解
一、算法概述1、kNN算法又称为k近邻分类(k-nearest neighbor classification)算法。最简单平凡的分类器也许是那种死记硬背式的分类器,记住所有的训练数据,对于新的数据则直接和训练数据匹配,如果存在相同属性的训练数据,则直接用它的分类来作为新数据的分类。这种方式有一个明显的缺点,那就是很可能无法找到完全匹配的训练记录。kNN算法则是从训练集中找转载 2015-07-19 12:01:42 · 1202 阅读 · 0 评论 -
字符串全排列问题(递归回溯)
ProblemA:无重复字符输入一个字符串,打印出该字符串的所有排列,所有字符串不相同。SolutionA问题拆解,将求排列问题看成两步: step1:求所有可能出现在第一个位置的字符,即把第一个字符与后面的字符依次交换依次。 step2:固定第一个字符,求后面所有字符的排列。此时,仍将问题分解成两部分:后面的第一个字符,以及这个字符后的所有字符。然后将第一个字符依次与后面的所有字符交换。指导最原创 2015-08-25 22:16:59 · 816 阅读 · 0 评论 -
N皇后问题(回溯递归)
Problem八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。Solution八个皇后中任意两个不能处在同一行,所以每个皇后必须占据一行,及一列。我们采用回溯法的思想去解。首先摆放好第1行皇后的位置,然后在不冲突的情况下摆放第2行皇后的位置。到第i行时,如原创 2015-08-27 10:02:38 · 1881 阅读 · 0 评论 -
字符串组合问题(无重复)
Problem输入一个字符串,输出该字符串中字符的所有组合,任意两个字符不相同。举个例子,如果输入”abc”,它的组合有a、b、c、ab、ac、bc、abc。Solution输入n个字符,则这n个字符能分别构成程度为1~n的组合,因此需要一个循环来求不同长度的组合。 在求n个字符的长度为m的组合的时候,可以将n个字符分成两部分:第一个字符和其余所有字符。若第一个字符加入组合,则在剩下n-1个字符中原创 2015-08-27 11:45:55 · 1150 阅读 · 0 评论 -
C/C++内存分配的堆和栈
内存分配堆(heap):堆存储的内容一般由用户申请和释放,若用户没有释放一般在程序运行完成以后,由操作系统回收。一般由new,malloc申请的变量才存放在堆中。 栈(stack):栈由编译器(compiler)自动申请和释放,函数参数及调用地址,局部变量的值都存放在栈中。大小及存储结构方式堆:内存分配的堆不同于数据结构里的堆。内存分配的堆存放内容并不连续,而是类似于链表的分配方式。操作系统有一个原创 2015-08-03 21:57:05 · 643 阅读 · 0 评论 -
寻找最小k个数或者寻找第K大的数字
Problem输入n个整数,找出最小的前k个数字(或者第K大的数字),例如输入4,5,1,6,2,7,3,8这八个数,则输出最小4个数是1,2,3,4.Solution AO(n)解法,需要修改输入数组。 可以采用快速排序Partition函数来解决这个问题。快排的Partition函数所完成的功能是将小于pivot的数放在Partiton函数返回值的左边,大于pivot的数放在Partiton函原创 2015-08-31 23:01:57 · 737 阅读 · 0 评论 -
Bad horse(图的广度遍历解法)
ProblemAs the leader of the Evil League of Evil, Bad Horse has a lot of problems to deal with. Most recently, there have been far too many arguments and far too much backstabbing in the League, so much原创 2015-08-17 21:53:50 · 860 阅读 · 0 评论 -
KMP算法-字符串匹配
本博客内容参照http://blog.youkuaiyun.com/v_july_v/article/details/7041827Problem假设现在我们面临这样一个问题:有一个文本串S,和一个模式串P,现在要查找P在S中的位置,怎么查找呢?如果用暴力匹配的思路,并假设现在文本串S匹配到 i 位置,模式串P匹配到 j 位置,则有:如果当前字符匹配成功(即S[i] == P[j]),则i++,j++,继续匹配转载 2015-09-02 14:55:02 · 582 阅读 · 0 评论 -
二叉树中和为某一值的路径
//输入二叉树和一个整数,输出二叉树中节点值之和为输入整数的所有路径.路径的定义是从根节点到叶子节点。//路径总是先遍历根节点,所以采用先序遍历的方法//先序遍历某一节点时,将该节点加入路径中,累加是否得到该整数。如果是,输出改路径。//若该节点不是叶子节点,则继续访问他的叶子节点。//若该节点是叶子节点,判断后则需要回退到父节点中。递归函数可以自动实现这一功能,但是需要将路径中的当前节点删原创 2015-10-11 10:17:58 · 550 阅读 · 0 评论