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

怎样做二维码链接到网站上百度投票人气排行榜入口

怎样做二维码链接到网站上,百度投票人气排行榜入口,备案号怎么添加到网站,高端大气公司名称滚动hash 滚动哈希(rolling hash)也叫 Rabin-Karp 字符串哈希算法,它是将某个字符串看成某个进制下的整数,并将其对应的十进制整数作为hash值。 滚动hash算法的推导 假设有一个长度为n的数组a[0],a[1],a[2],…a[n-1]&#xff0…

滚动hash

滚动哈希(rolling hash)也叫 Rabin-Karp 字符串哈希算法,它是将某个字符串看成某个进制下的整数,并将其对应的十进制整数作为hash值。

滚动hash算法的推导

假设有一个长度为n的数组a[0],a[1],a[2],…a[n-1],数组中的最大值为ma, 我们选取进制k满足k>ma,将数组a看成是n位k进制整数,那么其对应的10进制整数为:

∑ i = 0 n − 1 a [ i ] ∗ k n − 1 − i \sum_{i=0}^{n-1} a[i] * k^{n-1-i} i=0n1a[i]kn1i

这样一来,在子数组长度固定的前提下,给定进制 k,子数组与其十进制值满足「一一对应」的关系,即不会有两个不同的子数组,它们的十进制值相同。因此滚动哈希得到的哈希值是可以表示原子数组的。

滚动哈希的一大优势在于,如果我们需要求出一个数组中长度为 len 的所有子数组的哈希值,需要的时间仅为线性,即如果我们已经计算出数组中以 j 开始的子数组的哈希值:

h a s h ( j ) = ∑ i = 0 l e n − 1 a [ j + i ] ∗ k l e n − 1 − i hash(j) = \sum_{i=0}^{len-1} a[j+i] * k^{len-1-i} hash(j)=i=0len1a[j+i]klen1i

那么要计算以 j+1 开始的子数组的哈希值,我们通过公式推导:

h a s h ( j + 1 ) = ∑ i = 0 l e n − 1 a [ j + 1 + i ] ∗ k l e n − 1 − i = ∑ i = 1 l e n a [ j + i ] ∗ k l e n − i = k ( ∑ i = 1 l e n a [ j + i ] ∗ k l e n − 1 − i ) = k ( h a s h ( j ) − a [ j ] ∗ k l e n − 1 + a [ j + l e n ] ∗ k − 1 ) = k ∗ h a s h ( j ) − a [ j ] ∗ k l e n + a [ j + l e n ] \begin{aligned} hash(j+1) &= \sum_{i=0}^{len-1} a[j+1+i] * k^{len-1-i} \\ &= \sum_{i=1}^{len} a[j+i]*k^{len-i} \\ &= k(\sum_{i=1}^{len} a[j+i]*k^{len-1-i}) \\ &= k(hash(j) - a[j]*k^{len-1} + a[j+len]*k^{-1}) \\ &= k*hash(j) - a[j]*k^{len} + a[j+len] \end{aligned} hash(j+1)=i=0len1a[j+1+i]klen1i=i=1lena[j+i]kleni=k(i=1lena[j+i]klen1i)=k(hash(j)a[j]klen1+a[j+len]k1)=khash(j)a[j]klen+a[j+len]

就可以在 ϕ ( 1 ) \phi(1) ϕ(1)的时间内得到该值。

利用滚动hash算法计算最长公共子路径的代码示例如下:

请添加图片描述

上述代码的执行效率较低,以下代码通过二分法优化,可以有效降低代码的时间复杂度:

def longest_common_subpath_2(n: int, paths: List[List[int]]) -> int:mod = (10 ** 9 + 7) * (10 ** 9 + 9)base = 10 ** 6 + 3# get min len of pathsmin_len = len(min(paths, key=lambda x: len(x)))def check(x: int) -> bool:k = pow(base, x, mod)hash_values = defaultdict(int)for path in paths:cnt = Counter()hash_value = 0for i in range(x):hash_value = (hash_value * base + path[i]) % modcnt[hash_value] += 1hash_values[hash_value] += 1for i in range(x, len(path)):hash_value = (hash_value * base + path[i] - path[i - x] * k) % modif hash_value not in cnt:cnt[hash_value] += 1hash_values[hash_value] += 1return max(hash_values.values(), default=0) == len(paths)l, r, ans = 1, min_len, 0while l <= r:mid = (l + r) >> 1if check(mid):ans = midl = mid + 1else:r = mid - 1return ans
http://www.dtcms.com/wzjs/131669.html

相关文章:

  • 乒乓球网站建设目标小程序开发教程
  • 网站公安备案 工信备案本周新闻热点
  • 无锡营销型网站制作东莞企业推广网站制作
  • 网络运营平台济南网站优化排名推广
  • 江西省建设厅教育网站上查询郑州网站运营
  • 网站建设优化安徽百度推广投诉中心
  • 企业商标图片大全班级优化大师是干什么用的
  • 做网站要招什么样的程序员电脑培训网上免费课程
  • b站做视频哪个网站收入怎么做网页
  • 深圳有哪些物流公司windows优化大师绿色版
  • 伤豆丁文库网站开发淘宝优秀软文范例100字
  • 如何开发cms网站网站排名优化专业定制
  • qq网站官网网站服务器一年的费用
  • 建设厅网站上保存键看不见网页模板建站系统
  • 纵横互联 武汉网站建设网络营销的手段包括
  • 大兴网站建设报价广州市口碑seo推广
  • 网站页面设计合同seo百度推广
  • 注册建筑公司宁波seo资源
  • 做英文网站公司百度下载应用
  • 公司做网站需要什么资质优化大师是什么意思
  • 有哪些做产品产业链分析的网站服装营销方式和手段
  • 过年做啥网站能致富百度推销广告一年多少钱
  • 做照片书网站好百度网站怎么做
  • 网站设计标题中国互联网公司排名
  • b2b b2c网站的介绍太原seo排名
  • 电子商务系统网站设计客服外包平台
  • 淘宝客网站必须备案吗湖南百度推广
  • 武汉光谷做网站价格百度客服中心人工在线电话
  • 在别人的网站做域名跳转seo网站排名优化教程
  • 官方网站建设意义环球资源网站网址