免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3342 | 回复: 10
打印 上一主题 下一主题

[算法] 超难算法问题,谁能帮我解决 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-12-19 23:14 |只看该作者 |倒序浏览
我有一个非常长的数值,大概几千位,要与另外一个数值比较,另外一个数值很短,也就几位。我希望能够知道第2个数值是否是第一个数值的子集。举个短点的例子,比如第一个数为1234567890,第二个是456,这样就匹配上了。而如果是543,就不能匹配上。如果在C下边就好办了,问题是我要把第一个数值放到数据库中,不可能放那么大的数,所以我希望有种算法把几千个数值变为几十个能放到数据库中,然后具有一定的特征,然后再与第二值个比较时能够知道它是否是原来那几千位里边的数值。
谢谢!

论坛徽章:
0
2 [报告]
发表于 2006-12-19 23:17 |只看该作者
字符串匹配?

论坛徽章:
0
3 [报告]
发表于 2006-12-19 23:20 |只看该作者
在数据库里能把那个大数以文本的格式存放吗?

论坛徽章:
0
4 [报告]
发表于 2006-12-19 23:22 |只看该作者
你完全能用 varchar 来储存这个数据( 反正已经大到没有直接办法进行数值运算了, 当字符串多好 )
然后你用WHERE XXX LIKE '%456%' 去匹配这个字符串就 OK 了.
varchar 一般都能轻松到 8K ^_^ 再不行就大对象吧

论坛徽章:
0
5 [报告]
发表于 2006-12-20 11:56 |只看该作者
存储随便怎么截取分段存就好了
匹配用kmp算法...

论坛徽章:
0
6 [报告]
发表于 2006-12-20 13:18 |只看该作者
en ,谢谢,我想也只能这样了,那种数学算法好像没有。比如md5,但不能反解析。
但varchar类型可能不行,就用text类型吧,然后做匹配。

论坛徽章:
0
7 [报告]
发表于 2007-04-30 12:58 |只看该作者
很经典的算法KMP就可以了。

论坛徽章:
0
8 [报告]
发表于 2007-05-01 12:58 |只看该作者
对于这种问题,,前面几个兄台说得都是很对的。。。
不过,也存在更快的方法。。。。

现在情况是在N长串中搜M小串。。。。。N很大,M很小。。。

用KMP复杂度为O(N)。。。

如果你用Suffix Tree来对N长串做一个预处理,可以得到一个时间复杂度为O(M)的算法。。。
也就是说~在长度为1亿的文章中想知道'小楼一夜听春雨'这句话有没有出现,只需要比较strlen("小楼一夜听春雨")次就可以了。。。。

很诱人吧????

DNA科学研究领域很多人用的就是这个方法~
GKL 该用户已被删除
9 [报告]
发表于 2007-05-01 13:24 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
10 [报告]
发表于 2007-05-01 13:36 |只看该作者
原帖由 uppet 于 5/1/07 12:58 发表
对于这种问题,,前面几个兄台说得都是很对的。。。
不过,也存在更快的方法。。。。

现在情况是在N长串中搜M小串。。。。。N很大,M很小。。。

用KMP复杂度为O(N)。。。

如果你用Suffix Tree来对N长串做 ...


这个东西常数很大... 海量数据而且多查询时的确得用这玩意了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP