一个很复杂的递归算法

q510181751 2014-08-02 04:45:39
问题是这样的,我有一个字符串叫zainaer,我要从里面匹配出最适合的一项,是根据某个规则来的,比如zainaer匹配出来的适合项是[zai,ai,za,na,er],我要怎么让他智能匹配出zainaer呢?而且这个方法每次传进去的值不同,比如传的是xiaocang,匹配出来的适合项就是[xi,ao,xiao,ca,can,cang,ang],想了半天没想出来特意来问问大家
...全文
251 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanghui0380 2014-08-06
  • 打赏
  • 举报
回复
参考算法“朴素贝叶斯分析”,这个应该是最符合描述的算法 当然简单点做,你也可以采用最大公共字串 或者 最小编辑距离 去做
l9920704 2014-08-06
  • 打赏
  • 举报
回复
这个是要做类似分词效果?
於黾 2014-08-04
  • 打赏
  • 举报
回复
xian就是先 xi'an才是西安 有长的不匹配短的. 就是这么简单.
於黾 2014-08-04
  • 打赏
  • 举报
回复
匹配最长的就好了啊,有长的为什么要匹配短的? 就是zainaer,先把za,zai匹配出来->根本不合理 匹配了za,后面的i根本无法再匹配,你匹配它干嘛. 如果我就是想输入za和i分开,需要加引号标明.
天殇月痕 2014-08-04
  • 打赏
  • 举报
回复
这个不是有个算法名称???求出最长子串····网上找下,已经有很多这样的算法!
legequ_2587391358 2014-08-04
  • 打赏
  • 举报
回复
经典递归算法 private void btn_Get_Click(object sender, EventArgs e) { int P_int_temp;//定义整型变量 if (int.TryParse(txt_value.Text, out P_int_temp))//为变量赋值 { lb_result.Text = //输出计算结果 "计算结果为:" + Get(P_int_temp).ToString(); } else { MessageBox.Show(//提示输入正确数值 "请输入正确的数值!","提示!"); } } // 递归算法 // <param name="i">参与计算的数值</param> // <returns>计算结果</returns> int Get(int i) { if (i <= 0) //判断数值是否小于0 return 0; //返回数值0 else if (i >= 0 && i <= 2) //判断位数是否大于等于0并且小于等于2 return 1; //返回数值1 else //如果不满足上述条件执行下面语句 return Get(i - 1) + Get(i - 2); //返回指定位数前两位数的和 }
q510181751 2014-08-03
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
比如说从字母c开始向后扫描,首先扫描2个字符看看有没有匹配的,然后扫描3个字符,然后4个,....直到没有。让后从c字母的下一个字母重新开始(这其实不用递归,就是简单的迭代。当然你要一定要说它是递归也行)。 这里的关键是数据结构。比如说ca是一颗词法树(子树)的顶层,它的下层有can、cai、cac等等。基于这样的数据结构进行搜索,你才能制定出“一旦查询3个字符失败,就不用再查询4个或者更多个字符了”的算法来。只有让早晚会失败的查询今早失败,才能让你的算法的运算速度快上几百倍。
我现在的算法是,先匹配出适合字符串头的,就是zainaer,先把za,zai匹配出来,然后字符串抹掉这个头,剩下的再按这个道理匹配,直到匹配出正确的为止
yongqiang000 2014-08-02
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
比如说从字母c开始向后扫描,首先扫描2个字符看看有没有匹配的,然后扫描3个字符,然后4个,....直到没有。让后从c字母的下一个字母重新开始(这其实不用递归,就是简单的迭代。当然你要一定要说它是递归也行)。 这里的关键是数据结构。比如说ca是一颗词法树(子树)的顶层,它的下层有can、cai、cac等等。基于这样的数据结构进行搜索,你才能制定出“一旦查询3个字符失败,就不用再查询4个或者更多个字符了”的算法来。只有让早晚会失败的查询今早失败,才能让你的算法的运算速度快上几百倍。
分析的很到位
bwangel 2014-08-02
  • 打赏
  • 举报
回复
没见过“复杂”的递归算法。递归和“复杂”扯不上关系。 恰恰相反,递归把复杂的问题解决得极其简单。
  • 打赏
  • 举报
回复
今早失败 --> 尽早失败
  • 打赏
  • 举报
回复
比如说从字母c开始向后扫描,首先扫描2个字符看看有没有匹配的,然后扫描3个字符,然后4个,....直到没有。让后从c字母的下一个字母重新开始(这其实不用递归,就是简单的迭代。当然你要一定要说它是递归也行)。 这里的关键是数据结构。比如说ca是一颗词法树(子树)的顶层,它的下层有can、cai、cac等等。基于这样的数据结构进行搜索,你才能制定出“一旦查询3个字符失败,就不用再查询4个或者更多个字符了”的算法来。只有让早晚会失败的查询今早失败,才能让你的算法的运算速度快上几百倍。
祥子爱游戏 2014-08-02
  • 打赏
  • 举报
回复
不知道你什么逻辑

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧