算法

Manacher算法的应用

此生再无相见时 提交于 2020-01-27 18:52:33
Manacher算法是大家常用的,用来求回文串系列问题的算法 具体算法过程,我不多说,不知道的,可以看: Manacher算法详述 通过Manacher算法之后,我们会得到几个比较重要的信息: 首先,就是这个字符串有无回文子串,以及最长的回文子串的长度。 其次,就是以某一点为中心的回文半径,也就是 p 数组。 出题人比较喜欢在这个上面做文章 题型一:判断回文串,以及输出长度 首先是最基本的判断这个字符串是否有回文子串,以及输出最长的回文子串的长度。 模板题目,一般不直接考察 就直接 Manahce算法 就行了 例题: 最长回文 char s [ maxn ] , str [ maxn ] ; int p [ maxn ] ; int Init ( ) { int len = strlen ( s ) ; str [ 0 ] = '@' , str [ 1 ] = '#' ; int j = 2 ; for ( int i = 0 ; i < len ; ++ i ) { str [ j ++ ] = s [ i ] ; str [ j ++ ] = '#' ; } str [ j ] = 0 ; return j ; } int manacher ( ) { int mx , id ; mx = id = 0 ; int ans = - 1 ; int len = Init ( )

程序猿在等电梯时都在想什么?

半世苍凉 提交于 2020-01-27 18:11:53
都等这么久了,电梯怎么还没来???一定是电梯调度有问题!那就让我给它设计一个电梯调度算法。 电梯调度与操作系统中的磁盘调度是有联系的。我大概在三年前就想过电梯调度的问题,那时我刚搬入高层住宅,然而当时我的专业功底还不够扎实,也没有深入研究。直到现在我接触了操作系统中的磁盘调度算法,我才联想到了电梯调度算法。异曲同工,殊途同归,无非都是调度。在磁盘调度中,移动的是磁头指针(相对的说),而在电梯调度中,移动的是电梯。那么电梯调度算法有哪些?它们都适用于哪些情况呢? 先来先服务算法 先来先服务算法的简称是FCFS,是First Come First Serve的缩写。顾名思义,就是先来到电梯门前的(或者说先按下电梯上下按钮的)乘客先体验电梯的服务。举个例子,李大爷在1楼按下了向上的按钮,在此之后张大爷在15楼按下了向下的按钮,在此之后王大爷又在8楼按下了向下的按钮。王大爷跟张大爷约好要一起去菜市场买菜。那么此时,无论电梯现在在几楼,都会先去1楼接李大爷。李大爷进入电梯后,无论他要去几楼(假设李大爷要去20楼),到达目的地(20楼)之后,电梯就会去15楼接张大爷。张大爷在15楼上了电梯,他要去菜市场买菜,因此他要到1楼,他进了电梯就按下了1楼的按钮。于是电梯呼呼呼开始下行,此时还在8楼的王大爷眼睁睁地看着电梯经过了8楼继续向下运行,竟然无视了他!!!张大爷顺利到达1楼

论文阅读——结合数据场情感空间和混合蛙跳算法的连续语音情感变化趋势检测

蓝咒 提交于 2020-01-27 17:51:54
张明阳, 查诚, 塔什甫拉提·尼扎木丁, et al. 结合数据场情感空间和混合蛙跳算法的连续语音情感变化趋势检测[J]. 声学学报, 2019, 44(01):14-21. 文章的主要工作 提出数据场模型情感空间的构建方法。 将混合蛙跳算法与数据场空间结合进行连续情感预测 在Berlin语料库上进行情感识别仿真实验,在AVEC 2012连续情感语音数据集进行情感预测,评估模型的性能。 数据场情感空间 理论依据 维度情感空间中,各维度的坐标值大小可以反映情感表达的强弱; 情感轮理论认为基本情感可以通过不同的强度大小表现出来,也可以通过混合一种或多种其他情感构成另外的情感表达; 法拉第提出场的概念用于表示场中粒子之间的相互作用,数据场则用来描述场中数据间的相互影响,可以推广到情感的表达上去,从而进行情感计算。 情感空间与特征选择 情感空间D中包含n个数据点,每个数据点是一个p维的特征向量。 使用基于顺序前向浮动搜索的SVM算法进行特征选择,对一个初始空集以浮动的方式,通过前向和后向的步骤增加和删除特征,得到最优特征集(p维)。 情感空间中的势能函数为 该式表示空间中的每个情感中心都会对其他中心产生势能作用。 使用Newton-Raphson方法确定情感中心。选择同一类情感特征量的均值向量作为起点,然后进行迭代,迭代公式如下 其中,xk表示第k次迭代得到的中心特征量。 混合蛙跳算法

java实现括号匹配算法

你说的曾经没有我的故事 提交于 2020-01-27 17:32:16
package Bracket ; import java . util . ArrayList ; public class Stack { ArrayList < Character > list = new ArrayList < > ( ) ; public void push ( Character s ) { //将左括号压入栈中 list . add ( s ) ; } public void pop ( ) { //将匹配到的左括号弹栈 list . remove ( list . size ( ) - 1 ) ; } public boolean isEmpty ( ) { //判断栈是否为空 return list . isEmpty ( ) ; } } package Bracket ; import java . util . Scanner ; public class Bracket { public static void main ( String [ ] args ) { boolean flag = true ; Stack stack = new Stack ( ) ; Scanner in = new Scanner ( System . in ) ; System . out . println ( "请输入只包含\"(\",\")\

常用排序算法-二分法

冷暖自知 提交于 2020-01-27 15:24:46
整数二分 method 在一个区间内部去区分边界,在选择区间中,要选择答案所在区间,每一次都会将答案覆盖掉。 当区间长度是1的时候区间里的数一定是答案。 Example #include <iostream> using namespace std; const int N = 100010; int n,m; int q[N]; int main() { scanf("%d%d",&n,&m); for (int i = 0; i < n; i ++) scanf("%d",&q[i]); while(m --) { int x; scanf("%d", &x); int l = 0, r = n - 1; while(l < r) { int mid = l + r >> 1; if (q[mid] >= x) r = mid; else l = mid + 1; } if (q[l] != x) cout << "-1 -1" << endl; else { cout << l << ' '; int l = 0,r = n - 1; while(l < r) { int mid = l + r + 1 >> 1; if (q[mid] <= x) l = mid; else r = mid - 1; } cout << l << endl; } } return 0; }

最近对数据挖掘感兴趣了,为什么国外的课程会这么好

烈酒焚心 提交于 2020-01-27 14:09:46
贴上671coder的一篇帖子 : 原址见 : http://blog.csdn.net/liuqiyao_01/article/details/37904611 前言 事实上有许多的途径可以了解机器学习,也有许多的资源例如书籍、公开课等可为所用,一些相关的比赛和工具也是你了解这个领域的好帮手。本文我将围绕这个话题,给出一些总结性的认识,并为你由程序员到机器学习高手的蜕变旅程中提供一些学习指引。 机器学习的四个层次 根据能力可以将学习过程分成四个阶段。这也是一个有助于我们将所有学习资源进行分类的好方法。 初学阶段 新手阶段 中级阶段 高级阶段 我之所以把初学阶段和新手阶段区分开来,是因为我想让那些完全初学者(对这个领域感兴趣的程序员)在初学阶段对机器学习有一个大致的认识,以便决定是否继续深入。 我们将分别探讨这四个阶段,并推荐一些能够帮助我们更好地理解机器学习和提高相关技能的资源。对学习阶段进行这样的分类只是我个人的建议,也许每个分类的前后阶段中也有一些适合当前阶段的资源。 我认为对机器学习有一个整体性的认识是非常有帮助的,我也希望能听听你们的想法,通过在下面评论告诉我吧! 初学阶段 初学者是指那些对机器学习感兴趣的程序员。他们或许已经接触过一些相关的书籍、wiki网页,或者是已经上过几节机器学习课程,但是他们并没有真正地了解机器学习

30 基于相似性测度研究的点云匹配关系求解研究

你离开我真会死。 提交于 2020-01-27 11:37:28
0 引言 问题背景:大量的工程实践表明,点云匹配关系的求解是一个非常复杂而困难的问题。其核心点在于找到一种映射方法,该方法将某个点映射到一个有限m维的特征向量,A = {a1,a2,a3,…,am}. 基于某种距离度量的方法,比如欧式距离法,计算A与任意某B的距离值距离值为distance = |A-B|.若A与B的距离值与两点在几何及拓扑上的相似性呈正相关,该相关系数越接近1(或者-1,效果相似),则该映射方法和距离函数的组合描述效果越好。现在需要找到一种合适的映射方法,对这种方法的要求如下:1、这种方法能够实现点云与CAD模型的准确匹配,误差在1mm以内为宜;2、点云与CAD模型的尺度在200mm3 以内,小尺度点云;3、点云与CAD模型文件的完整度高,数据可匹配性好,基本不存在遮挡等情况; 1 问题解决流程 (1)制作数据集,CAD转obj,点云转obj,读入之后统一转为pcd标准格式进行处理; (2)测试各个算法的性能,把算法的参数写成可调的参数文件,找到一个合理的调试区间; (3)给出算法的评价标准,运行测试,得出测试结果,排序; 2 算法流程 (1)uniform-sampling,通常采用点云下采样技术降低点云密度 (2)点云特征描述子提取,通常采用PCL中的传统描述子(如FPFH等),或者深度学习描述子 (3)基于(2)中解出的描述子求解点云的匹配关系

【算法】递归算法---作为树的基础知识点【待学习】

只愿长相守 提交于 2020-01-27 09:48:38
https://blog.csdn.net/feizaosyuacm/article/details/54919389 例题: https://blog.csdn.net/Leo1120178518/article/details/102703350 https://blog.csdn.net/qq_34039315/article/details/78679029 1.递归算法解决问题的特点: (1) 递归就是在过程或函数里调用自身。 (2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。 (3) 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。 (4) 在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成 栈溢出 等。所以一般不提倡用递归算法设计程序。 2.要求: 递归算法所体现的“重复”一般有三个要求: 一是每次调用在规模上都有所缩小(通常是减半); 二是相邻两次重复之间有紧密的联系,前一次要为后一次做准备( 通常前一次的输出就作为后一次的输入 ); 三是在问题的规模极小时必须用直接给出解答而不再进行递归调用,因而每次递归调用都是有条件的(以规模未达到直接解答的大小为条件),无条件递归调用将会成为死循环而不能正常结束。 3.递归算法的实现(3点:1.入参和递归参数 2.算法 3

关于真分数四则运算算法

99封情书 提交于 2020-01-27 07:54:45
排版有些问题,请谅解。。。 数据结构:下压栈 参考算法:Dijkstra双栈算数表达式求值算法、GCD算法(求最大公约数)、逆波兰表达式 1.Dijkstra双栈算数表达式求值算法: 引自《算法》第四版 作者: 塞奇威克 (Robert Sedgewick) / 韦恩 (Kevin Wayne) 本质:操作数栈 运算符栈 忽略左括号 遇右括号弹出运算符、弹出所需数量操作数、将运算结果压入操作数栈 2.GCD算法: 别名:辗转相除法、欧几里得算法 因为以前写过一个C语言实现,直接po上来吧 #include "stdafx.h" int _GCD(int m, int n); int main(void) { int x, y; int GCD; int a, b; scanf_s("%d/%d", &x, &y); GCD = _GCD(x, y); a = x / GCD; b = y / GCD; printf("%d/%d", a, b); return 0; } int _GCD(int m, int n) { int d; for (;;) { if (n == 0) { break; } else { d = m%n; m = n; n = d; } } return m; } 3.逆波兰表达式 表达式 逆波兰表达式,它的语法规定,表达式必须以逆波兰表达式的方式给出

C++设计模式——模板方法模式

人走茶凉 提交于 2020-01-27 06:51:53
模板方法模式 在GOF的《设计模式:可复用面向对象软件的基础》一书中对模板方法模式是这样说的:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的接口即可重定义改算法的某些特定步骤。 我结合我在实际开发项目中的一个例子来说说这个模板方法模式吧。我们曾经做过一款产品,这个产品类似于一个云端的文件管理客户端。对于这样的一个客户端,由于其云端的服务器有三种,而每一种服务器之间的通信方式和对外公开的接口都是不是一致的,这就需要实现的客户端要屏蔽云端服务器和接口的差异性,而提供统一的操作界面,所以在实现这个客户端的同时,我们实现了一个框架,一个对于服务器和接口是通用的框架,比如就拿文件下载来说说。我们的实现大概如下: class FileOperation { public: bool DownloadFile(wchar_t *pSrc, wchar_t *pDest) { if (!pSrc || !pDest) return false; if (!DoBeginDownloadFile(pSrc, pDest)) return false; if (!DoDownloadFile(pSrc, pDest)) return false; if (!DoEndDownloadFile(pSrc, pDest)) return