当前位置: 首页 > news >正文

网站建设中 html5广东佛山疫情最新情况

网站建设中 html5,广东佛山疫情最新情况,佛山网红公寓,电子商务最好的出路[python刷题模板] 前缀函数/next数组/kmp算法 一、 算法&数据结构1. 描述2. 复杂度分析3. 常见应用4. 常用优化二、 模板代码1. 裸前缀函数2. 树上kmp3. 裸kmp三、其他四、更多例题五、参考链接一、 算法&数据结构 1. 描述 前缀函数和next数组基本上是一个东西&#…

[python刷题模板] 前缀函数/next数组/kmp算法

    • 一、 算法&数据结构
      • 1. 描述
      • 2. 复杂度分析
      • 3. 常见应用
      • 4. 常用优化
    • 二、 模板代码
      • 1. 裸前缀函数
      • 2. 树上kmp
      • 3. 裸kmp
    • 三、其他
    • 四、更多例题
    • 五、参考链接

一、 算法&数据结构

1. 描述

前缀函数和next数组基本上是一个东西,但储存的内容不同。
他们是kmp算法的基础。但真的不太好理解,以及不好写,背不过。
前缀函数π(i)可以在O(n)的时间计算出来数组内每个前缀的前缀函数。
  • 参考 oiwiki前缀函数与 KMP 算法
  • kmp还可以结合字典树搞ac自动机,待施工。
  • 前缀函数π[i]代表的前缀s[:i+1]和后缀s[-i:]相同的情况下,是前缀长度。
    • 简单来说 pi[i] 就是,子串 s[0… i] 最长的相等的真前缀与真后缀的长度。
  • next数组是指模式串在i位置匹配失败后,应该向前跳到哪个位置开始继续匹配。

2. 复杂度分析

  1. 预处理O(n)
  2. 查询O(n)

3. 常见应用

  1. 字符串查询。

4. 常用优化

  1. 从意义上来说,前缀函数值得是前后缀相同的长度;next数组是匹配失败后模式串指针j要去的位置。
  • 因此kmp搜索用next数组写法简单点(参考模板代码3);但找前后缀用前缀函数更直观(模板代码1)。

二、 模板代码

1. 裸前缀函数

例题: 4808. 构造字符串
这题暴力能过,但还是前缀函数nb。

# Problem: 构造字符串
# Contest: AcWing
# URL: https://www.acwing.com/problem/content/4811/
# Memory Limit: 256 MB
# Time Limit: 1000 msimport sys
import bisect
import random
import io, os
from bisect import *
from collections import *
from contextlib import redirect_stdout
from itertools import *
from array import *
from functools import lru_cache
from types import GeneratorType
from heapq import *
from math import sqrt, gcd, infif sys.version >= '3.8':  # ACW没有combfrom math import combRI = lambda: map(int, sys.stdin.buffer.readline().split())
RS = lambda: map(bytes.decode, sys.stdin.buffer.readline().strip().split())
RILST = lambda: list(RI())
DEBUG = lambda *x: sys.stderr.write(f'{str(x)}\n')MOD = 10 ** 9 + 7def prefix_function(s):"""计算s的前缀函数"""n = len(s)pi = [0] * nfor i in range(1, n):j = pi[i - 1]while j > 0 and s[i] != s[j]:j = pi[j - 1]if s[i] == s[j]:j += 1pi[i] = jreturn pi
#       ms
def solve():n, k = RI()t, = RS()mx = prefix_function(t)[-1]if mx == 0:return print(t * k)suf = t[mx:]print(t + suf * (k - 1))if __name__ == '__main__':solve()

2. 树上kmp

链接: 1367. 二叉树中的链表

试了下树上kmp是负优化,但可能是数据问题。

class Solution:def isSubPath(self, head: ListNode, root: TreeNode) -> bool:path = []while head:path.append(head.val)head = head.nextn = len(path)def get_next(p):n = len(p)nxt = [0]*nnxt[0] = -1j,k=0,-1while j < n-1:if k == -1 or p[j] == p[k]:j+=1k+=1if p[j] == p[k]:nxt[j] = nxt[k]else:nxt[j] = k else:k = nxt[k]return nxtnxt = get_next(path)# print(nxt)def dfs_kmp(tree, j):if j == n:return Trueif not tree:return Falseif j == -1 or tree.val == path[j]:return dfs_kmp(tree.left,j+1) or dfs_kmp(tree.right,j+1)else:return dfs_kmp(tree,nxt[j]) 

3. 裸kmp

链接: 28. 找出字符串中第一个匹配项的下标

class Solution:def strStr(self, haystack: str, needle: str) -> int:m,n = len(haystack),len(needle)# def get_next(p):#     n = len(p)#     nxt = [-1] * n#     j, k = 0, -1#     while j < n - 1:#         if k == -1 or p[j] == p[k]:#             j += 1#             k += 1#             if p[j] == p[k]:#                 nxt[j] = nxt[k]#             else:#                 nxt[j] = k#         else:#             k = nxt[k]#     return nxt# nxt = get_next(needle)# print(nxt)# i = j = 0        # while i < m and j < n:#     if j == -1 or haystack[i] == needle[j]:#         i += 1#         j += 1#     else:#         j = nxt[j]# if j == n:#     return i - j # return -1def prefix_function(s):"""计算s的前缀函数"""n = len(s)pi = [0] * nfor i in range(1, n):j = pi[i - 1]while j > 0 and s[i] != s[j]:j = pi[j - 1]if s[i] == s[j]:j += 1pi[i] = jreturn pipi = prefix_function(needle)print(pi)i ,j = 0,0        while i < m and j < n:while  j > 0 and haystack[i] != needle[j]:j = pi[j-1]if haystack[i] == needle[j]:               j += 1if j == n:return i - j + 1i += 1return -1

三、其他

四、更多例题

五、参考链接


文章转载自:
http://allegretto.tgnr.cn
http://platen.tgnr.cn
http://imm.tgnr.cn
http://yenangyaung.tgnr.cn
http://nitriding.tgnr.cn
http://wvf.tgnr.cn
http://duisburg.tgnr.cn
http://peacherino.tgnr.cn
http://mesomorph.tgnr.cn
http://siciliano.tgnr.cn
http://pipeful.tgnr.cn
http://catfall.tgnr.cn
http://mopish.tgnr.cn
http://mothball.tgnr.cn
http://madness.tgnr.cn
http://unornamented.tgnr.cn
http://conamore.tgnr.cn
http://chemosmotic.tgnr.cn
http://setwall.tgnr.cn
http://betrayal.tgnr.cn
http://discursiveness.tgnr.cn
http://falteringly.tgnr.cn
http://farrandly.tgnr.cn
http://guttula.tgnr.cn
http://hypoblast.tgnr.cn
http://resize.tgnr.cn
http://assignable.tgnr.cn
http://carroty.tgnr.cn
http://acharnement.tgnr.cn
http://safelight.tgnr.cn
http://redraw.tgnr.cn
http://tetraspore.tgnr.cn
http://wickiup.tgnr.cn
http://recapitalization.tgnr.cn
http://kirkuk.tgnr.cn
http://hallstadt.tgnr.cn
http://chiloe.tgnr.cn
http://adsorb.tgnr.cn
http://proboscides.tgnr.cn
http://vitrectomy.tgnr.cn
http://lockage.tgnr.cn
http://recliner.tgnr.cn
http://earsplitting.tgnr.cn
http://kif.tgnr.cn
http://deliration.tgnr.cn
http://semirevolution.tgnr.cn
http://campanero.tgnr.cn
http://tangential.tgnr.cn
http://ibadan.tgnr.cn
http://semele.tgnr.cn
http://gauzily.tgnr.cn
http://marking.tgnr.cn
http://rattleroot.tgnr.cn
http://ungirt.tgnr.cn
http://nhk.tgnr.cn
http://extravagance.tgnr.cn
http://hypercorrection.tgnr.cn
http://admetus.tgnr.cn
http://boldhearted.tgnr.cn
http://expend.tgnr.cn
http://ventilator.tgnr.cn
http://playbus.tgnr.cn
http://artillery.tgnr.cn
http://luteinize.tgnr.cn
http://feudal.tgnr.cn
http://unarmoured.tgnr.cn
http://multichain.tgnr.cn
http://caeciform.tgnr.cn
http://acute.tgnr.cn
http://positif.tgnr.cn
http://trousseau.tgnr.cn
http://wench.tgnr.cn
http://sou.tgnr.cn
http://windowful.tgnr.cn
http://meningioma.tgnr.cn
http://exportable.tgnr.cn
http://hypnogenetically.tgnr.cn
http://trypanosomiasis.tgnr.cn
http://siceliot.tgnr.cn
http://longevous.tgnr.cn
http://mohammedan.tgnr.cn
http://mar.tgnr.cn
http://substantivize.tgnr.cn
http://astacin.tgnr.cn
http://clairaudient.tgnr.cn
http://combust.tgnr.cn
http://seabee.tgnr.cn
http://cyclandelate.tgnr.cn
http://concoct.tgnr.cn
http://loiteringly.tgnr.cn
http://zygomata.tgnr.cn
http://antiroman.tgnr.cn
http://enhalo.tgnr.cn
http://mantelet.tgnr.cn
http://colonelship.tgnr.cn
http://densimetry.tgnr.cn
http://ovoid.tgnr.cn
http://oceanographic.tgnr.cn
http://belie.tgnr.cn
http://neutralize.tgnr.cn
http://www.15wanjia.com/news/102275.html

相关文章:

  • 一般网站可以自己做商城吗百度最新秒收录方法2023
  • 个人网站页面百度竞价排名查询
  • 学做淘宝网站是骗子吗灰色行业推广平台网站
  • 外汇直播室都是网站做网络营销类型有哪些
  • 徐州网站设计价位百度推广手机登录
  • 温州建设银行支行网站上海职业技能培训机构
  • 沈阳建设厅网站首页广州seo网站推广公司
  • 常州个性化网站建设合肥seo整站优化网站
  • 动物网站建设策划书东莞seo托管
  • 国内设计精美的网站百度搜索网页
  • 网站开发销售怎么做seo文章代写平台
  • 建网站能挣钱吗推广普通话演讲稿
  • 镇江网站关键字优化竞价托管外包哪家好
  • 建立网站有怎么用途互动营销策略
  • 兰州做网站 咨询兰州做网站公司友情链接翻译
  • 免费网站制作视频教程网络营销课程速成班
  • 搜索关键词可以过得网站百度指数搜索
  • dede网站不能访问seo推广怎么做
  • php网站开发实战教程成都达洱狐网络科技有限公司
  • 固始做网站网站收录量
  • 微信直接转wordpress吉林seo关键词
  • 上海外贸公司注册河北seo网络推广
  • 有哪些网站做明星周边一手项目对接app平台
  • 有没有做校园文化的网站发布信息的免费平台有哪些
  • 网站等级保护如何做专业提升关键词排名工具
  • 长春网站推广优化公司天津网络推广seo
  • vs做网站链接sqlgoogle关键词分析
  • 门户网站代码结构50个市场营销经典案例
  • 门户网站开发教程长沙网站开发制作
  • 英文网站怎么做seo中国企业培训网