社区
数据结构与算法
帖子详情
求解一个字符串切分的算法问题
njucs
2008-11-21 04:03:04
现有一个包含100万个字符串(可能包含空格等各种字符,一行代表一个字符串)的数据库,给你一个新的字符串S,请将S进行切分,如果切分后的S的某一个子串在数据库中存在,则称S的该子串的部分被覆盖,要求:
1、切分后的S被覆盖率最高
2、在1的前提下,对S的切分数最少
请给出数据结构和算法,并分析时间复杂度。
大家有什么时间复杂度比较低的解决方案么?洗耳恭听~~~ :)
...全文
391
11
打赏
收藏
求解一个字符串切分的算法问题
现有一个包含100万个字符串(可能包含空格等各种字符,一行代表一个字符串)的数据库,给你一个新的字符串S,请将S进行切分,如果切分后的S的某一个子串在数据库中存在,则称S的该子串的部分被覆盖,要求: 1、切分后的S被覆盖率最高 2、在1的前提下,对S的切分数最少 请给出数据结构和算法,并分析时间复杂度。 大家有什么时间复杂度比较低的解决方案么?洗耳恭听~~~ :)
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
njucs
2008-11-24
打赏
举报
回复
[Quote=引用 9 楼 hityct1 的回复:]
请解释一下 覆盖率 吧?怎么计算的?不像是 词频。
[/Quote]
假设现在数据库中有以下短语:
A
B
C
E
F
G
ABC
CDE
EFG
那么,对句子ABCDEFG的切分应该就是:
A B CDE F G (虽然切分次数多,但所有词语都已经被覆盖:覆盖率100%)
而不是
ABC D EFG (D没有被覆盖:覆盖率6/7)
njucs
2008-11-22
打赏
举报
回复
[Quote=引用 5 楼 litaoye 的回复:]
感觉就像在做搜索的分词,一般都是找最长的匹配,很少有lz这样找最大覆盖的。
[/Quote]
1、最大覆盖
2、在1的前提下切分最少
3、在1、2的前提下选择最长匹配
woshiwoxinheqiu
2008-11-22
打赏
举报
回复
完全不懂~~~~~
不过会学习的,现在帮忙顶~~~~
hityct1
2008-11-22
打赏
举报
回复
请解释一下 覆盖率 吧?怎么计算的?不像是 词频。
njucs
2008-11-22
打赏
举报
回复
[Quote=引用 7 楼 hityct1 的回复:]
你是在做分词吗?
[/Quote]
很像是分词,但并不完全一样吧
hityct1
2008-11-22
打赏
举报
回复
你是在做分词吗?
绿色夹克衫
2008-11-21
打赏
举报
回复
感觉就像在做搜索的分词,一般都是找最长的匹配,很少有lz这样找最大覆盖的。
大王派我去巡山
2008-11-21
打赏
举报
回复
同时要求最小切分很容易,只要在上面的算法中稍加调整,当覆盖率一样的时候优先取分割数少的方案就可以。
njucs
2008-11-21
打赏
举报
回复
这样是可以求出最大覆盖率,但是要从最大覆盖率的所有情况中选择切分数最小的切法,应该还有不少困难
我考虑是不是可以转化为图的算法,比如在一个连通图中,最佳的切分应该就是起点到终点的最短路径吧?
具体的还没有考虑清楚,不过这样复杂度应该还是很高,而且前期的预处理工作需要耗费大量时间。
[Quote=引用 1 楼 dlyme 的回复:]
先将这一百万字符串顺序排列。
假设S的长度为n,我们用dp(i)来表示从第i个字符到第n个字符这段子串中被覆盖的最大字符数。
下面来看状态转移方程如何处理:
首先来看S[i~n]这个子串中有没有与数据库中匹配起来的“前缀”;
如果没有
{
dp[i]=dp[i+1];
}
如果有(假设满足匹配的“前缀”共有k个,用T[j]来表示,1 <=j <=k)
{
dp[i]=max{ dp[i+1],max{sizeof(T[j])+dp(i+sizeof(T[j])),这里1 <=…
[/Quote]
qap22
2008-11-21
打赏
举报
回复
帮顶
大王派我去巡山
2008-11-21
打赏
举报
回复
先将这一百万字符串顺序排列。
假设S的长度为n,我们用dp(i)来表示从
第i个字符到第n个字符
这段子串中被覆盖的最大字符数。
下面来看状态转移方程如何处理:
首先来看S[i~n]这个子串中有没有与数据库中匹配起来的“前缀”;
如果没有
{
dp[i]=dp[i+1];
}
如果有(假设满足匹配的“前缀”共有k个,用T[j]来表示,1<=j<=k)
{
dp[i]=max{ dp[i+1],max{sizeof(T[j])+dp(i+sizeof(T[j])),这里1<=j<=k} }
}
算法
大全(全)
7. **
字符串
处理**:
字符串
在许多实际
问题
中扮演着重要角色,KMP
算法
、Rabin-Karp滚动哈希和Boyer-Moore
算法
是常用的
字符串
匹配
算法
。 8. **排序和查找
算法
的优化**:如快速排序的三向
切分
、归并排序的优化、Trie树...
ACM
算法
题集 基础
算法
教案
Z-Algorithm和Knuth-Morris-Pratt(KMP)用于
求解
字符串
的最长前后缀。 六、数据结构 包括线性结构(数组、链表、队列、栈)、树结构(二叉树、平衡树AVL、红黑树、B树、B+树)、图结构以及哈希表等。理解它们的...
iOS 面试必看
算法
题
4. **
字符串
处理**:在iOS开发中,
字符串
操作很常见,如KMP
算法
用于
字符串
匹配,Rabin-Karp或Boyer-Moore
算法
用于高效搜索。 5. **图论与网络流**:在设计复杂系统或优化
问题
时,图论
算法
(如最短路径Dijkstra
算法
...
动态规划(
算法
)-代码
- **最小编辑距离**:计算将
一个
字符串
转换成另
一个
字符串
所需的最少操作次数(插入、删除、替换)。 - **剪枝树
问题
**:如矩阵链乘法,寻找计算多个矩阵乘积的最小代价路径。 3. **
算法
实现**: - **自底向上**...
算法
设计与分析——清华大学王晓东
8. **
字符串
处理**:KMP
算法
、Rabin-Karp滚动哈希、Boyer-Moore
算法
等,用于高效地进行模式匹配。 9. **排序
算法
优化**:包括快速排序的三向
切分
、归并排序的改进、堆排序等,针对不同场景优化
算法
性能。 10. **...
数据结构与算法
33,027
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章