自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

原创 二维DP的最优子结构问题

在碰到二维数组的优化问题时,我们先看看该问题是否有最优子结构。二维数组相比起一维数组,最优子结构的查找困难在于方向的控制。最常见的是从“左上”到“右下”,但是结合实际情况时,我们也会碰到“右下”到“左上”的题目,或者条件不同时方向不同,方向的数量也可能不同。

2015-07-26 23:08:18 553

原创 滑动窗口1:最大窗口子串

最大窗口子串线段覆盖的最多点数

2015-07-26 22:52:50 577

原创 找短板2:

有一类问题,输入往往是一维数组,求解最值。表面看是一个普通的优化问题,直接想到用动态规划求解。但是在寻找最优子结构的时候,我们发现这个优化问题的最优子结构并不是那么清晰。这个时候我们可以看看这个问题可否转化为计算每个位置的短板。短板的唯一性决定了短板与位置一一对应。一旦能转化为短板问题,问题往往就能在o(n)时间解决。容器最大容量题目输入一维数组,数组中每个值相当于隔板的高度,求数组中任意两隔板间盛

2015-07-26 22:31:17 551

原创 多退少补1:分配最少糖果数

分配最少糖果数

2015-07-26 20:21:48 495

原创 找短板1:柱状图中的最大矩阵面积

柱状图中的最大矩阵面积二值矩阵中找元素全为1的面积最大矩阵

2015-07-26 20:18:31 1353

原创 双重DP实例2:K次购买股票的最大收益

K次购买股票的最大收益题目给定一系列的股票价格prices和最大购买次数k,求最大收益。两笔交易不能交叉。问题解析代码时间复杂度分析

2015-07-26 19:06:43 832

原创 双重DP实例1:回文分割

回文分割双重DP的定义:有的问题具有最优子结构,可以使用动态规划求解。但是在求解该最优子结构时,需要使用另外一个问题的最优子结构。这个时候我们就必须使用双重动态规划进行求解题目:将一个字符串分割成若干个回文子串,求最少的切割次数。问题分析我们使用一维表dp记录从i开始到末尾(第len个位置)回文子串的最小个数(i从0开始)。则状态方程: dp[i]=maxj(1+dp[j+1])dp[i] = m

2015-07-26 18:59:38 614

原创 查找数组中和为某给定值的三元组

问题描述给定一个数组arr,以及一个数字target。求数组中和为target的三个数。要求给出所有解。数组中的每个数在每组解中只能出现一次。解法方法一:如果用暴力方法,时间复杂度是o(n3)o(n^3) 方法二:利用C++11C++11中的unordered_multimap,本题复杂度可降至o(n2)o(n^2)#include<iostream>#include<vector>#incl

2015-03-30 10:47:10 721

原创 const 作为函数返回类型

const 作为函数返回类型,最终目的是希望调用函数时将返回值作为常量处理。细分为三种情况。返回字面常量const int getval(void){ return 100;}该函数返回值里的const其实是可有可无的。返回指针&指向的内容不能被修改const int* getptr(void){ int *p = (int *)0xCC; return p;}in

2015-03-19 09:58:53 6335

原创 线性链条件随机场CRF

Advantages of CRFCRF is popularly used in classification problems. There are 5 important reasons: 1. The chief advantage of CRF lies in the fact that it models the conditional distribution P(y|x)P(y|

2015-03-18 14:50:51 2822

原创 梯度下降法学习总结

梯度下降法学习总结梯度下降法简介梯度下降法是求解无约束优化问题的迭代算法,每一步要求解目标函数的梯度向量。 假设目标函数f(x)f(x)在实数域上具有一阶连续偏导数,无约束最优化问题为:minx∈Rnf(x)min_{x\in R^n}f(x)。设x∗x^*是目标函数极小值点。选取适当的初值x(0)x^{(0)},不断迭代,更新xx的值,直到梯度收敛/目标函数值收敛/x的值收敛。在迭代的每一步,以

2015-03-10 17:15:44 1612

原创 经典HMM简介(三)

经典HMM简介(三)解码问题给定观察序列O=O1,O2,…OTO=O_1,O_2,…O_T以及模型λ\lambda,如何选择一个对应的状态序列S=S1,S2,…,STS=S_1,S_2,…,S_T,使得S能够最为合理的解释观察序列O? 同样用到动态规划-ViterbiViterbi 。算法描述初始化:δ1(i)=πib(O1),ψ1(i)=1,1≤i≤N\delta_1(i)=\pi_ib(O_1

2015-03-07 17:32:20 527

原创 经典HMM简介(二)

经典HMM简介(二)本文用到的记号如下: O=O1,O2,L,OTO=O_1,O_2,L,O_T:输出的观察符号序列 P(O/λ)P(O/\lambda):给定模型λ时,输出符号序列O的概率 aija_{ij}:从状态SiS_i到状态SjS_j的转移概率 βt(i)\beta_{t}(i): P(Ot+1,Ot+2,...,OT,qt=Si),1≤t≤T−1P(O_{t+1},O_{t+2}

2015-03-07 16:39:20 503

原创 经典HMM简介(一)

经典HMM简介(一)马尔科夫性和马尔科夫链如果一个过程的“将来”仅依赖“现在”而不依赖“过去”,即X(t+1)=f(X(t))X(t+1)=f(X(t)),则此过程具有马尔可夫性,或称此过程为马尔可夫过程。时间和状态都离散的马尔科夫过程称为马尔科夫链,记作{Xi=X(i),i=0,1,2,N}\{X_i = X(i), i = 0,1,2,N\}。其中N表示状态的种类数量。状态转移概率矩阵记状态空间

2015-03-07 15:08:45 1312

原创 查找数组中和为某给定值的两个数

查找数组中和为某给定值的两个数问题描述给定一个数组arr,如{2, 6, 7, 4},以及一个数字target,如10。求数组中和为10的两个数。分析方法一:如果用暴力方法,时间复杂度是o(n2)o(n^2)。代码#include <iostream>#include <vector>using namespace std;int main(){ vector<int> numbers

2015-03-03 15:24:23 808 2

原创 线性时间查找两个单链表的交叉结点

线性时间查找两个单链表的交叉结点思路为了解决本道题有多种解法。 方法 1)先将两个单链表LA和LB分别遍历一遍,获得各自的长度为m和n,假设m比n大,那么先对LA表从头遍历m-n个元素。接下来两个表同时遍历,若两个指针指向同一个结点,则停止。返回指向该结点的任一指针。 方法 2)先将两个单链表LA和LB分别遍历一遍,分别将各自的指针保存在两个栈中。然后同时对两个栈进行top操作,直到两个栈顶元素

2015-03-01 20:31:43 604

原创 线性时间查找数量超过数组长度一半的数

期望线性时间查找数量超过数组长度一半的数思路分析事实上,数量超过数组长度(n)一半的数也就是数组中第n/2大的数。 这道题如果不限制时间复杂度,brute force(通过排序)查找的时间复杂度可达到O(nlogn)O(n\log n)。为了找到更快的算法,我们可以借用快速排序中的partition函数。每次运行partition函数,某一组数的pivot都能被放在最终的位置上。假设这个pivot

2015-02-27 21:25:27 629

原创 一个小实例:autoconf 和 automake 生成 Makefile 文件

Makefile 文件的生成在linux下开发大型程序时,make工具可以将大的工具分解成很多个小模块,理清各个源文件的复杂关系。然而,手工编写makefile是一项令人非常头疼的工作,耗时费力,容易出错。本文介绍如何使用自动化工具autoconf 和automake自动生成makefile文件,使得程序员开发的大型程序的编译变得十分简单,只需要“m”或者“make”命令即可。这种大型程序下载后的安

2015-02-25 21:27:24 657

原创 堆排序分析

堆排序分析时间复杂度:平均情况,O(nlogn);最好情况 ,O(nlogn);最差情况,O(nlogn)。空间复杂度,O(1)。代码:#include #include #include using namespace std;void maxheapify(vector & A, int i, int heapsize){ int l = 2*

2015-02-25 10:14:22 441

原创 插入排序、归并排序、快速排序的比较和分析

插入排序、归并排序、快速排序的比较和分析三者的时间复杂度:平均情况,依次是O(n^2), O(nlogn), O(nlogn)最好情况,依次是O(n), O(nlogn), O(nlogn)最差情况,依次是O(n^2), O(nlogn), O(n^2)三者的空间复杂度:依次是O(1), O(n), O(1)1)插入排序#include #includ

2015-02-23 22:42:41 1420

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除