返回信息流假定给出一堆字符串A = ["11111011","00000000","01010101","11110000",...........]
如果给定普通的字符串11110000,只要将A以set类型或者hash(dict)存储,就可以时间o(1)时间复杂度的快速查询
问题来了
如果给出字符串11110**0,其中*可以代表任意字符串,也就是 可以代表11110000,11110010,11110100,11110110,相当于简单的正则匹配,如何实现o(1)时间复杂度的快速查询呢?
如果与A中每个字符串eaqual对比,时间复杂度o(n),A如果很大的话,就是很糟糕的。
如果将所有*情况列举出来,*有M个,那么时间复杂度2^M,也不是特别的理想,这种方法也是我能想出来的最快速查询的方法了
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #93229同步于 2017/5/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖
【问题】求问o(1)时间复杂度的正则快速查询
a940100079
2017/5/18镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
题意理解为:*可以作为任何字符。
纯的字典树, 通过指针游走,不能预知, 那么该遍历走的点每个都得走,直到出错。
可以用一些预训练变量加快剪枝,比如每个节点存储后边所有路径的特征a的集合A,特征b的集合B...
然后根据搜索串接下来 带**特征的的集合,判断是否提前剪枝。
比如特征A=1个数,B=0个数,每次游走的一个地方,都能根据上一步A',B'得到这一步剩余串的A'.B',然后看与当前节点是否有匹配的希望。
有一定的道理
get
【 在 mathlove 的大作中提到: 】
: 题意理解为:*可以作为任何字符。
: 纯的字典树, 通过指针游走,不能预知, 那么该遍历走的点每个都得走,直到出错。
: 可以用一些预训练变量加快剪枝,比如每个节点存储后边所有路径的特征a的集合A,特征b的集合B...
: ...................