算法
flash_gogogo
这个作者很懒,什么都没留下…
展开
-
递推求组合数
刷题的时候在leetcode上碰到了一个求组合数的问题,很蠢地去用阶层求分子分母然后做除法,结果跑了一大半的用例之后就溢出了,于是了解到了有组合数公式的递推方法,公式如下 题目如下: AC代码:class Solution {public: vector<int> getRow(int rowIndex) { vector<int> arr(rowIndex+1, 0)原创 2017-08-10 09:08:00 · 800 阅读 · 0 评论 -
伺服系统的摄像头标定(板球伺服控制系统)
在机器视觉控制系统中,摄像头的标定是很重要的,比如由于被控平面的空间运动造成视觉系统解算的数据存在误差,就需要标定这个出这个误差得到。这里的标定和标定摄像头的内外参数、畸变系数是不一样的意思(这个标定可以使用张正友标定法)。我们所需要的标定是需要得到摄像头所拍摄区域的待识别物体运动在世界坐标系下与图像坐标系下的映射关系,当摄像头移动后又要重新进行标定。 最有特点的就是板球控制系统,如图所示原创 2017-08-12 18:01:01 · 1934 阅读 · 0 评论 -
基于卡尔曼滤波算法融合图像速度数据和加速度计数据
最近在改进之前做的视觉定点算法,以前只有一个位置环,现在准备再串一级速度环,但是解算出无人机的平移速度还是颇为头疼的,网上的资料很少,需要我们自己动脑去解决这个问题。 首先要测水平速度,传统的方法是GPS,我所设计的无人机的应用场景中的GPS信号虽然有,但是并不那么稳定,其次GPS的精度也达不到我所需的视觉引导的要求,因为GPS的位置环并没有反馈出我需要的靶标物的位置。 其次如果单纯用加速度计进原创 2017-08-06 12:29:29 · 16128 阅读 · 3 评论 -
C++ STL priority_queue
priority_queue 对于基本类型的使用方法相对简单。他的模板声明带有三个参数,priority_queue#include <iostream> #include <queue> using namespace std; int main(){ priority_queue<int,vector<int>,less<int> >q;//使用priority_queu原创 2017-08-21 10:54:13 · 217 阅读 · 0 评论 -
(二叉树)求树的最小深度,平衡树的判定,判定树是否相同,判定对称树
本篇文章主要对树的常见的算法做一个总结,如果知道思路,写起来代码是非常简单的,不了解的话可能代码会又臭又长,标题中的4类问题在本文中均由DFS实现。1、求树的最小深度给出一道leetcode题目 111. Minimum Depth of Binary Tree Given a binary tree, find its minimum depth. The minimum depth is原创 2017-08-15 12:40:10 · 648 阅读 · 0 评论 -
[机器学习实验1]Linear Regression
线性回归分析,最简单的一个预测模型,也属于机器学习中的监督学习的范畴,这里主要对LINEAR REGRESSION I这部分的实验做个记录。 具体的理论要去看Andrew Ng大神的机器学习课程http://cs229.stanford.edu 问题如下: 对提供的数据进行线性回归并分析几个问题。题目链接http://openclassroom.stanford.edu/MainFolde原创 2017-08-28 22:21:40 · 1080 阅读 · 0 评论 -
[机器学习实验2]Multivariate Linear Regression
感觉第二个实验和第一个实验基本是一样的。。不晓得为什么课程对这个问题做了两个实验,可能要加深对线性回归的理解吧,这个实验的回归变量增加了一个,有两个影响因素。题目如下,是预测房价的 因为和上篇实验基本一样,这里就不贴公式了,直接给贴代码function MultivariateLinearRegression()x = load('ex3x.dat');% 住房面积和卧室数目y = l原创 2017-08-29 22:17:37 · 777 阅读 · 1 评论 -
矩阵旋转
首先是要写交换的函数,不需要中间变量的话可以用异或 原理如下:a = 9;b = 11;a=a^b; 1001^1011=0010b=b^a; 1011^0010=1001a=a^b; 0010^1001=1011a = 11;b = 9;然后就是旋转部分:这里记录下通用的顺时针和逆时针旋转矩阵的方法 顺时针旋转: first reverse up to down, then s原创 2017-09-01 11:30:18 · 341 阅读 · 0 评论 -
[OPENCV]使用Adaptive Boosting进行分类
最近学习了AdaBoosting算法,这个算法是上个世纪90年代末提出的,但是在深度学习出来之前,这个算法统治了人脸检测领域,大概的原理这里给出来,具体公式和原理实现请看机器学习的相关课程。常用的分类方法有决策树分类、贝叶斯分类等。然而这些方法存在的问题是当数据量巨大时,分类的准确率不高。对于这样的困难问题,Boosting及其衍生算法提供了一个理想的解决途径。Boosting算法是一种把若干个分类原创 2017-09-17 20:30:59 · 481 阅读 · 0 评论 -
动态规划的定义和举例理解
动态规划的本质不在于是递推或是递归,也不需要纠结是不是内存换时间。 理解动态规划并不需要数学公式介入,只是完全解释清楚需要点篇幅…首先需要明白哪些问题不是动态规划可以解决的,才能明白为神马需要动态规划。不过好处时顺便也就搞明白了递推贪心搜索和动规之间有什么关系,以及帮助那些总是把动规当成搜索解的同学建立动规的思路。当然熟悉了之后可以直接根据问题的描述得到思路,如果有需要的话再补充吧。 动态规划是原创 2017-09-30 23:41:35 · 552 阅读 · 0 评论 -
Hessian矩阵在求极小值的应用
最近一段时间算是狠狠地了补了很多数学知识,也发现了数学作为工程中的强大工具能力,无论是在机器学习中推导cost funcktion还是在求解优化问题时,都会用到Hessian矩阵。 我们需要知道一个重要的结论:Hessian矩阵是半正定的,具体的推导不讲,这里主要讲讲怎么理解这个半正定性。 对一元函数f(x)来说,就极值而言,一阶导为0是极值点的必要但不充分条件,一阶导为0且二阶原创 2017-11-05 20:12:28 · 9427 阅读 · 4 评论 -
最小费用最大流问题
基于网络最大流问题,进一步提出的最小费用问题,费用权值和最大流问题的容量限制是两个概念,实质上这个问题就是求图的加权最短路,只是要在最大流的前提下实现。所以要用Bellman-Ford算法找增广路的同时计算最小费。 下面是紫书中求最小费最大流的模板`const int maxn = 2000 + 10;const int INF = 1000000000;struct Edge { int原创 2017-08-03 17:26:32 · 3015 阅读 · 0 评论 -
直线上的点(扩展欧几里得算法)
描述下问题:求直线ax+bx+c=0上有多少个整点(x,y)满足x-[x1,x2],y-[y1,y2]。 根据数论的理论,要求ax+bx=-c的一个解(x0,y0),先要求出ax+bx=gcd(a,b)的一个解(x1,y1),然后根据gcd(a,b),记作g,判断它与c的倍数,由(x1,y1)来得到解(x0,y0),扩展欧几里得算法就是求ax+bx=gcd(a,b)的一个解的。 边界条件和欧几里原创 2017-07-25 12:49:13 · 702 阅读 · 0 评论 -
Eratosthenes筛法(素数筛法)
对于数论的一些题目,常常要打素数表。 素数筛法的思想:对于不超过n的每个非负整数p,删除2p,3p,4p,…,当处理完所有数之后,还没有被删除的就是素数。 算法复杂度O(n)=nlognvoid sushu_1(int n){ memset(vis, 0, sizeof(vis)); for (int i = 2; i <= n;i++) for (int j = 2原创 2017-07-24 15:25:00 · 1312 阅读 · 0 评论 -
牛顿迭代法的公式推导
牛顿迭代法求平方根 求n的平方根,先假设一猜测值X0 = 1,然后根据以下公式求出X1,再将X1代入公式右边,继续求出X2…通过有效次迭代后即可求出n的平方根,Xk+1先让我们来验证下这个巧妙的方法准确性,来算下2的平方根 (Computed by Mathomatic)1-> x_new = ( x_old + y/x_old )/2 y转载 2016-08-07 23:07:01 · 10773 阅读 · 6 评论 -
如何交换两个数的值?中间变量法,加减运算法,位运算法
交换两个数的值前言:以前很习惯性的就利用第三方(即一个中间变量)来交换两个数的值,后来在一次面试中,那个经理问我怎么交换两个变量的值,我就很熟悉的说用一个中间变量。后来经理说不借助中间变量应该怎么交换,当时我没想出来,现在把交换两个变量的值总结了一下,既有自己的理解也有百度上的东西。(1)先说一下我们经常用的那个方法,即借助一个中间变量。代码如下:1 i转载 2016-03-26 23:54:17 · 1061 阅读 · 0 评论 -
最小二乘法多项式曲线拟合
概念最小二乘法多项式曲线拟合,根据给定的m个点,并不要求这条曲线精确地经过这些点,而是曲线y=f(x)的近似曲线y= φ(x)。原理[原理部分由个人根据互联网上的资料进行总结,希望对大家能有用] 给定数据点pi(xi,yi),其中i=1,2,…,m。求近似曲线y= φ(x)。并且使得近似曲线与y=f(x)的偏差最小。近似曲线在点pi处的偏转载 2016-04-06 00:06:33 · 953 阅读 · 0 评论 -
UVa 548 Tree(DFS) 根据中序和后序重建二叉树,数组实现和指针实现
题目如下: 给一棵点带权(权值各不相同,都是小于10000的正整数)的二叉树的中序和后序遍 历,找一个叶子使得它到根的路径上的权和最小。如果有多解,该叶子本身的权应尽量小。 输入中每两行表示一棵树,其中第一行为中序遍历,第二行为后序遍历。 样例输入: 3 2 1 4 5 7 6 3 1 2 5 6 7 4 7 8 11 3 5 16 12 18 8 3 11 7 16 18 12 5原创 2017-04-26 22:28:06 · 424 阅读 · 0 评论 -
快速排序及其优化
快速排序的实现方式很多,看了一篇博客之后觉得他的实现方式最简洁。算法思路主要为: 1、先重排,选取一个基准值(可以每次选左边的,也可以随机选一个),使左边的元素都小于这个基准值,右边的元素都大于这个基准值。 2、递归求解。 详细一点的说来第一步的方法就是: 以6,10,22,15,3,4,8,12这一组数A为例。 第一步:选取最左端的6作为基准值comp=6,m=0,然后依次与A[1],A原创 2017-07-03 16:43:48 · 338 阅读 · 0 评论 -
八皇后问题
在回溯法的运用中的经典案例,问题如下: 在棋盘上放置8个皇后,使得他们互相不能攻击到,此时每个皇后的攻击范围为同行同列和同对角线(主副对角线),要求找出所有解。 这是问题的一个解 我们使用递归枚举(也就是回溯法)来求解这个问题。 先分析下问题的规模:从0行开始到第7行每行都必须有一个皇后,所以固定了行之后,按列来算就是全排列问题,排列数是8!=40320个,枚举数是不会超过它的,所以问题原创 2017-07-15 21:55:43 · 363 阅读 · 0 评论 -
归并排序
&emsp&emsp归并排序的思想是分治法。先进行划分,然后对划分得到的部分分别排序进行递归继续划分,最后达到条件后退出递归,逐层合并。 &emsp&emsp一方面在进行划分时,划分的重点的计算为了防止数据的溢出,不要采用m=(x+y)/2而应当采用m=x+(y-x)/2的方式。 &emsp&emsp主要需要注意的地方在于合并时的条件,在进行合并时,只要两个部分中有一个部分为空即可进行复制到暂存原创 2017-07-03 11:09:13 · 200 阅读 · 0 评论 -
LIS最长上升子序列(打印路径)
问题描述:给定n个整数A1,A2,…An,按从左到右的顺序选出尽量多的整数,组成一个上升子序列。例如序列162375,可以选出1235也可以选出167,但是前者更长,且要求选出的上升子序列中相邻元素不相等。 下面是时间复杂度O(n2)的代码// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。//#include <string.h>#include <iost原创 2017-07-22 13:39:50 · 1461 阅读 · 0 评论 -
LCS求最长公共子串
问题描述:给两个子序列A和B,求长度最长的公共子序列,如1,5,2,6,8,7和2,3,5,6,9,8,4的最长公共子序列为5,6,8另一个解为2,6,8求出这样的子序列最长是多少? 状态转移方程:对A1,A2…Ai和B1,B2,…Bj 当A[i]==B[j]时,d(i,j)=d(i-1,j-1)+1 否则d(i,j) = max{d(i-1,j),d(i,j-1)} 具体实现的时候要注意i原创 2017-07-22 13:51:50 · 267 阅读 · 0 评论 -
0-1背包问题常见问题的总结
动态规划问题与实际问题联系紧密,所以动态规划算法有着很广泛的应用,各类比赛题中也必不可少。最近花了不少功夫弄明白了经典的0-1背包问题,做个总结。0-1背包问题:有n种物品,每种只有一个。第i种物品的体积为Vi,重量为Wi。选一些物品到一个容量为C的背包中,使得背包内物品在总体积不超过C的前提下重量尽量大。1<=n<=100,1<=Vi<=C<=10000,1<=Wi<=10^6。在刘汝佳的紫书中使原创 2017-07-19 09:53:45 · 2844 阅读 · 1 评论 -
树的重心(树形DP)
树的质心的定义:以这个点为根,那么所有的子树的大小(不包括整个树)不会超过整体大小的一半。只需要每次比较max{d[son]},和N-d[node],每次保存最大的值,再从最大的值里面保存最小的值,这样的话从上往下搜的时候就会有一个上下子树的大小关系变化的那个结点,即为重心。 代码:#include <cstdio>#include <cstdlib>#include <cstring>#i原创 2017-08-08 11:14:04 · 1219 阅读 · 0 评论 -
对于基于概率模型的学习方法中调参的理解
一些总结性的原则来自知乎,我觉得写的还不错,链接:https://www.zhihu.com/question/25097993/answer/127472322。我最后也会附上。最近结束了在TX做游戏AI的实习,对目前的监督学习的方法有了进一步的理解,其实涉及到的调参主要有两个方面吧,一类参数是和数据本身相关的参数,比如数据各类型的比例,提取出来的特征,数据异常值的过滤之类的。另一类就是模型参数...原创 2018-07-14 15:20:24 · 482 阅读 · 0 评论