自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

没有最好,只有更好!

True mastery of any skill takes a lifetime.

  • 博客(49)
  • 资源 (3)
  • 收藏
  • 关注

原创 OpenCV中CalcOpticalFlowFarneback()函数分析

OpenCV中CalcOpticalFlowFarneback函数函数简介CalcOpticalFlowFarneback()函数是利用用Gunnar Farneback的算法计算全局性的稠密光流算法(即图像上所有像素点的光流都计算出来),由于要计算图像上所有点的光流,故计算耗时,速度慢。它的核心思想主要源于”Two-Frame Motion Estimation Based on Polynom

2016-04-23 11:55:29 19465 2

原创 Java中接口与抽象类比较

本篇是本人学习Java比较,如有雷同,纯属巧合。Java中接口与抽象类比较相同点1)接口和抽象类都不能被实例化,它们都位于继承树的顶端,用于被其他类实现和继承;2)接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。区别1)设计目的不同;接口作为系统与外界交互的窗口,接口体现的是一种规范。对于接口的实现者而言,接口规定了实现者必须向外提供哪些服务(以方法的形式提供)

2016-04-29 21:59:24 669

翻译 Effective C++ 55个条款

Effective C++ 55个条款让自己习惯C++视C++为一个语言联邦C++高效编程守则是状况而变化,取决于你使用C++的哪一部分。尽量以const,enums,inline替换#define对于单纯常量,最好以const对象或enums替换#defines;对于形似函数的宏(macros),最好改用inline函数替换#defines。尽可能使用const将某些东西声明为const可帮

2016-04-25 19:50:43 4582

原创 OpenCV光流跟踪程序学习

TermCriteria类TermCriteria类主要用于控制迭代算法的终止条件,它取代了之前版本中的CvTermCriteria类,该类中的信息具体如下:class CV_EXPORTS TermCriteria { public: enum Type // 类型的枚举 { COUNT=1, // 按照最大迭代次数和元素

2016-04-22 17:26:25 3018

原创 正则表达式学习

正则表达式:使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在文本编辑中,它可以用来检索、替换某个匹配的文本。正则表达式可以用形式化语言理论的方式进行表述。它右常量和算子组成,分别表示指示字符串的集合和在这些集合上的运算。具体如下:1)  空集:φ指示集合φ。2)  空串:ε指示集合{ε}3)  文字字符:在∑中的a指示集合{a}相关运算如下:1)  串接:RS指

2016-04-21 20:39:16 650

原创 leetcode_092 Reverse Linked List II

题目分析:给定一个链表和一个区间的两个值,实现将链表中的该区间节点进行逆转操作。解题思路:方法1找到链表中的m节点和n节点,然后执行reverse函数,将此区间的链表逆转,注意要保存m的前一个节点和n的后一个节点,逆转完成后将链表串接在一起。方法2首先直到m节点时,保存m节点的前一个节点pre,然后将m后的节点依次插入到pre的后面即可。实现程序// 逆转链表操作函数 void reve

2016-04-21 12:39:00 398

原创 leetcode_091 Decode Ways

题目分析:对给定的一串数字,将其解码成对应的英文字母解题思路:递归实现(超时)1)根据当前字符串中起始字符是否为1或起始字符为2且下一字符是否小于6进行不同的的递归;2)每次递归,字符串长度相应的减小,最后根据当前字符串的长度是否为0,1或者字符串为’0’为递归的终止条件。动态规划实现1)设置一个数组dp[n+2]用来存放遍历到每个字符时,对应的编码个数,并将对应数组中元素初始化为1;2)遍

2016-04-21 12:22:05 463

原创 leetcode_090 Subsets II

题目分析:对给定的数组(数组中可能存在重复元素),求该数组的所有子集。解题思路:dfs实现1)首先对数组进行排序;2)利用dfs求排序后数组的所有子集。注意:当dfs处理中出现重复元素时,则进行跳过处理即可。实现程序class Solution{ vector< vector<int> > subsetsWithDup(vector<int> &nums) {

2016-04-17 23:18:20 407

原创 leetcode_089 Gray Code

题目分析:对给定的n,求0~2^(n-1)按照特定顺序排序,其中第一个数必须为0,相邻两个数的二进制表示有且只有一位不同,即求n位数的格雷码操作。解题思路:二进制转格雷码实现假设3为的二进制数,对应的二进制数和格雷码分别如下:二进制数: 000 001 010 011 100 101 110 111格雷码: 000 001 011 010 110 111 101 100二进制码转格雷码使用异或

2016-04-17 22:46:52 457

原创 leetcode_088 Merge Sorted Array

题目分析:针对两个有序的数组A和B,A数组的长度为m,B数组的长度为n,假设A有足够的空间容纳B数组,实现A和B数组的合并操作。解题思路:遍历比较赋值实现1)使用三个位置指针i,j,k,初始时分被指向A数组最末元素、B数组最末元素、和融合后数组的最末元素位置;2)比较A[i]与B[i]大小,将较大的值赋值给合并后的数组A[k];3)依据2)中合并的情况移动i,j,k位置指针的位置;4)循环执行

2016-04-17 22:27:42 459

原创 Windows下编译live555源码

Windos下编译live555源码环境Win7 64位 + VS2012步骤1)源码下载并解压在官网上下载最新live555源码,并对其进行解压。2)VS下建立工程项目新建Win32项目项目名称为BasicUsageEnvironment,解决方案名称为live555,项目配置属性为静态库,不勾选预编译头。在新建的项目中依次添加新项目,项目名称分别为UsageEnvironment、Grou

2016-04-16 21:04:58 4384 4

原创 char[],char *,string之间转换

char[],char *,string之间转换char []与char *之间转换char []转char *:直接进行赋值即可// char[] 转char *char str[] = "lala";char *str1 = str;cout << str1 << endl;char *转char[]:字符拷贝实现,不能进行赋值操作// char *转换为char []const c

2016-04-15 19:53:23 65971 3

原创 Matlab C/C++ 混合编程

Matlab C/C++ 混合编程Matlab调用C++程序,所用mexFunction定义函数:void mexFunction(int nlhs, mxArray *plhs[],int nrhs, const mxArray *prhs[]){}// 参数说明如下:// 1)nlhs(number of left hand size parameters):返回给Matlab的返回值

2016-04-15 10:09:00 1616

原创 C++调用Matlab混合编程

C++调用Matlab混合编程简介C++中调用Matlab时,所用的数据类型对应为mwArray。而C中调用Matlab时,所用的数据类型是mxArray,由于mxArray的内存管理方式比较松散,没有做数据封装,故在使用时须对临时阵列和约束阵列明确,且小心地防止内存泄漏,虽然存在自动内存管理机制,但仍然要处处调用mlfAssign,较麻烦,故不建议使用。而mwArray是基于C++的,它将一切交

2016-04-14 23:00:28 5648

原创 Windows下多线程相关函数

Windows下多线程相关函数1)创建线程 CreateThreadWINBASEAPI_Ret_maybenull_HANDLEWINAPICreateThread( _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, _In_ SIZE_T dwStackSize, _In_ LPTHREAD_START_ROUT

2016-04-14 10:30:37 1090

原创 求两个数的最大公约数

两个数的最大公约数辗转反除法对应公式:f(x, y) = f(y, x%y),其中x>=y>0。程序实现如下:int gcd1(int x, int y){ if (x < y) return gcd1(y, x); return (!y) ? x : gcd1(y, x % y);}大整数减法因辗转反除法利用取模运算,计算开销大,故转换为大整数减法实现。对应公

2016-04-13 23:00:38 655

原创 多线程

多线程简介提起线程,首先了解的应该是进程,下面对进程和线程进行简要介绍。进程:包含程序指令和相关资源的集合。每个进程和其他进程一起参与调度,竞争CPU,内存等系统资源。每次进程切换,都存在进程资源的保存和恢复动作,称为上下文切换。进程引入解决了多用户支持问题。但进程也存在问题,如进程频繁切换引起的额外开销可能会严重影响系统性能。对进程来说,系统资源是独占的,每次切换,这些独立资源都需要切换。多线程

2016-04-13 22:32:58 508

原创 面向对象设计

面向对象设计三要素封装:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操做,对不可信的进行信息隐藏。继承:可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。继承可以通过继承和组合实现。实现继承:使用基类的属性和方法而无需额外编码的能力;接口继承:仅使用属性和方法的名称,但是子类必须提供实现的能力;可视继承:指子窗口(类)使用基窗体(类)的外观

2016-04-12 19:55:07 568

原创 malloc/free与new/delete异同点

malloc/free与new/delete异同点相同点malloc/free与new/delete都可以用于申请动态内存和释放内存,他们申请的空间都在堆上分配。不同点1)操作对象不同malloc/free是C++/C语言的标准库文件,new/delete是C++的运算符;对非内部数据对象,malloc/free无法满足动态对象要求。对象在创建时要自动执行构造函数,对象消亡之前要自动执行析构函数

2016-04-12 18:33:50 2361

原创 VS中调用Matlab封装的库文件

VS中调用Matlab封装的库文件简介由于项目需要,要编写多线程实现功能,但Matlab天生多线程缺陷,查相关资料,可以通过Timer对象实现,但考虑到C++程序的高效性,且一直在使用C++,故决定将Matlab编译成C++可以调用的库文件,然后在VS下面调用Matlab程序,下面是在Matlab封装成库文件,以及VS调用Matlab库文件详细过程。环境系统:Win7(64位)、Matlab 2

2016-04-12 17:16:55 4827 2

原创 OpenCV统计时间

OpenCV计时所用函数为getTickCount()和getTickFrequency()。getTickCount():返回CPU自某个时间(如启动电脑)以来走过的时钟周期数。getTickFrequency():返回CPU一秒中所走的时钟周期数。所以可以以秒为单位对某运算时间计时。使用方法:    double start = static_cast(

2016-04-11 23:08:36 7993 2

原创 leetcode_109 Pascal Triangle II

题目分析:给定整数n,生成杨辉三角的第n行数据信息。解题思路:依据杨辉三角性质求解本题较上一个题目主要区别在于本题只求单独某一行元素,此时相当将求二维信息转换为求一维信息。杨辉三角性质:1)杨辉三角第i行共有i+1个数据;其中第一个元素和最后一个元素值为1;2)第i行元素非第一个和最后一个元素值为肩上两个元素相加求得,当利用一个数组进行求解时,则对应计算公式为tri[j] = tri[j] +

2016-04-10 22:53:25 450

原创 leetcode_118 Pascal Triangle

题目分析:给定整数n,生成杨辉三角的前n行解题思路:依据杨辉三角新值求解杨辉三角性质:1)每行第一个元素和最后一个元素值为1;2)每行非第一个和最后一个元素值为:tri[i][j] = tri[i-1][j-1] + tri[i-1][j]实现程序class Solution{ public: vector< vector<int> > generate(int n

2016-04-10 22:36:20 410

原创 leetcode_309 Best Time to Buy and Sell Stock with Cooldown

题目分析:用一个数组表示股票每天的价格,数组中第i个数表示股票在第i天的价格。 可以进行多次交易,但在存在两个限制条件:1)不可以同时进行多次交易(必须卖出股票前再买一次股票);2)售出股票后,不能在第二天在买股票(冷冻期);求此时的最大收益。解题思路:动态规划求解此题原前面题目的最大区别在于,股票交易过程中存在冷冻期,即如果某天买了股票,那么第二天不能买股票。解题过程中需要维护三个数组:bu

2016-04-09 23:07:12 1084

原创 leetcode_188 Best Time to Buy and Sell Stock IV

题目分析:用一个数组表示股票每天的价格,数组中第i个数表示股票在第i天的价格。最多可以交易k次,但手上只能持有一支股票,求此时的最大收益。解题思路:动态规划求解1)如果交易次数大于股票变化的天数,次数利用贪心法求解最大收益即可。2)如果不满足1),则从所有的价格变化序列中,挑选出2*k个元素,组成交易,交易过程为交替进行。此时利用动态规划进行求解。利用两个数组分别记录:当前到达第i天最多可以进

2016-04-09 22:52:16 731

原创 leetcode_Best Time to Buy and Sell Stock III

题目分析:用一个数组表示股票每天的价格,数组中第i个数表示股票在第i天的价格。最多只能交易两次,且手上最多能持有一支股票,求最大收益。 解题思路:动态规划求解假设以第i(0 <= i <= n-1)填为中间卖出也即下次交易的买入,则最大收益为max{preprofit[i] + postprofit[i]}。具体实现分三步:1)从前到后遍历,求第一次交易的最大值;2)从后向前遍历,求第二次交易

2016-04-09 22:04:54 530

原创 leetcode_122 Best Time to Buy and Sell Stock II

题目分析:用一个数组表示股票每天的价格,数组中第i个数表示股票在第i天的价格。允许顾客进行无数次交易,但一次只能交易一支股票,求顾客的最大收益解题思路:贪心法求解由于此题,交易次数不限,故主要采用贪心的思想。其具体为:一遍遍历数组,只要当天的价格高于前一天的价格,就进行交易。实现程序class Solution{ public: int maxProfit(vect

2016-04-09 21:54:45 389

原创 leetcode_121 Best Time to Buy and Sell Stock

题目分析:用一个数组表示股票每天的价格,数组中第i个数表示股票在第i天的价格。若只允许进行一次交易,即只允许买一只股票,并卖掉,求在这些田中如何进行买卖交易获得的收益最大。解题思路:动态规划求解一遍遍历数组,用一个数记录从开始到现在出现过的最低价格,作为买入价格,假设当天售出,计算收益,如果收益大于最大收益,则更新最大收益。遍历完整个数组后得到最后的最大收益。时间复杂度为O(n),空间复杂度为

2016-04-09 21:48:16 526

原创 leetcode_087 Scramble String

题目分析:给定连个字符串,判断它们能否通过二叉树的左右子树交换后相等,即判断字符串是否相似。解题思路:递归实现两个字符串相似的必须条件是含有相等的字符集。故可以通过将两个字符串进行排序,然后利用递归方法进行判断。实现程序class Solution{ public: bool isScramble(string s1, string s2) {

2016-04-08 11:22:32 495

原创 leetcode_085 Maximal Rectangle

题目分析:给定一个只包含0和1元素的矩阵,求出矩阵中全部包含1的最大矩形面积。解题思路:二维动态规划求解定义二维数组dp[i][j]用于存放位置(i, j)对应的最大矩形面积。1)初始条件:dp[i][col-1] = martix[i][col-1]==’1’)2)dp[i][j] = (martix[i][j] == ‘1’) ? 1 + dp[i][j+1] : 0直方图求解对于二维数

2016-04-08 11:15:17 554

原创 leetcode_086 Partition List

题目分析:给定一个单链表和一个整数x,把链表中小于x的节点放在链表前部分,把链表中大于等于x的节点放在链表的后部分,每部分节点之间相对原始的位置保存不变。解题思路:遍历实现1)定义两个链表的空表头,head1和head2;2)将小于x的节点依次挂接在head1对应的链表表尾;3)将大于等于x的节点依次挂接在head2对应的链表表尾;4)将head1的表尾与head2的表头进行连接,返回head

2016-04-08 11:13:38 384

原创 leetcode_084 Largest Rectangle in Histogram

题目分析:求条形图中最大矩形的面积,输入为条形图中条的个数和每个条的高度。解题思路:双重循环(超时)找第i个条左边和右边连续的不低于条的个数,然会计算面积,从而得最后结果利用栈的思想求解计算第i个条件图对应的矩形面积,需要知道它连续的左边有多少个条的高度不低于它,假设有a个;同时需要知道它右边多少个连续的条的高度不低于它,假设有b个,此时第i条对应的最大矩形面积为 hi * (a + b +

2016-04-07 23:10:04 397

原创 leetcode_079 Word Search

题目分析:给定一个二维的字母板,可以在字母板上演着四个方向(上、下、左、右)走,来查找一个给定的单词是否存在。注意同一个位置只能走一次,即不能重复。解题思路:深度优先搜索实现利用DFS对一个起点字母进行上、下、左、右搜索,判断是否是给定的word。因为同一个位置只能走一次,故使用一个visited数目来记录当前的字母是否已经被访问过,访问完这一次搜索后,在将其对应的visited置为false

2016-04-07 22:41:59 525

原创 leetcode_061 Rotate List

题目分析:给定一个链表,从链表尾端数k个节点位置,从该位置开始到结尾和之前的那部分对调。实质为链表的在某个位置旋转操作。解题思路:方法1:将链表链接成环再旋转1)遍历链表,将链表的表尾和链表的表头相连,同时记录链表的表长2)计算链表旋转后的处于的起始位置,然后从头遍历链表到逆转的位置前一个节点位置,即(len - k - 1)处;3)记录链表的新表头,并断开环状链表即可。方法2:直接定位旋转

2016-04-07 22:22:53 315

原创 leetcode_110 Balanced Binary Tree

题目分析:给定一棵二叉树,判断此二叉树是否为平衡二叉树。解题思路:平衡二叉树平衡二叉树(AVL Tree)是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。 递归实现实现平衡二叉树,关键在于求取树的高度和判断树中左右两个子树的高度差是否满足绝对值不超过1。故实现过程主要如下:1)递归求二叉树的高度;2)递归判断二叉树是否满足平衡二叉树。实现程序

2016-04-06 23:03:36 388

原创 OpenCV中CommandLineParser类

OpenCV中CommandLineParser类OpenCV中CommandLineParse类主要是命令行解析类。OpenCV中出现此类的主要目:方便用户在命令行使用过程中减少工作量。具体使用方式如下:1)在main函数中定义一个常量字符串变量如下:const string keys = "{help | | print this

2016-04-06 13:59:21 14090

原创 leetcode_103 Binary Tree Zigzag Level Order Traversal

题目分析:给定一棵二叉树,自顶向下,按照Z字形分层遍历。即如果本层是自左向右,则下一层是自右向左。解题思路: 分析此题本质函数二叉树的层次遍历,不同是输出每层信息存在方向。使用两个队列实现节点的分层访问。同时设置标志来决定每层节点输出方向。非递归实现利用队列实现,具体方法如下:1)若树节点非空,则入队1;2)定义队列2,队列1元素依次出队,并判断是否存在左右子节点,存在让其进入队列2,并

2016-04-05 23:06:52 378

原创 设计模式概况

设计模式概况设计模式依据目的可分为三种类型:创建型、结构型、行为型。创建型模式与对象的创建有关;结构型模式处理类或对象的组合;行为型模式对类或对象怎样交互和怎样分配职责进行描述。创建型单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。原型模式:用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不

2016-04-05 22:08:53 442

原创 leetcode_107 Binary Tree Level Order Travelsal II

题目分析:二叉树层序遍历实现,要求输出每层的数据信息(从底层开始输出)。解题思路: 对比分析此题与102题基本思想相同,都是求树的层序遍历,唯一的不同是102是从根节点层开始输出,当此题是从叶节点层开始输出。实现方法基本一样,只需在最后对生成的序列进行逆转操作即可。递归实现1)判断根节点是否问空,不为空,访问;2)递归访问当前节点的下一层左子树节点;3)递归访问当前节点的下一层右子树节点

2016-04-04 21:58:26 585

原创 leetcode_102 Binary Tree Level Order Traversal

题目分析:二叉树层序遍历实现,要求输出每层的数据信息。解题思路: 递归实现。1)判断根节点是否问空,不为空,访问;2)递归访问当前节点的下一层左子树节点;3)递归访问当前节点的下一层右子树节点。非递归实现利用队列实现,具体方法如下:1)若树节点非空,则入队;2)出队,访问当前节点,并将其左右子节点(非空)分别入队;3)循环执行步骤2),直到队列为空即可。注意:需要一个变量记录每次节点的数

2016-04-04 21:51:36 439

剑指offer程序

此程序为剑指offer程序,便于找工作的小伙伴的复习~

2017-01-04

Adaboost算法实现

该Adaboost算法用C++实现的基本Adaboost算法,对于初学Adaboost算法和理解Adaboost算法的学生有一定的帮助!如发现我代码中存在错误或不足,欢迎指正,谢谢!

2015-11-02

缓冲区溢出实验报告

本文档是关于缓冲区溢出实现的整个流程,对做缓冲区溢出有一定的帮助

2015-08-26

空空如也

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

TA关注的人

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