一个很复杂的递归算法

问题描述

问题是这样的,我有一个字符串叫zainaer,我要从里面匹配出最适合的一项,是根据某个规则来的,比如zainaer匹配出来的适合项是[zai,ai,za,na,er],我要怎么让他智能匹配出zainaer呢?而且这个方法每次传进去的值不同,比如传的是xiaocang,匹配出来的适合项就是[xi,ao,xiao,ca,can,cang,ang],想了半天没想出来特意来问问大家

解决方案

解决方案二:
不知道你什么逻辑
解决方案三:
比如说从字母c开始向后扫描,首先扫描2个字符看看有没有匹配的,然后扫描3个字符,然后4个,....直到没有。让后从c字母的下一个字母重新开始(这其实不用递归,就是简单的迭代。当然你要一定要说它是递归也行)。这里的关键是数据结构。比如说ca是一颗词法树(子树)的顶层,它的下层有can、cai、cac等等。基于这样的数据结构进行搜索,你才能制定出“一旦查询3个字符失败,就不用再查询4个或者更多个字符了”的算法来。只有让早晚会失败的查询今早失败,才能让你的算法的运算速度快上几百倍。
解决方案四:
今早失败-->尽早失败
解决方案五:
没见过“复杂”的递归算法。递归和“复杂”扯不上关系。恰恰相反,递归把复杂的问题解决得极其简单。
解决方案六:
引用2楼sp1234的回复:

比如说从字母c开始向后扫描,首先扫描2个字符看看有没有匹配的,然后扫描3个字符,然后4个,....直到没有。让后从c字母的下一个字母重新开始(这其实不用递归,就是简单的迭代。当然你要一定要说它是递归也行)。这里的关键是数据结构。比如说ca是一颗词法树(子树)的顶层,它的下层有can、cai、cac等等。基于这样的数据结构进行搜索,你才能制定出“一旦查询3个字符失败,就不用再查询4个或者更多个字符了”的算法来。只有让早晚会失败的查询今早失败,才能让你的算法的运算速度快上几百倍。

分析的很到位
解决方案七:
引用2楼sp1234的回复:

比如说从字母c开始向后扫描,首先扫描2个字符看看有没有匹配的,然后扫描3个字符,然后4个,....直到没有。让后从c字母的下一个字母重新开始(这其实不用递归,就是简单的迭代。当然你要一定要说它是递归也行)。这里的关键是数据结构。比如说ca是一颗词法树(子树)的顶层,它的下层有can、cai、cac等等。基于这样的数据结构进行搜索,你才能制定出“一旦查询3个字符失败,就不用再查询4个或者更多个字符了”的算法来。只有让早晚会失败的查询今早失败,才能让你的算法的运算速度快上几百倍。

我现在的算法是,先匹配出适合字符串头的,就是zainaer,先把za,zai匹配出来,然后字符串抹掉这个头,剩下的再按这个道理匹配,直到匹配出正确的为止
解决方案八:
经典递归算法privatevoidbtn_Get_Click(objectsender,EventArgse){intP_int_temp;//定义整型变量if(int.TryParse(txt_value.Text,outP_int_temp))//为变量赋值{lb_result.Text=//输出计算结果"计算结果为:"+Get(P_int_temp).ToString();}else{MessageBox.Show(//提示输入正确数值"请输入正确的数值!","提示!");}}//递归算法//<paramname="i">参与计算的数值</param>//<returns>计算结果</returns>intGet(inti){if(i<=0)//判断数值是否小于0return0;//返回数值0elseif(i>=0&&i<=2)//判断位数是否大于等于0并且小于等于2return1;//返回数值1else//如果不满足上述条件执行下面语句returnGet(i-1)+Get(i-2);//返回指定位数前两位数的和}
解决方案九:
这个不是有个算法名称???求出最长子串····网上找下,已经有很多这样的算法!
解决方案十:
匹配最长的就好了啊,有长的为什么要匹配短的?就是zainaer,先把za,zai匹配出来->根本不合理匹配了za,后面的i根本无法再匹配,你匹配它干嘛.如果我就是想输入za和i分开,需要加引号标明.
解决方案十一:
xian就是先xi'an才是西安有长的不匹配短的.就是这么简单.
解决方案十二:
这个是要做类似分词效果?
解决方案十三:
参考算法“朴素贝叶斯分析”,这个应该是最符合描述的算法当然简单点做,你也可以采用最大公共字串或者最小编辑距离去做

时间: 2024-11-01 03:25:31

一个很复杂的递归算法的相关文章

java-新手问一个很奇怪的问题

问题描述 新手问一个很奇怪的问题 class Demo { int num = 1; int add = 2; Demo() { num = 5; add = 6; } void show() { System.out.println("Fu num="+num+" Fu add="+add); } } class DemoA extends Demo { DemoA() { this.num = 3; this.add = 4; } void show() { S

字符串-一个很基础的返回值问题

问题描述 一个很基础的返回值问题 想要打印字符串数组,去掉中间的空格和Tab,并且删除全为空的行,哪里有错?谢谢. #include #define MAXLINE 1000 int getline(char line[], int maxline); int copy(char to[],char from[]); int main(){ int len; int max; char line[MAXLINE]; max=0; while ((len=getline(line,MAXLINE)

js-最近遇到一个很醉人的问题 我有两个项目 当我单独打开a项目的时候 ..

问题描述 最近遇到一个很醉人的问题 我有两个项目 当我单独打开a项目的时候 .. 最近遇到一个很醉人的问题 我有一个项目 分为两次打开 当我单独打开a项目的时候 里面的有个功能是缺失的关掉后 打开b项目那个功能又恢复了 a和b是相同的项目 他们的代码是一样的 更有意思的是当我两个项目都运行的时候 a和b的功能又全都恢复了 我关掉B 再次运行A 功能又缺失了 解决方案 我猜测应该去对比一下配置文件跟机器的运行环境的log文件

c语言 单片机-keil4开发中遇到的一个很奇怪的问题。

问题描述 keil4开发中遇到的一个很奇怪的问题. void main(){ // uchar test_i; const uchar timp_button=0xfF; //this value is that the button havn't sticked uchar n_delay; //delay unsigned char j=0; unsigned char i; intend_initiation(); //调用时间设定程序 while(1){ if((hour==alarm_

android,一个很简单的demo,一运行就出错,谁能帮我看看怎么回事。

问题描述 android,一个很简单的demo,一运行就出错,谁能帮我看看怎么回事. eclipse上也没有错误提示,怎么运行不了.安装好就提示停止运行. 文件 解决方案 看logcat的日志,或者进入调试模式运行,一步步调 解决方案二: 亲,绑定布局空间是要通过布局管理者来获取的,不然就是空指针错误.具体如下 解决方案三: 用调试模式调试吧,很方便的. 解决方案四: 要看log日志的啊.看日志才知道哪里出错了, 解决方案五: fragment控件初始化的问题吧 解决方案六: fragment控

绘图-MATLAB做一个很简单的图

问题描述 MATLAB做一个很简单的图 用matlab把下面这个表格实现,横坐标表示字种数,纵坐标表示百分比,具体怎么实现,多谢了 解决方案 可以呀,把plot改为bar 解决方案二: x=[500 1000 1500 2000 2500 3000 3500 4000];y=[78.53 91.92 96.48 98.39 99.24 99.63 99.82 99.92];plot(xy) 解决方案三: 想请你半个忙,如果可以加我QQ:815359755 解决方案四: x=[500 1000 1

ORACLE监听程序打开后自动关闭,一个很常见却很棘手的问题

问题描述 ORACLE监听程序打开后自动关闭,一个很常见却很棘手的问题 这个是打开监听时候报的错误. 命令行启动报错 现在主机名 listener.ora tnsnames.ora 问题出在哪里了? 我自己也在找办法解决,c币有限,只是希望遇到过类似问题的朋友分享下自己的经验.问题解决之后希望可以给大家带来便利

boolean-问一个很白的问题:关于if中Boolean判断的

问题描述 问一个很白的问题:关于if中Boolean判断的 Boolean flag;if(flag) i = 1;} else { i = 2;}我的flag的值是从别的类中传过来的,那么,当我flag=true时我的i=1还是i = 2:当我flag=false时i=1还是i= 2? 解决方案 一般 false 由0代替,true 是非0,有用1的,也有用-1的.所以flag=true时,是i=1: flag=false时,是i=2 解决方案二: C++中异常处理与if判断的问题判断一个整数

java-大神进来帮看看,一个很奇怪的问题

问题描述 大神进来帮看看,一个很奇怪的问题 代码如下,偶尔会出现数据库未更新的问题,但是看日志里面提交sql的日志已经打印出来,sql语句单独拿出来执行也没问题,我是真搞不明白了,大神求助啊! 解决方案 有可能是因为表字段的关联关系或者表字段的大小限制,是否非空,数值范围的限制 解决方案二: catch后,把exception输出到日志中,不就知道报的什么错了么? 插入失败的可能原因太多了