码迷,mamicode.com
首页 > 其他好文 > 详细

多项式简单应用

时间:2020-02-07 01:26:58      阅读:74      评论:0      收藏:0      [点我收藏+]

标签:开始   class   数组   礼物   problem   四种   splay   max   lin   

\(\displaystyle\sum_{i=0}^na_i \cdot b_i\)

对于求\(\displaystyle\sum_{i=0}^na_i \cdot b_i\) 把b数组翻转一下, 等价于求\(\displaystyle\sum_{i=0}^na_i \cdot b_{n-i}\), 这不就是一个卷积嘛, 时间复杂度\(\Theta(nlog_n)\)

你可能会说时间复杂度变得更差了,还带了大常数, 别急, 它在求解许多个乘机时有妙用

如求
\[ Max_{j=0}\{\displaystyle\sum_{i=j}^{j+n-1}a_i \cdot b_{i-j} \} \]
其中a和b是两个数组, b数组的长度是n, 你想求从a的每一个位置开始,与b按位相乘的最大值

如果按照上面的做法, 设:
\[ c_j = \displaystyle\sum_{i=j-n+1}^{j}a_i \cdot b_{i-(j-n+1)} \]
所求就是c数组n以上的项的最大值, 到这已经可以解决一些题目了, 如礼物

如果应用到字符串问题上呢?

有字符串s和t, 假设他们只有四种字符, 求t在s中所有出现的位置

妈妈我会KMP, KMP显然可以\(O(n)\)解决,但是它太优秀了,所以我们要一个\(\Theta(nlog_n)\)的算法

一个一个字符考虑, 比如字符c,温两个多项式,在原串中此位置是否为c, 是为1, 否为0

对于从某个位置开始匹配, 如果按位相乘\(\displaystyle\sum_{i=0}^na_i \cdot b_i\) 所得不就是b和a有多少位置都是c嘛, 如果枚举所有字符,并将答案相加,如果恰好等于n,那么说明完全匹配上了

这个是可以用我们上面提到的多项式优化的

题目:

多项式简单应用

标签:开始   class   数组   礼物   problem   四种   splay   max   lin   

原文地址:https://www.cnblogs.com/Hs-black/p/12271688.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!