数据结构与算法
eternity1118_
不积跬步无以至千里,不积小流无以成江海
展开
-
字符串匹配之KMP算法
字符串匹配是计算机的基本任务之一。 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"? 许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Donald Knuth。 这种算法不太容转载 2016-06-07 16:23:49 · 675 阅读 · 0 评论 -
字符串循环左移和右移
问题:假设给定一个字符串S,想要把其前k个字符左移放到字符串的尾部,比如S:beautiful,移动的结果字符串为:utifulbea;这种移动方式就叫做字符串的循环左移,且左移k位。问题分析:假如字符串S包含n个字符,那么明显有,循环左移k位等价于循环左移k+n位,而且循环左移和循环右移其实是一样的,如左移k位就等价于左移n-k位。一般的,遇到这一问题,大多数人会首先想到一位一位原创 2016-07-06 16:29:10 · 3323 阅读 · 2 评论 -
统计学习:现代机器学习
统计学习:现代机器学习统计学习统计学习是关于计算机基于数据构建概率统计模型并运用模型对数据进行预测与分析的一门学科,统计学习也称为统计机器学习。当前大部分机器学习也都指的是统计机器学习。特点以计算机和网络为平台以数据为研究对象,是数据驱动的学科目的是对数据进行分析和预测以方法为中心,通过方法构建模型并应用模型来进行分析和预测是概率论、统计学、信息论、计算转载 2016-06-21 11:36:47 · 1625 阅读 · 0 评论 -
算法面试题(一)-- 统计学习与模式识别面试题
题目:答案解析:第一部分:1.统计学习是关于计算机基于数据构建概率统计模型并运用模型对数据进行预测与分析的一门学科,又称为统计机器学习;特点:以计算机为平台;以数据为对象;以方法为中心;以概率论、统计学、信息论以及最优化理论等为理论依托;目的是实现对数据的预测和分析;三要素:模型、策略、算法;2.3.特征选择:基于两个问题:1如何评价一组特征是否有效;2寻优算法原创 2016-06-21 12:46:58 · 3936 阅读 · 1 评论 -
BM算法
BM算法(Boyer-Moore算法)是由Robert S. Boyer和J Strother Moore于1997年发明的一种字符串匹配算法,该算法在实际实践中会比KMP算法效率高,因为BM算法即使在最坏情况下其时间复杂度也为O(N),BM算法不仅算法效率高,而且构思非常巧妙,也很容易理解,下面我们来举例说明BM算法的运行过程:匹配过程:1)首先,字符串与搜索词头原创 2016-07-29 19:09:27 · 3630 阅读 · 1 评论 -
模式识别(Pattern Recognition)学习笔记(三十五)-- K-L变换与PCA
K-L变换的理论知识K-L变换是除了PCA外的另一种常用的特征提取方法,它有很多种形式,最基本的形式跟PCA类似,它跟PCA的不同在于,PCA是一种无监督的特征变换,而K-L变换能够考虑到不同的分类信息,实现有监督的特征提取。根据随机过程中的KL展开理论,将随机过程描述为无数个正交函数的线性组合,而在模式识别问题中,通常可以将一个样本看成是随机向量的某一次实现结果,所以假设有一d维随机向量原创 2016-06-23 17:20:16 · 9246 阅读 · 0 评论 -
Manacher算法--求最长回文子串
回文和回文子串回文串:顺着读和倒着读都一样的字符串;回文子串:给定字符串string,若str同时满足以下两个条件:1)str是string的子串;2)str是回文串;那么str就是string的回文子串;引出问题要求求出上面string中最长的那个回文子串;解决方案方案一:枚举中心位置,对奇数位串和偶数位串分开处理;int AllAlgorithms::longest原创 2016-08-01 11:39:15 · 954 阅读 · 0 评论 -
天平与假币问题
天平与假币假设现在有12枚硬币,已知其中有一枚是假币,但是不知道这枚假币是重还是轻;假如现在给你一架没有砝码的天平,那么你至少需要称量多少次才能找出这枚假硬币。。问题分析随机将12枚硬币等分成3组,每组4个,分别标记为A,B,C;取A和B,分别放在天平的两端(A放左边,B放右边),称重,有以下三种结果:1)如果天平平衡,表明A和B中都没有假币,2)A比B重;3)A比B轻原创 2016-08-01 16:01:06 · 1661 阅读 · 4 评论 -
高原数组
定义:若子数组A[from,...,to]满足以下条件:1)A[from] > A[from - 1];2)A[to] > A[to + 1];则称该数组为高原数组,通常用在求一个数组的局部最大;原创 2016-08-02 11:40:12 · 758 阅读 · 0 评论 -
算法面试题 -- 迷离傍地走
题目问题算法分析Code题目为庆祝强汉文武盛世暨废除和亲七百周年,武后决定拜孙武和王翳对春夏秋冬四官:细君、昭君、探春、文成四人座军事训练。 孙武和王翳分别负责四官的站军姿和踢正步科目;根据军训要求,只有在学会站军姿之后才能进行踢正步训练,但由于四官天资差别,学习时间如下表: 问题问:应该如何安排四官的学习时间,才能够使得所有人都学会上述两项技能的时间最短?算法分析首先我们来看,如果按原始原创 2016-09-23 17:02:31 · 1319 阅读 · 4 评论 -
模式识别(Pattern Recognition)学习笔记(三十四)-- 主成分分析(PCA)
一个模式识别系统设计的好坏,首要取决于所选用的特征是否较好的反映了正在研究的问题。模式识别问题的第一步是获取特征,获取来的特征被称作原始特征,其中可能有很多特征与我们研究的问题没多大关系,甚至它们在后续的分类中还有可能影响分类性能;另外,就算这些特征都是与研究问题有联系的,但是太多的特征会导致计算量大、推广能力差,所以原始特征要进一步清洗得到二次特征,即在保证分类器效果的前提下应该使特征数尽可能的原创 2016-06-20 21:40:01 · 8252 阅读 · 0 评论 -
滚动数组
滚动数组的作用在于优化空间,主要应用在递推或动态规划中(如01背包问题)。因为DP题目是一个自底向上的扩展过程,我们常常需要用到的是连续的解,前面的解往往可以舍去。所以用滚动数组优化是很有效的。利用滚动数组的话在N很大的情况下可以达到压缩存储的作用。一个简单的例子:斐波那契数列:一般代码:[cpp] view plain copy转载 2016-07-27 18:02:09 · 353 阅读 · 0 评论 -
算法面试题(二)-- 最长公共子序列(LCS)与苦恼的月下老人
这是一个典型的动态规划题,属于求两个序列的最长公共子序列问题,如果你手边有《算法导论》这本书,这个问题就可以在书中找到;Code:int LCS(const char *Male,const char *Female) { int N = (int)strlen(Male); int M = (int)strlen(Female);原创 2016-06-22 14:21:45 · 1190 阅读 · 2 评论 -
字符串匹配之KMP算法推导过程
申明:此文系Huge对KMP算法的的完整推导过程,在读此文之前,如果对KMP算法不是非常了解的,可以去到http://blog.csdn.net/eternity1118_/article/details/51604641阅读有关KMP的相关知识,如果已经非常了解,那就请继续吧。。有了以上资料的了解后,让我们一起来开始推导&构建 KMP 算法:定义:A 是问题中的模原创 2016-06-07 16:52:50 · 425 阅读 · 0 评论 -
KMP算法推导
申明:此文系博主对Huge对KMP算法的推导过程的加工整理而成,在读此文之前,如果对KMP算法不是非常了解的,可以去到http://blog.csdn.net/eternity1118_/article/details/51604641阅读有关KMP的相关知识,如果已经非常了解,那就请继续吧。。有了以上的资料了解后,让我们一起来推导和构建KMP算法吧。定义:A是问题中模式串(短原创 2016-06-08 11:33:20 · 892 阅读 · 0 评论 -
模式识别(Pattern Recognition)学习笔记(二十七)-- 基于树搜索算法的快速近邻法
近邻法中计算距离需要遍历,带来很大的计算量和存储量,为了改善这两方面的性能,有人提出采用分枝界定算法(Branch-Bound Algorithm)来改进近邻法,主要分为两个阶段:1)利用人工划分或K-means聚类算法或其他动态聚类算法将样本集X划分成层级形式,形成一个树结构;2)利用树搜索算法找出与未知样本的k个近邻。1.层级划分1)将样本集X划分成l个子集,每个子集再分成l个子集,原创 2016-06-15 11:33:03 · 4428 阅读 · 2 评论 -
模式识别(Pattern Recognition)学习笔记(二十八)-- 决策树
1.数值特征与非数值特征学习分类这么久,不知道大家有没有注意一个问题,那就是我们的输入样本数据都是基于数值计算的,因此在近邻法中才可以计算距离这一说,这种可以用数值来描述的对象特征,我们称之为数值特征,但是在我们生活中所涉及的分类问题并非都是用数值特征来描述某个研究对象的,因此与数值特征对应的就是非数值特征,比如男生和女生比较喜欢什么样的颜色等等。关于非数值特征,主要有以下几种:1)名原创 2016-06-16 12:19:23 · 7641 阅读 · 2 评论 -
模式识别(Pattern Recognition)学习笔记(三十)--随机森林(Random Forest)
引言 模式识别是一门基于数据的学科,因此所有的模式识别问题都会面临的同一个问题就是数据的随机性问题。模式识别中每个方法的实现都是基于一个特定的数据样本集的,但是这个样本集只是所有可能的样本中的一次随机抽样,毕竟在我们的生活实际中存在着万物众生,多到我们数也数不清,甚至计算机都无法统计的清,而我们搜集到的充其量只是其中很小很小的一部分,这也是为什么机器学习中缺少的只是数据,只要有足够原创 2016-06-16 17:11:23 · 5414 阅读 · 1 评论 -
卡尔曼(Kalman)滤波(五)-- 三次样条插值
1均差2三次样条插值函数3M关系式参考数值分析;原创 2016-06-19 16:37:14 · 2993 阅读 · 0 评论 -
队列
基本特征:先进先出(FIFO)基本操作:压入,弹出实现要点:初始化空间,前指针front弹出后指针rear压入,循环使用,判空判满举例1:基于数组的队列//队列typedef struct Queue{ int *array; size_t cap; size_t front; size_t rear; size_t size;} M原创 2016-07-23 11:20:17 · 347 阅读 · 0 评论 -
堆栈
基本特征:后进先出(LIFO)基本操作:压入(push),弹出(pop)实现要点:初始化内存空间,栈顶指针,判空判满缺点:容易造成空间浪费,且易受初始化空间的局限举例:基于数组的堆栈//堆栈typedef struct ZHLStack{ int *array; size_t cap;//容量 size_t top;//栈顶 }ZHLST原创 2016-07-21 17:34:34 · 509 阅读 · 0 评论 -
模式识别(Pattern Recognition)学习笔记(三十三)-- Boosting方法之AdaBoost
Boosting最早被用在电力电子技术学科中的升压(Boost)变换器中,原本是想通过升压来提高功率,现在将这一提高功率的思想引入到模式识别方法中,它的含义就变成通过融合多个分类器,从而大大提高分类器的性能。Boosting方法和随机森林的思想很类似,当采用基于简单模型的单个分类器对样本进行分类的效果不理想时,我们希望能够通过构建并整合多个分类器来提高最终的分类性能,我们通常将这种不太理想的单原创 2016-06-20 15:09:45 · 1725 阅读 · 0 评论 -
几句话梳理Linear Regression、Logistics Regression、Softmax Regression之间的共性与区别
先来说说Linear Regression与正态分布高斯分布的关系Linear Regression的基本步骤如何从Linear Regression引出Logistics RegressionLogistics Regression与Softmax Regression总结指数族分布先来说说Linear Regression与正态分布(高斯分布)的关系上过吴恩达老师的机器学习课程的都熟悉原创 2016-11-03 13:33:06 · 4561 阅读 · 3 评论