社区
数据结构与算法
帖子详情
求解一个字符串切分的算法问题
njucs
2008-11-21 04:03:04
现有一个包含100万个字符串(可能包含空格等各种字符,一行代表一个字符串)的数据库,给你一个新的字符串S,请将S进行切分,如果切分后的S的某一个子串在数据库中存在,则称S的该子串的部分被覆盖,要求:
1、切分后的S被覆盖率最高
2、在1的前提下,对S的切分数最少
请给出数据结构和算法,并分析时间复杂度。
大家有什么时间复杂度比较低的解决方案么?洗耳恭听~~~ :)
...全文
420
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} }
}
【备战秋招】每日一题:2023.3.23-腾讯音乐笔试题(第二题)-划分
字符串
文章讲述了程序员塔子哥设计的一种
算法
,通过将声音转录成
字符串
并计算权值,将
字符串
切分
成权值最小的多个子串,以过滤噪声。给出了
一个
编程
问题
实例,要求
求解
给定
字符串
和整数k下的最优子串权值
切分
。,
leetcode140. 单词拆分 II
这篇博客探讨了
一个
字符串
切分
的
问题
,其中目标是在给定的非空
字符串
s中添加空格,使得每个
切分
后的单词都在词典wordDict内。通过回溯
算法
进行
求解
,需要考虑剪枝策略以避免重复计算。博客提供了具体的示例和解决方案,并展示了如何在回溯过程中使用memo数组来优化性能。
Codeforces 176B (线性DP+
字符串
)
本文探讨了
一个
独特的
字符串
变形
问题
,即通过特定的
切分
和颠倒操作,
求解
与目标串匹配的变形方案数量。通过设计高效的线性DP
算法
,实现了对变形过程的精确计数,并详细解释了
算法
背后的逻辑。文章还提供了代码实现和验证结果,旨在为读者提供深入理解
字符串
操作和动态规划技巧的实例。
遗传
算法
求解
0/1背包
问题
本文介绍了遗传
算法
和背包
问题
。遗传
算法
是解决最优化
问题
的搜索
算法
,通过编码、选择、交叉和突变等操作寻找最优解。背包
问题
是典型的组合优化
问题
,传统采用动态规划
求解
。文中详细阐述了用遗传
算法
求解
0/1背包
问题
的步骤,并通过多个例题展示其效果,还提及可用于
求解
TSP
问题
。
遗传
算法
求解
TSP
问题
该博客探讨了旅行商
问题
(TSP)的定义和解法,重点介绍了使用遗传
算法
来解决这一NP完全
问题
。文章详细阐述了遗传
算法
的基本原理、实现方法,并提供了
一个
实例分析,包括案例描述、模型设定、
算法
流程。最后展示了遗传
算法
求解
TSP的最短距离和时间,以及MATLAB代码示例。
数据结构与算法
33,025
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章