社区
数据结构与算法
帖子详情
求解一个字符串切分的算法问题
njucs
2008-11-21 04:03:04
现有一个包含100万个字符串(可能包含空格等各种字符,一行代表一个字符串)的数据库,给你一个新的字符串S,请将S进行切分,如果切分后的S的某一个子串在数据库中存在,则称S的该子串的部分被覆盖,要求:
1、切分后的S被覆盖率最高
2、在1的前提下,对S的切分数最少
请给出数据结构和算法,并分析时间复杂度。
大家有什么时间复杂度比较低的解决方案么?洗耳恭听~~~ :)
...全文
174
11
打赏
收藏
求解一个字符串切分的算法问题
现有一个包含100万个字符串(可能包含空格等各种字符,一行代表一个字符串)的数据库,给你一个新的字符串S,请将S进行切分,如果切分后的S的某一个子串在数据库中存在,则称S的该子串的部分被覆盖,要求: 1、切分后的S被覆盖率最高 2、在1的前提下,对S的切分数最少 请给出数据结构和算法,并分析时间复杂度。 大家有什么时间复杂度比较低的解决方案么?洗耳恭听~~~ :)
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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} }
}
给定
一个
字符串
,
切分
该
字符串
,使得到的子串都是回文
字符串
,计算最少的
切分
次数。
直接计算
一个
字符串
的
切分
次数,很难,可以试着缩小
问题
规模,从而发现规律。 假设给出的
字符串
可以用ps[0->iend]表示,ps[0],ps[1],...,ps[iend]都是字符。 min_count(i,j),表示将
字符串
ps[i->j]
切分
成若干回文...
leetcode1573. 分割
字符串
的方案数(Python3、c++)
给你
一个
二进制串 s (
一个
只包含 0 和 1 的
字符串
),我们可以将 s 分割成 3 个 非空
字符串
s1, s2, s3 (s1 + s2 + s3 = s)。 请你返回分割 s 的方案数,满足 s1,s2 和 s3 中字符 ‘1’ 的数目相同。 由于答案...
算法
64式 16、
字符串
算法
整理
1
算法
思想 2
字符串
系列 类别-编号 ... 请事先
一个
函数,把
字符串
中的每个空格替换成"%20"。例如 例如 输入: We are happy. 输出: We%20are%20happy. ...
【动态规划】
字符串
类型动态规划
字符类型动态规划
算法
回溯法轻松实现回文
字符串
切割
1、判断
一个
字符串
是否是回文串 2、回溯法实现 3、效率优化 四、总结 一、简介 回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并...
数据结构与算法
33,008
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章