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

KMP算法

KMP算法详解

KMP(Knuth-Morris-Pratt)算法是一种用于在大串中寻找小串的字符串匹配算法。它通过在字符串匹配过程中避免不必要的重复比较,显著提高了效率。KMP算法的核心思想是利用字符串中已经匹配的部分信息来优化匹配过程,减少回溯操作。

KMP算法的基本思想

KMP算法的关键是使用“部分匹配表”(也叫做“前缀表”或者“失配函数”),该表记录了每个子串的前缀与后缀的相似信息。通过这个表,可以在字符匹配失败时,跳过一些无意义的比较,直接跳到下一个可能匹配的位置。

1. 前缀和后缀的定义
  • 前缀:一个字符串的前缀是它的一个子串,且不包括字符串的最后一个字符。例如,字符串 "ABCD" 的前缀有 ""、"A"、"AB"、"ABC"。
  • 后缀:一个字符串的后缀是它的一个子串,且不包括字符串的第一个字符。例如,字符串 "ABCD" 的后缀有 "BCD"、"CD"、"D"。

在KMP算法中,我们需要关注的是前缀后缀的重合部分。特别是,对于模式串中的每个位置,我们需要知道它的最大前缀和后缀的匹配长度。

2. 部分匹配表(前缀表)

部分匹配表(也叫“失配函数”)记录了模式串中每个位置的前缀和后缀的最长匹配长度。具体来说,前缀表的第 i 个值表示的是模式串从位置 0i-1 的子串的最长前缀后缀匹配长度。

例如,对于模式串 ABABAC,它的部分匹配表为:

索引:     0  1  2  3  4  5
模式串:   A  B  A  B  A  C
前缀表:  0  0  1  2  3  0

解释:

  • A 没有前缀和后缀匹配,因此为 0
  • AB 没有前缀和后缀匹配,因此为 0
  • ABA 有前缀和后缀 A 匹配,因此为 1
  • ABAB 有前缀和后缀 AB 匹配,因此为 2
  • ABABA 有前缀和后缀 ABA 匹配,因此为 3
  • ABABAC 没有前缀和后缀匹配,因此为 0
3. 构建部分匹配表

为了有效实现KMP算法,需要首先构建部分匹配表。我们从模式串的第二个字符开始,逐个计算出每个位置的最长前缀后缀匹配长度。

构建过程:

  • 初始化一个数组 prefixTable,大小为模式串的长度,初始值为 0
  • 使用两个指针:一个指向模式串的当前字符(i),一个指向前缀长度(j)。
  • 遍历模式串,对于每个字符,如果它与前一个字符匹配,则 prefixTable[i] = j + 1,否则通过 prefixTable[j-1] 来跳过一些字符,避免重复计算。
4. KMP匹配过程
  • 初始化两个指针,一个指向文本串 T(大串),一个指向模式串 P(小串)。
  • 比较模式串中的字符与文本串中的字符:
    • 如果匹配,则继续比较下一个字符。
    • 如果不匹配,则根据部分匹配表跳到模式串中的一个位置,避免了从头开始重新匹配。
5. KMP匹配的时间复杂度
  • 构建部分匹配表的时间复杂度为 O(m),其中 m 是模式串的长度。
  • 匹配过程的时间复杂度为 O(n),其中 n 是文本串的长度。
  • 因此,KMP算法的总时间复杂度为 O(m + n),相比传统的暴力匹配算法 O(m * n),大大提高了效率。
例题:

6. KMP算法的实现
public class KMP {// 构建部分匹配表public static int[] buildPrefixTable(String pattern) {int m = pattern.length();int[] prefixTable = new int[m];int j = 0; // 前缀长度for (int i = 1; i < m; i++) {while (j > 0 && pattern.charAt(i) != pattern.charAt(j)) {j = prefixTable[j - 1];}if (pattern.charAt(i) == pattern.charAt(j)) {j++;}prefixTable[i] = j;}return prefixTable;}// KMP字符串匹配public static int kmpSearch(String text, String pattern) {int[] prefixTable = buildPrefixTable(pattern);int n = text.length();int m = pattern.length();int j = 0; // 模式串的指针for (int i = 0; i < n; i++) {while (j > 0 && text.charAt(i) != pattern.charAt(j)) {j = prefixTable[j - 1]; // 跳到前缀表的位置}if (text.charAt(i) == pattern.charAt(j)) {j++;}if (j == m) {return i - m + 1; // 匹配成功,返回匹配的起始位置}}return -1; // 匹配失败}public static void main(String[] args) {String text = "ABABDABACDABABCABAB";String pattern = "ABABCABAB";int result = kmpSearch(text, pattern);System.out.println("Pattern found at index: " + result); // 输出: Pattern found at index: 10}
}
7. 总结
  • KMP算法通过构建前缀表来优化字符串匹配的效率,避免了暴力匹配中的重复计算。
  • 在字符串匹配过程中,利用已经匹配的部分信息来跳过不必要的比较,节省时间。
  • 相比传统的暴力匹配算法,KMP算法的时间复杂度大大降低,是高效的字符串匹配算法。

相关文章:

KMP算法

KMP算法详解 KMP&#xff08;Knuth-Morris-Pratt&#xff09;算法是一种用于在大串中寻找小串的字符串匹配算法。它通过在字符串匹配过程中避免不必要的重复比较&#xff0c;显著提高了效率。KMP算法的核心思想是利用字符串中已经匹配的部分信息来优化匹配过程&#xff0c;减少…...

分类操作,可以通过引入对 Bean 的前置和后置处理

深入理解 BeanPostProcessor BeanPostProcessor&#xff0c;它主要有两个方法before和after的执行阶段&#xff0c;主要就是明白方法是在谁的前面在谁的后面执行 在你的idea中创建一个项目&#xff0c;你可以通过实现Ordered这个接口来&#xff0c;这样就可以让其实现类去实现…...

【2024 年度总结】从小白慢慢成长

【2024 年度总结】从小白慢慢成长 1. 加入 CSDN 的契机2. 学习过程2.1 万事开头难2.2 下定决心开始学习2.3 融入技术圈2.4 完成万粉的目标 3. 经验分享3.1 工具的选择3.2 如何提升文章质量3.3 学会善用 AI 工具 4. 保持初心&#xff0c;继续前行 1. 加入 CSDN 的契机 首次接触…...

无数据库开源Wiki引擎WikiDocs

简介 什么是 WikiDocs &#xff1f; WikiDocs 是一个无数据库的开源 Markdown 文件平面 Wiki 引擎。它旨在提供一个简单、灵活且易于使用的 Wiki 解决方案&#xff0c;允许用户创建和管理文档而无需依赖传统数据库。 主要特点 无数据库&#xff1a;使用纯文本文件存储数据&am…...

【算法】字符串:高精度计算之加法、乘法(数组模拟)

目录 1、高精度算法是什么&#xff1f; 2、易错点 高精度加法&#xff1a; 高精度减法&#xff1a; 高精度乘法&#xff1a; 高精度除法&#xff1a; 3、高精度加法 思路&#xff1a; 例题 4、高精度乘法 思路 例题 参考文章 高精度算法——数组模拟&#xff08;加、减…...

4.JoranConfigurator解析logbak.xml

文章目录 一、前言二、源码解析GenericXMLConfiguratorlogback.xml解析通过SaxEvent构建节点model解析model节点DefaultProcessor解析model 三、总结 一、前言 上一篇介绍了logback模块解析logback.mxl文件的入口, 我们可以手动指定logback.xml文件的位置, 也可以使用其它的名…...

JavaWeb开发(十六)实战-生鲜后台管理系统(三)BeanUtils介绍、Servlet的抽取

1. 生鲜后台管理系统-BeanUtils的使用 1.1. BeanUtils介绍 BeanUtils 是 Apache commons组件的成员之一&#xff0c;主要用于简化JavaBean封装数据的操作。它可以给JavaBean封装一个字符串数据&#xff0c;也可以将一个表单提交的所有数据封装到JavaBean中。使用第三方工具&am…...

人形机器人将制造iPhone!

前言 优必选机器人和富士康通过一项突破性的合作伙伴关系&#xff0c;正在将先进的人形机器人&#xff08;如Walker S1及其升级版Walker S2&#xff09;整合到制造流程中&#xff0c;以改变iPhone的生产方式。这一合作旨在通过提升机器人能力、优化工作流程以及实现更智能的自动…...

Oracle 深入学习 Part 14:Managing Password Security and Resources(管理密码安全性和资源)

Profiles Profile 是一个以名称标识的集合&#xff0c;用于管理 密码 和 资源限制。 每个用户都对应一个profiles&#xff0c;可以通过 CREATE USER 或 ALTER USER 命令分配给用户。 Profiles 可以启用或禁用。 Profiles 可以关联到默认的 DEFAULT Profile。 密码管理&…...

202209 青少年软件编程等级考试C/C++ 二级真题答案及解析(电子学会)

第 1 题 统计误差范围内的数 统计一个整数序列中与指定数字m误差范围小于等于X的数的个数。 时间限制:5000 内存限制:65536 输入 输入包含三行: 第一行为N,表示整数序列的长度(N <= 100); 第二行为N个整数,整数之间以一个空格分开; 第三行包含2个整数,为指定…...

qt中透明度表示

透明度的表示方法 在 Qt 样式表中&#xff0c;使用 rgba 或 argb 颜色表示法时&#xff0c;透明度通常用一个介于 0 和 1 之间的小数表示。 rgba 表示法&#xff1a;rgba(red, green, blue, alpha)&#xff0c;其中 alpha 是透明度&#xff0c;例如 rgba(255, 0, 0, 0.5) 表示…...

Mybatis 进阶 / Mybatis—Puls (详细)

目录 一.动态SQL 1.1标签 1.2 标签 1.3标签 1.4标签 1.5标签 1.6标签 mybatis总结&#xff1a; 二.Mybatis-Puls 2.1准备工作 2.2CRUD单元测试 2.2.1创建UserInfo实体类 2.2.2编写Mapper接⼝类 2.2.3 测试类 2.3 常见注解 2.3.1TableName 2.3.2TableField 2.4打印日…...

opencv在图片上添加中文汉字(c++以及python)

opencv在图片上添加中文汉字&#xff08;c以及python&#xff09;_c opencv绘制中文 知乎-CSDN博客 环境&#xff1a; ubuntu18.04 desktopopencv 3.4.15 opencv是不支持中文的。 这里C代码是采用替换原图的像素点来实现的&#xff0c;实现之前我们先了解一下汉字点阵字库。…...

js截取video视频某一帧为图片

1.代码如下 <template><div class"box"><div class"video-box"><video controls ref"videoRef" preload"true"src"https://qt-minio.ictshop.com.cn:9000/resource-management/2025/01/08/7b96ac9d957c45a…...

Observability:最大化可观察性 AI 助手体验的 5 大提示(prompts)

作者&#xff1a;来自 Elastic Zoia_AUBRY 在过去三年担任客户工程师期间&#xff0c;我遇到了数百名客户&#xff0c;他们最常问的问题之一是&#xff1a;“我的数据在 Elastic 中&#xff1b;我该如何利用它获得最大优势&#xff1f;”。 如果这适用于你&#xff0c;那么本…...

HDFS的架构优势与基本操作

目录 写在前面一、 HDFS概述 1.1 HDFS简介1.2 HDFS优缺点 1.2.1 优点1.2.2 缺点 1.3 HDFS组成架构1.4 HDFS文件块大小 二、HDFS的Shell操作&#xff08;开发重点&#xff09; 2.1 基本语法2.2 命令大全2.3 常用命令实操 2.3.1 上传2.3.2 下载2.3.3 HDFS直接操作 三、HDFS的AP…...

hive表修改字段类型没有级连导致历史分区报错

一&#xff1a;问题背景 修改hive的分区表时有级连概念&#xff0c;指字段的最新状态&#xff0c;默认只对往后的分区数据生效&#xff0c;而之前的分区保留历史元数据状态。好处就是修改语句的效率很快&#xff0c;坏处就是如果历史分区的数据还有用&#xff0c;那就回发生分…...

023:到底什么是感受野?

本文为合集收录&#xff0c;欢迎查看合集/专栏链接进行全部合集的系统学习。 合集完整版请查看这里。 在前面介绍卷积算法时&#xff0c;一直在强调一个内容&#xff0c;那就是卷积算法的运算过程是—— 卷积核在输入图像上滑动扫描的过程。 在每一次扫描时&#xff0c;可以…...

GoFrame g.* 方法和数据类型

GoFrame g.* 方法和数据类型 GoFrame 框架通过 g.* 方法提供了一系列常用的数据类型和对象获取方法。这个模块采用强耦合设计&#xff0c;目的是为开发者提供便捷的类型和对象调用方式。 使用方式 import "github.com/gogf/gf/v2/frame/g"数据类型 基础类型别名 …...

分苹果,若a ^ b ^ c = 0意味着:a 和 (b ^ c) 的值相等,或者 b 和 (a ^ c) 的值相等,以及 c 和 (a ^ b) 的值相等。

若a ^ b ^ c faultSum&#xff0c;那么faultSum 0时&#xff0c;即可产生上面的平分方案。说明可以满足二进制平分 #include<bits/stdc.h> using namespace std; int main() { int n; cin>>n; vector<int> weight(n); for(int i0;i<n;i) {…...

深入解析人工智能中的协同过滤算法及其在推荐系统中的应用与优化

目录 什么是协同过滤算法核心原理基本步骤相似度计算代码实现详解1.流程图2.创建基础的数据结构存储用户评分数据3.计算用户相似度4.获取相似用户5.推荐方法 算法优化建议1. 数据预处理优化去除异常值和噪声数据进行数据标准化使用稀疏矩阵优化存储 2. 相似度计算优化使用局部敏…...

电梯系统的UML文档04

这个版本的类图是直接从4.2节中用例图的描述得来的&#xff0c;这个视图中的类覆盖了系统所有的功能。我们用电梯类和电梯控制器类&#xff08;ElevatorControl&#xff09;移动或停止电梯&#xff1b;用门类开门或关门&#xff1b;用指示器类让乘客知道电梯的位置和方向&#…...

《自动驾驶与机器人中的SLAM技术》ch4:预积分学

目录 1 预积分的定义 2 预积分的测量模型 ( 预积分的测量值可由 IMU 的测量值积分得到 ) 2.1 旋转部分 2.2 速度部分 2.3 平移部分 2.4 将预积分测量和误差式代回最初的定义式 3 预积分的噪声模型和协方差矩阵 3.1 旋转部分 3.2 速度部分 3.3 平移部分 3.4 噪声项合并 4 零偏的…...

海量数据的处理

一般来说都是针对数据量特别大&#xff0c;内存有限制的。 第一类&#xff1a;topk问题 比如&#xff0c;在海量数据中找前50大的数据怎么办&#xff1f; 方法一&#xff1a;使用小顶堆&#xff0c;用小顶堆维护这50个元素&#xff0c;当有新元素到来时&#xff0c;直接与堆…...

Python人脸识别库DeepFace使用教程及源码解析

目录 一、DeepFace介绍 1、人脸库设计 2、DeepFace.find 3、DeepFace.verify 4、DeepFace.analyze 5、DeepFace.extract_faces 6、DeepFace.represent 7、DeepFace.stream 二、DeepFace二次开发 1、开发活体检测API 2、模型权重持久化 三、总结 一、DeepFace介绍 …...

Nacos:使用PgSQL数据源

数据源插件开源仓库地址&#xff1a;nacos-datasource-extend-plugins 一、PostgreSQL数据库安装 1、本文使用Docker进行数据库的安装&#xff0c;使用docker命令拉取的PG14版本的数据库&#xff1a; docker pull postgres:14.6 2、创建PG容器并启动&#xff0c;映射了5432…...

基于Python的多元医疗知识图谱构建与应用研究(下)

五、基于医疗知识图谱的医疗知识图谱程序构建 5.1 数据层构建 5.1.1 数据源选择与获取 在构建基于医疗知识图谱的医疗知识图谱数据层时,数据源的选择与获取至关重要。数据源的质量和丰富度直接决定了知识图谱的可靠性和实用性。医学文献是重要的数据源之一,包括学术期刊论…...

JAVA:Spring Boot 实现责任链模式处理订单流程的技术指南

1、简述 在复杂的业务系统中&#xff0c;订单流程往往需要一系列的操作&#xff0c;比如验证订单、检查库存、处理支付、更新订单状态等。责任链模式&#xff08;Chain of Responsibility&#xff09;可以帮助我们将这些处理步骤分开&#xff0c;并且以链式方式处理每一个操作…...

SpringBoot多级配置文件

1.问题先导 有这样的场景&#xff0c;我们开发完毕后需要测试人员进行测试&#xff0c;由于测试环境和开发环境的很多配置都不相同&#xff0c;所以测试人员在运 行我们的工程时需要临时修改很多配置&#xff0c;如下 java –jar springboot.jar –-spring.profiles.activete…...

阿里云安装mikrotik7配置内网互通

阿里云近期推出了200M不限量机器&#xff0c;对于没有公网接入的中小企业可以借助这个机器对多地分支机构进行内网互通。目前已经有很多机构用这个搞跨云k8s,跨云集群了。 mikrotik作为一个商用的软件&#xff0c;操作性比一些开源的软件好用不少。 本文使用的网段为172.16.1…...

std::forward实现原理与应用场景

std::forward 是 C11 引入的一个函数模板&#xff0c;用于实现完美转发&#xff08;Perfect Forwarding&#xff09;。它的核心作用是根据传入的参数&#xff0c;决定将参数以左值引用还是右值引用的方式进行转发&#xff0c;从而保持参数的原始值类别。 实现原理 template&l…...

TiDB 在市面上的热门应用领域

TiDB 在市面上的热门应用领域 TiDB 作为一款分布式数据库&#xff0c;凭借其高可扩展性和强一致性&#xff0c;逐渐成为多个行业和领域的热门选择。那么&#xff0c;TiDB 在市面上主要应用在哪些领域呢&#xff1f;今天我们来看看 TiDB 在几个热门领域的应用场景。 1. 互联网…...

“深入浅出”系列之C++:(11)推荐一些C++的开源项目

1. SQLiteCpp - 简单易用的Sqlite C封装库 仓库地址&#xff1a;https://github.com/SRombauts/SQLiteCpp 简介&#xff1a;SQLiteCpp是一个对Sqlite数据库进行C封装的开源库&#xff0c;代码行数约2,500行。它提供了简洁易用的接口&#xff0c;使得在C项目中操作Sqlite数据库…...

高等数学学习笔记 ☞ 定积分的积分方法

1. 定积分的换元积分法 1. 换元积分公式&#xff1a;设函数在闭区间上连续&#xff0c;令&#xff0c;若满足&#xff1a; ①&#xff1a;当时&#xff0c;&#xff1b;当时&#xff0c;。 此时的大小关系不一定&#xff0c;但与最好对应着写&#xff0c;否则就要留意变号的问…...

KVA教程-插件开发

“如果结果不如你所愿&#xff0c;就在尘埃落定前奋力一搏。”——《夏目友人帐》 “有些事不是看到了希望才去坚持&#xff0c;而是因为坚持才会看到希望。”——《十宗罪》 “维持现状意味着空耗你的努力和生命。”——纪伯伦 KVA 技术教程 * 插件开发 简介 插件开发是KVA&a…...

AI守护煤矿安全生产:基于视频智能的煤矿管理系统架构解析

前言 本文我将介绍我和我的团队自主研发设计的一款AI产品的成果展示——“基于视频AI识别技术的煤矿安全生产管理系统”。 这款产品是目前我在创业阶段和几位矿业大学的博士共同从架构设计、开发到交付的全过程中首次在博客频道发布, 我之前一直想写但没有机会来整理这套系统的…...

AI编程工具横向评测--Cloudstudio塑造完全态的jupyter notebook助力数据分析应用开发

AI编程工具横向评测–Cloudstudio塑造完全态的jupyter notebook助力数据分析应用开发 数据分析类应用的开发&#xff0c;指的是首先进行数据分析&#xff0c;比如统计学分析、机器学习模型的构建等&#xff0c;然后将分析的流程开发成数据分析类的工具&#xff0c;或者将数据分…...

04JavaWeb——Maven-SpringBootWeb入门

Maven 课程内容 初识Maven Maven概述 Maven模型介绍 Maven仓库介绍 Maven安装与配置 IDEA集成Maven 依赖管理 01. Maven课程介绍 1.1 课程安排 学习完前端Web开发技术后&#xff0c;我们即将开始学习后端Web开发技术。做为一名Java开发工程师&#xff0c;后端Web开发…...

ThreeJS能力演示——界面点选交互能力

1、支持界面点选 点选模型整体思路是&#xff1a;根据camera位置作为起始点&#xff0c;叠加鼠标相对位置作为偏置&#xff0c;摄像头方向作为射线方向。 根据射线方向中的遇到的3D物体列表&#xff0c;第一个遇到的物体作为被点选的物体。 // 鼠标事件处理let selectedObjec…...

Linux:常用命令--文件与目录操作

ls命令 功能&#xff1a;&#xff08;list&#xff09;列出当前目录的文件信息 语法&#xff1a;ls [-l -h -a] [参数] 参数&#xff1a;被查看的文件夹&#xff0c;不提供参数&#xff0c;表示查看当前工作目录-l&#xff0c;以列表形式查看每个文件的属性&#xff0c;包含…...

Node.js NativeAddon 构建工具:node-gyp 安装与配置完全指南

Node.js NativeAddon 构建工具&#xff1a;node-gyp 安装与配置完全指南 node-gyp Node.js native addon build tool [这里是图片001] 项目地址: https://gitcode.com/gh_mirrors/no/node-gyp 项目基础介绍及主要编程语言 Node.js NativeAddon 构建工具&#xff08;node-gyp…...

docker运行Java项目,Kaptcha因为字体缺失没法显示验证码图片

2015工作至今&#xff0c;10年资深全栈工程师&#xff0c;CTO&#xff0c;擅长带团队、攻克各种技术难题、研发各类软件产品&#xff0c;我的代码态度&#xff1a;代码虐我千百遍&#xff0c;我待代码如初恋&#xff0c;我的工作态度&#xff1a;极致&#xff0c;责任&#xff…...

C++otlv4连接sql serveer使用记录(注意点)

C使用otlv4在做插入时&#xff0c;有一些设计的坑需要注意 插入数据&#xff1a; 当要给表中插入单个字符时&#xff0c;数据库表设计使用varchar(1)是合理的&#xff0c;但是otlv4一直报错char。 后续查很久才知道&#xff0c;otlv4所写的绑定的字符数组的长度应该实际数组…...

[思考记录]认知和思考

在以前&#xff0c;具备一定的技能和经验就能轻易找到自己的一席之地。但在AI时代下&#xff0c;这些东西很容易就被抹平&#xff0c;那么我们的竞争力又在哪里&#xff1f;“认知和思考”是一个方向&#xff0c;帮助我们能去应对复杂情境、帮我们更容易去看到真相。 1.很多时…...

前端开发Web

Ajax 概念:Asynchronous JavaScriptAnd XML&#xff0c;异步的JavaScript和XML 作用: 数据交换:通过Ajax可以给服务器发送请求&#xff0c;并获取服务器响应的数据。 异步交互:可以在不重新加载整个页面的情况下&#xff0c;与服务器交换数据并更新部分网页的…...

【C++提高篇】—— C++泛型编程之模板基本语法和使用的详解

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、模板的概念二、函数模板2.1 函数模板的使用2.2 函数模板注意事项2.3 普通函数与函数模板的区别2.4 普通函数与函数模板的调用规则2.5 模板的局限性 三、类模…...

WPS计算机二级•高效操作技巧

听说这里是目录哦 斜线表头 展示项目名称&#x1f34b;‍&#x1f7e9;横排转竖排&#x1f350;批量删除表格空白行&#x1f348;方法一方法二建辅助列找空值 能量站&#x1f61a; 斜线表头 展示项目名称&#x1f34b;‍&#x1f7e9; 选中单元格&#xff0c;单击右键➡️“设…...

【Maui】视图界面与数据模型绑定

文章目录 前言一、问题描述二、解决方案三、软件开发&#xff08;源码&#xff09;3.1 创建模型3.2 视图界面3.3 控制器逻辑层 四、项目展示 前言 .NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架&#xff0c;用于使用 C# 和 XAML 创建本机移动和桌面应用。 使用 .NET MAUI&…...

vue3-sfc-loader 加载远程.vue文件(sfc)案例

注意事项 style标签如果增加了lang比如&#xff1a;lang“scss”&#xff0c;需要提供scss-loader的处理器&#xff0c;这个暂时没研究&#xff0c;我的处理方式是将动态模版的css放在了全局打包暂时还没有测试&#xff0c;后面测试了会同步更新 安装vue3-sfc-loader npm inst…...

Hadoop美食推荐系统 爬虫1.8w+数据 协同过滤余弦函数推荐美食 Springboot Vue Element-UI前后端分离

Hadoop美食推荐系统 爬虫1.8w数据 协同过滤余弦函数推荐美食 Springboot Vue Element-UI前后端分离 【Hadoop项目】 1. data.csv上传到hadoop集群环境 2. data.csv数据清洗 3.MapReducer数据汇总处理, 将Reducer的结果数据保存到本地Mysql数据库中 4. SpringbootEchartsMySQL 显…...