找回密码
 欢迎注册
查看: 13588|回复: 14

[求助] 一个字符串算法的优化

[复制链接]
发表于 2009-6-23 16:57:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
题目如下:一个如acdnddnddndkjjjjlilili的字符串,转化为这样的形式

ac dnd*3 k j*4 li*3

我目前用的方法是hash+回溯,如果字符串不长的话,还可以,比较长的话,效率就会很低。

不知道大家有什么好的办法没有
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-6-23 20:21:09 | 显示全部楼层
huffman编码 可以吗?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-6-23 23:25:20 | 显示全部楼层
匹配长度有无限制?
感觉楼上理解错意思了^^
不是要编码压缩,而是转换
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-6-24 09:39:38 | 显示全部楼层
to:gxqcn

感觉huffman有些问题,我觉得用后缀树似乎可以,但没有想清楚。

to:nlrte13

匹配长度无限制。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-6-24 12:21:46 | 显示全部楼层
无限长保持高效很困难,RK算法已经不错啦。不过用在你这里要构造阶梯哈希表,随着长度增长,效率无限下降……

评分

参与人数 1威望 +1 鲜花 +1 收起 理由
litaoye + 1 + 1 不错

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-6-24 12:43:49 | 显示全部楼层
我觉得只要先用hash表找到两个连续字母相同的位置,这个直接可以淘汰大部分情况.然后继续判断更大范围就可以了.
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-6-24 12:56:29 | 显示全部楼层
规则不太明白,是不是这样?
aaabbbaaabbb ->(a*3b*3)*2  

一层层的做比较好,即先扫描1位长重复的,然后2位长 。。。。 这样n常的字符串要扫描n/2遍
第k次维护一个k长的FIFO。

评分

参与人数 1威望 +1 鲜花 +1 收起 理由
litaoye + 1 + 1 有创造性

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-6-24 13:39:46 | 显示全部楼层
对,要的就是这样的效果,呵呵,不过这样逐个比较的话,效率会比较低。
另外还要确保aaaaaa => a*6,而不是a*2*3 或 a*3*2

规则不太明白,是不是这样?
aaabbbaaabbb ->(a*3b*3)*2  

一层层的做比较好,即先扫描1位长重复的,然后2位长 。。。。 这样n常的字符串要扫描n/2遍
第k次维护一个k长的FIFO。
shshsh_0510 发表于 2009-6-24 12:56
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-6-24 13:41:29 | 显示全部楼层
目前用的方法,和这个方法类似,不过在执行效率上,感觉还能够提高。

我觉得只要先用hash表找到两个连续字母相同的位置,这个直接可以淘汰大部分情况.然后继续判断更大范围就可以了.
mathe 发表于 2009-6-24 12:43
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2009-6-24 13:45:24 | 显示全部楼层
先扫描1位长的有时候会有问题,比如:

dvddvddvddvd

就会变为d(vd*2)*3vd 而不是dvd *4

规则不太明白,是不是这样?
aaabbbaaabbb ->(a*3b*3)*2  

一层层的做比较好,即先扫描1位长重复的,然后2位长 。。。。 这样n常的字符串要扫描n/2遍
第k次维护一个k长的FIFO。
shshsh_0510 发表于 2009-6-24 12:56
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-5-20 12:22 , Processed in 0.049482 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表