POJ 3461 字符串匹配(KMP / 哈希(有推导))

文章目录

    • 1. 题目
      • 1.1 题目链接
      • 1.2 题目大意
    • 2. Accepted代码
      • 2.1 KMP解法
      • 2.2 哈希法(有推导过程)

1. 题目

1.1 题目链接

http://poj.org/problem?id=3461
类似题目:LeetCode 30. 串联所有单词的子串(字符串哈希)

1.2 题目大意

模式串在主串中出现过几次。
在这里插入图片描述

2. Accepted代码

2.1 KMP解法

在这里插入图片描述

#include <stdio.h>
#include <iostream>
#include <cstring>
int next[10001];
char a[1000001], b[10001];
void calNexts(char *b, int m, int *next)
{next[0] = -1;int j = 0, k = -1;while(j < m){if(k == -1 || b[j] == b[k]){j++;k++;next[j] = k;}elsek = next[k];}
}
int str_kmp(char *a, int n, char *b, int m)
{calNexts(b, m, next);int i = 0, j = 0, times = 0;while(i < n && j < m){if(j == -1 || a[i] == b[j]){i++;j++;}else{j = next[j];}if(j == m){times++;j = next[j];}}return times;
}
int main()
{int count;std::cin >> count;while(count--){scanf("%s",&b);scanf("%s",&a);printf("%d\n",str_kmp(&a[0], strlen(a), &b[0], strlen(b)));}return 0;
}

2.2 哈希法(有推导过程)

在这里插入图片描述
在这里插入图片描述
参考别人的哈希函数,哈希值的求法很犀利
自己推导的过程如下:
在这里插入图片描述

/*** @description: poj 3461 字符串匹配,哈希法* @author: michael ming* @date: 2019/6/26 21:59* @modified by: */
#include <stdio.h>
#include <iostream>
#include <cstring>
#include <cmath>
#define K 25    //K大于等于字符集数 k>=25
typedef unsigned long long ull;
char a[1000001], b[10001];
ull ha[1000001];
ull powk[10001];//存储K的幂值
using namespace std;
void fillpowk(int m)
{powk[0] = 1;for(int i = 1; i <= m; ++i)powk[i] = powk[i-1]*K;
}
ull hashf(int m, char *str)
{ull value = 0;for(int i = 0; i < m; ++i)value = value * K + str[i];return value;
}
int str_RK(char *a, int n, char *b, int m)//a是主串,b是模式串
{fillpowk(m);int i, times = 0;ull hash_val, value = 0;value = hashf(m,b); //计算模式串的hash值valueha[0] = ull(a[0]);for(i = 1; i < n; ++i)ha[i] = ha[i-1] * K + a[i];for(i = 0; i < n-m+1; ++i)//最多n-m+1次比较{if(i == 0)hash_val = hashf(m,a);elsehash_val = ha[i+m-1] - ha[i-1]*powk[m];//这个公式可以自己推导一下if(hash_val == value){//如果子串哈希值等于模式串的,匹配成功(该哈希无冲突)times++;}}return times;
}
int main()
{int count;std::cin >> count;while(count--){scanf("%s",&b);scanf("%s",&a);printf("%d\n",str_RK(&a[0], strlen(a), &b[0], strlen(b)));}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/480189.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

莫比乌斯:百度凤巢下一代广告召回系统

星标/置顶小屋&#xff0c;带你解锁最萌最前沿的NLP、搜索与推荐技术文 | 江城编 | 夕小瑶今天聊聊百度在最顶级的数据挖掘会议KDD2019的计算广告track上提出的query-ad匹配模型——莫比乌斯&#xff08;MOBIUS&#xff09;。这也是百度凤巢下一代广告召回系统的内部代号&#…

当知识图谱遇上推荐系统之MKR模型(论文笔记三)

Multi-Task Feature Learning for Knowledge Graph Enhanced Recommendation 类别&#xff1a;交替学习 将知识图谱特征学习和推荐算法视为两个分离但又相关的任务&#xff0c;使用多任务学习的框架进行交替学习。 1、背景 MKR是一个通用的、端对端的深度推荐框架&#xf…

关于话题演化关系网络生成的路线思考:从话题聚类到话题网络展示

话题演化关系网络生成&#xff0c;是实现事件演化追踪的一个重要方法。通过对文本话题进行聚类、内容处理、话题演化关联、话题演化网络的展示&#xff0c;能够在一定程度上为用户揭示出一个事件发展的情况。本文就笔者对该方向的实现路线思考进行总结&#xff0c;分享给大家。…

综述 | 事件抽取及推理 (下)

本文转载在公众号&#xff1a;知识工场 。 上篇事件抽取及推理的推文已经介绍了事件抽取的基本方法&#xff0c;本篇主要介绍事件推理的相关工作。就目前来看&#xff0c;事件方向相关的研究还是以事件抽取为主流任务&#xff0c;当前大多都是在模型的框架和优化方面进行研究。…

Redis系列教程(三):如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题

Java相关的面试都会问到缓存的问题&#xff1a;史上最全Redis面试49题&#xff08;含答案&#xff09;:哨兵复制事务集群持久化等&#xff0c;除此之外还会问到缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等不常见的问题&#xff0c;但却是非常重要的问题&#xff0c;今…

随机森林:提供银行精准营销解决方案

原文地址&#xff1a;https://blog.csdn.net/weixin_34233679/article/details/88480912 本例是根据科赛网练习赛进行练手&#xff0c;学习巩固一下随机森林建模以及应用。 赛题描述本练习赛的数据&#xff0c;选自UCI机器学习库中的「银行营销数据集(Bank Marketing Data Set)…

谁说2021届秋招算法岗一定要灰飞烟灭啦?

没错&#xff0c;这是一碗鸡汤&#xff0c;希望肝完这碗鸡汤的师弟师妹们就不要过度焦虑啦&#xff5e;理性上车&#xff0c;理性下车&#xff0c;希望萌新们都能遇到最适合自己的坑位2014年末入坑AI&#xff0c;一路见证了AI行业的快速起飞、爆炸、焦虑和冷却。小夕前几天在知…

论文浅尝 | 基于深度强化学习的远程监督数据集的降噪

论文链接&#xff1a;https://arxiv.org/pdf/1805.09927.pdf来源&#xff1a;ACL2018Motivation&#xff1a;远程监督是以一种生成关系抽取训练样本的方法&#xff0c;无需人工标注数据。但是远程监督引入了噪音&#xff0c;即存在很多的假正例。本文的出发点非常简单&#xff…

字符串匹配算法(AC自动机 Aho-Corasick)

文章目录1. 多模式串匹配2. 经典多模式串匹配--AC自动机2.1 AC自动机构建2.2 在AC自动机上匹配主串2.3 复杂度分析3. python包1. 多模式串匹配 前面学的BF、RK、BM、KMP都是单模式串匹配算法&#xff08;一个模式串&#xff0c;一个主串&#xff09;多模式串匹配&#xff0c;即…

Redis系列教程(五):Redis哨兵、复制、集群的设计原理,以及区别

前一篇文章高并发架构系列&#xff1a;Redis为什么是单线程、及高并发快的3大原因详解谈了Redis高并发快的3个原因&#xff0c;本篇主要谈Redis的高可用&#xff0c;两篇合起来就可以把redis的高并发和高可用搞清楚了。 谈到Redis服务器的高可用&#xff0c;如何保证备份的机器…

论文浅尝 | 区分概念和实例的知识图谱嵌入方法

链接&#xff1a;https://arxiv.org/pdf/1811.04588.pdf知识图谱的表示学习最近几年被广泛研究&#xff0c;表示学习的结果对知识图谱补全和信息抽取都有很大帮助。本文提出了一种新的区分概念和实例的知识图谱表示学习方法&#xff0c;将上下位关系与普通的关系做了区分&#…

写在校招季,谈谈机器学习岗的Offer选择问题

星标/置顶小屋&#xff0c;带你解锁最萌最前沿的NLP、搜索与推荐技术文 | 吴海波 现在校招开始的越来越早&#xff0c;今年的实习生招聘还是异常火爆&#xff0c;简历一堆&#xff0c;而且是越来越没有区分度&#xff0c;以前面个xgboost的论文细节&#xff0c;就能区分很多人&…

Redis系列教程(六):Redis缓存和MySQL数据一致性方案详解

需求起因 在高并发的业务场景下&#xff0c;数据库大多数情况都是用户并发访问最薄弱的环节。所以&#xff0c;就需要使用redis做一个缓冲操作&#xff0c;让请求先访问到redis&#xff0c;而不是直接访问MySQL等数据库。 这个业务场景&#xff0c;主要是解决读数据从Redis缓存…

贪心算法(Greedy Algorithm)之霍夫曼编码

文章目录1. 贪心算法2. 应用2.1 找零钱2.2 区间覆盖2.3 霍夫曼编码霍夫曼编码完整代码1. 贪心算法 我们希望在一定的限制条件下&#xff0c;获得一个最优解每次都在当前的标准下做出当下最优决策&#xff08;整体不一定最优&#xff09;&#xff0c;做出的决策不可以后悔&…

数据结构中基本查找算法总结

原文地址&#xff1a;https://www.cnblogs.com/xuzhp/p/4638937.html 基本查找算法 一、查找的基本概念 查找&#xff0c;也可称检索&#xff0c;是在大量的数据元素中找到某个特定的数据元素而进行的工作。查找是一种操作。 二、顺序查找 针对无序序列的一种最简单的查找方式…

领域应用 | 大众点评搜索基于知识图谱的深度学习排序实践

本文转载自公众号&#xff1a;美团技术团队。 本文介绍了大众点评搜索核心排序层模型的演化之路&#xff0c;包括结合知识图谱信息构建适合搜索场景的Listwise深度学习排序模型LambdaDNN以及特征工程实践和相关工具建设。1. 引言挑战与思路搜索是大众点评App上用户进行信息查…

KDD2020 | 揭秘Facebook搜索中的语义检索技术

星标/置顶小屋&#xff0c;带你解锁最萌最前沿的NLP、搜索与推荐技术文 | 江城编 | 可盐可甜兔子酱导读&#xff1a;今天分享一下 Facebook 发表在 KDD2020 的一篇关于社交网络搜索中的 embedding 检索问题的工作&#xff0c;干货很多&#xff0c;推荐一读。论文题目&#xff1…

Redis系列教程(八):分布式锁的由来、及Redis分布式锁的实现详解

在很多场景中&#xff0c;我们为了保证数据的最终一致性&#xff0c;需要很多的技术方案来支持&#xff0c;比如分布式事务、分布式锁等。那具体什么是分布式锁&#xff0c;分布式锁应用在哪些业务场景、如何来实现分布式锁呢&#xff1f;今天来探讨分布式锁这个话题。 什么是…

技术交流:老刘说NLP技术公众号开通

我有一个念想&#xff1a;在当今PR文章满天飞的背景下&#xff0c;我们能够保持人间清醒&#xff0c;对NLP技术有客观、公正的了解&#xff0c;并实事求是地进行技术实践和知识共享。老刘说NLP&#xff0c;将定期发布更多、更简单、更有趣的语言知识、想法、笔记&#xff0c;包…

POJ 2453 贪心应用

文章目录1. 题目1.1 题目链接1.2 题目大意1.3 解题思路2. Accepted 代码1. 题目 1.1 题目链接 http://poj.org/problem?id2453 1.2 题目大意 一个数x的二进制表示有n个1&#xff0c;求一个有相同个数1的二进制数&#xff08;比x大&#xff0c;且要最小的&#xff09; 1.3…