数据结构中Java实现KMP与BF算法对比

2023-11-12


public class KMPANDBF {
	public int indexBfCount(SeqString s,SeqString t,int begin){
		int slen,tlen,i=begin,j = 0;
		int count = 0;
		slen =s.length();
		tlen = t.length();
		while ((i<slen)&&(j<tlen)) {
			if (s.charAt(i)==t.charAt(j)) {
				i++;
				j++;
			}else{
				i = i - j +1;
				j = 0;
			}
			count++;
		}
		return count;
	}
	
	public int indexKMPCount(SeqString s,SeqString t, int begin) {
		int[] next = getNext(t);
		int i =begin ;
		int j =0;
		int count = 0;
		while (i<s.length()&&j<t.length()) {
			if (j == -1||s.charAt(i) == t.charAt(j)) {
				i++;
				j++;
			}else if(j == 0){
				i++;
			}else {
				j = next[j];
			}
			count++;
		}
		return count;
	}
	
	public int[] getNext(SeqString T) {
		int[] next = new int[T.length()];
		int j =1;
		int k = 0;
		next[0] = -1;
		next[1] = 0;
		while (j<T.length()-1) {
			if (T.charAt(j)==T.charAt(k)) {
				next[j+1] = k +1;
				j++;
				k++;
			}else if (k == 0) {
				next[j +1]=0;
				j++;
			}else {
				k = next[k];
			}
		}
		return (next);
	}
	public static void main(String[] args) {
		SeqString s1 =new SeqString("abcdbacc");
		SeqString t1 =new SeqString("abcd");
		KMPANDBF c =new KMPANDBF();
		System.out.println("测试1:主串 S = "+ s1.toString()+", 模式串 T = "+ t1.toString());
		System.out.println("BF算法比较次数: "+c.indexBfCount(s1, t1, 0) );
		System.out.println("KMP算法比较次数:" +c.indexKMPCount(s1, t1, 0));
		
		SeqString s2 = new SeqString("aaaaaaaaa");
		SeqString t2 = new SeqString("aaaab");
		
		System.out.println("测试1:主串 S = "+ s2.toString()+", 模式串 T = "+ t2.toString());
		System.out.println("BF算法比较次数: "+c.indexBfCount(s2, t2, 0) );
		System.out.println("KMP算法比较次数:" +c.indexKMPCount(s2, t2, 0));
	}
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构中Java实现KMP与BF算法对比 的相关文章

  • 使用缩略图器,我可以制作具有相同高度和宽度的缩略图,无论图像大小如何

    In 缩略图器 http code google com p thumbnailator 我正在制作缩略图 如果图像大小是 400 300 并且如果我执行以下操作 Thumbnails of new File original jpg si
  • 如何正确地将MapStruct与Eclipse集成? (包括Lombok java代理)

    我愿意在一些官方项目中使用MapStruct 所以我决定先对其进行一些测试 我需要让它与 eclipse 集成工作 并遵循 MapStruct 网站上提供的所有说明 但是 到目前为止还没有运气 有人成功实现了这种整合吗 如果是的话我可以缺少
  • 什么是“非阻塞”并发?它与普通并发有何不同?

    什么是 非阻塞 并发 它与使用线程的普通并发有何不同 为什么不在所有需要并发的场景中都使用非阻塞并发呢 使用非阻塞并发有开销吗 我听说Java中可以实现非阻塞并发 我们是否应该在特定场景下使用此功能 将这些方法之一与集合一起使用是否有区别或
  • Maven:无法在 OS X 上找到 java.lang 问题

    当我尝试时遇到以下问题mvn clean install显然它无法找到运行时 jar 但我需要做什么 错误日志 ERROR COMPILATION ERROR INFO ERROR Failure executing javac but c
  • 如何为Spring Boot中的所有控制器指定前缀?

    我有控制器映射到 user and order RestController RequestMapping users public class UserController RestController RequestMapping or
  • 将双精度转换为二进制表示形式?

    我尝试将双精度数转换为其二进制表示形式 但使用此Long toBinaryString Double doubleToRawLongBits d 没有帮助 因为我有大量数字 Long 无法存储它们 即2 900 Long toBinaryS
  • 使用 Bouncy Castle 重建 ED25519 按键 (Java)

    Bouncy Castle 的最新 测试版 版本 bcprov jdk15on 161b20 jar 支持 ED25519 和 ED448 EC 加密以进行签名 我设置了这个完整的工作示例 它按预期工作 我的问题 我是否正确重建了私钥和公钥
  • 使android listview布局可滚动

    我有一个 xml 文件 其布局为 ASCII 形式 ImageView TextView List
  • 在所有方法调用上允许类型见证有什么意义?

    假设我们有两种方法 如下所示 public static
  • 公共领域有哪些替代方案?

    我正在用 java 编写一个游戏 正如问题标题建议的那样 我在类中使用公共字段 暂且 据我所知 公共领域很糟糕 我有一些理解其中的原因 但如果有人能澄清为什么你不应该使用它们 那将不胜感激 问题是 从我所看到的来看 这似乎是合乎逻辑的 是使
  • 字节流和字符流

    请解释一下什么是字节流和字符流 这些究竟意味着什么 Microsoft Word 文档是面向字节的还是面向字符的 Thanks 流是一种顺序访问文件的方式 字节流逐字节访问文件 字节流适用于任何类型的文件 但不太适合文本文件 例如 如果文件
  • Spring 非托管 bean 的依赖注入

    我有一个非托管的 JPA 域类 它是通过实例化的new操作员 UserAccount account new UserAccount userRepository save account In my UserAccount类 我有一个be
  • 如何告诉 Eclipse 忽略 Ant build.xml 中的错误?

    我有一个使用 Maven 构建的 Eclipse 项目 并且我在 Eclipse 中使用 m2eclipse 插件来获得 Maven 支持 然而这个项目还包含一个build xml它并不用于实际构建项目 而只是用于编写脚本功能 作为项目开发
  • 码头无故停止

    我需要经验丰富的码头用户的建议 我在负载均衡器 亚马逊云 后面维护着 2 台 Linux 机器 使用 Jetty 9 0 3 有时我的 Jetty 容器会被 Thread 2 无故关闭 同时地 显示以下日志并且容器无故停止 没有错误 没有例
  • 如何在 Struts 2 中访问 OGNL 跟踪评估?

    有人告诉我要优化网络应用程序 为此 我使用JProfiler https www ej technologies com products jprofiler overview html 我注意到很大一部分响应时间都花在了表示层上 特别是当
  • 在JAVA中将数据写入.txt文件?

    我想知道是否是在JAVA中将计算的数据写入文本文件 我的 JAVA 代码是一个基于 GUI 的 gpa 计算器 我只想添加一个 JButton 和 ActionListener 它将类名 GPA 点和计算出的 GPA 写入 txt 文件 这
  • 在大画布上滚动

    我需要一些帮助来了解滚动绘制到 Android 画布上的项目的基础知识 假设我想创建一个时间线 其中 0 处的时间是可视化的顶部 并且随着时间的增加 时间线继续呈现在上一个点下方 如果我想在 Android 上渲染它 我知道我可以通过重写
  • 未找到 GroovyEvaluator

    我会尝试在以下位置制作我的 PIE 3D 报告iReport 在我的 struts xml 中 我用这个来调用我的报告
  • Web 服务返回 java.lang.reflect.InitationTargetException

    我在向 java web 服务发出请求时收到上述消息 我们最初创建了一个 Java 控制台应用程序并手动提交了一个 xml 文件 当将其作为 Java 应用程序运行时 将使用 System out println 成功创建并显示响应 我们通
  • java 更新进度条

    我有一个 JFrame 和以下组件 JButton jButton1 Progress Bar ProgressBar 及其公共静态 JLabel 状态及其公共静态 单击按钮时会执行不同的语句 我想在每个语句后更新我的进度条 这是我的代码

随机推荐

  • 基于图像深度学习的无线电信号识别

    利用图像深度学习解决无线电信号识别问题的技术思路 首先把无线电信号具象化为一张二维图片 将无线电信号识别问题转化为图像识别领域的目标检测问题 进而充分利用人工智能在图像识别领域的先进成果 提高无线电信号识别的智能化水平和复杂电磁环境下的识别
  • C++的函数重载详解

    函数名相同 提高函数复用性 同一个作用域 下 函数名相同 参数的个数或类型或顺序不同 都可以作函数重载 注意 返回值类型不同不能作为函数重载 两个特殊情况 1 函数重载遇上引用与常量引用 void func int a void func
  • #pragma once和#ifndef的作用和区别

    两者共同的作用 防止库文件重复包含 ifndef define endif 方法一 在 h头文件开头加上 pragma once add h pragma once int ADD x y 方法二 在 h头文件加上预定义指令 add h i
  • Python-Anaconda最新安装图文教程

    Anaconda简介 Anaconda是一种数据科学和机器学习的开发环境 它包含了大量的Python包 工具和库 以及可视化界面和集成开发环境 Anaconda可以方便地管理Python环境和安装第三方软件包 同时也支持多个操作系统和平台
  • vue 组件通信方式你知道几种,这6种一定得掌握

    第一种props 适用于的场景 父子组件通信 注意事项 如果父组件给子组件传递数据 函数 本质其实是子组件给父组件传递数据 如果父组件给子组件传递的数据 非函数 本质就是父组件给子组件传递数据 书写方式 3种 todos type Arra
  • PTP(Precision Time Protocol)高精度时间同步协议+CS模式测试代码

    Precision Time Protocol PTP 一 什么是PTP PTP 是一种高精度时间同步协议 可以到达亚微秒级精度 有资料说可达到30纳秒左右的偏差精度 但需要网络的节点 交换机 支持PTP协议 才能实现纳秒量级的同步 一般在
  • 深入浅出 redux中间件

    redux中间件是什么 理解redux中间件首先我们需要理解redux是什么 Redux是JavaScript应 的状态容器 它保证程序 为 致性且易于测试 当业务足够复杂时 我们就需要使用redux来存储我们的多页面共同数据 redux的
  • 现行安全存储策略-密码加盐

    本文描述了本人 对于数据库中如何保存密码的认识过程 从最简单的明文保存到密码加盐保存 下面与大家分享下 第一阶段 最开始接触web开发时 对于用户表的密码基本是明文保存 如 username password zp1996 123456 z
  • 利用js实现简单抽奖功能

    其实这种抽奖的功能和选人是一样的 在点击开始按钮之后 标题上方的名字可以实现一个不停的变化 在点击停止之后抽出获奖的名字 在写之我们必须明确一点的是需要用到哪些方法 并且将基础的框架搭建出来 下面是功能实现的视频展示 如下 抽奖 基本的样式
  • OpenCv案例(四): 基于OpenCvSharp对图像轮廓提取与面积和周长计算

    1 需求 提取图像中物体的轮廓以及计算该面积和周长 2 详细代码如下 public static void GetOutline try region 加载图像 Mat src Cv2 ImRead srcImg bmp if src Em
  • python连接Oracle数据库代码

    import cx Oracle as oracle db oracle connect 用户名 密码 IP 端口号 SERVICE NAME db oracle connect admin password IP 1521 DataBas
  • 微信小程序把页面做成图片分享【原创】

    开发微信小程序的时候 经常要遇到如上图这样的 保存小程序二维码图片的分享功能 网上找了很多都没有具体的写法 于是自己看官方文档写了一个 分享一下 首先 需要在 wxml 中 创建一个 画板 canvas wxml
  • Matlab 绘制虚数和复数数据图

    Matlab 绘制虚数和复数数据图 在 Matlab 中 我们可以使用 plot 函数来绘制实数数据图 但是当数据包含虚部时 我们需要使用另一种方式来绘制 Matlab 中的虚数和复数数据可以用两种方式表示 一种是把虚数表示为 i 即 j
  • 6.3-训练DNN的技巧

    文章目录 一 新的激活函数 New activation function 1 1 校正线性单元 Rectified Linear Unit 1 2 Maxout 二 自适应学习率 Adaptive Learning Rate 2 1 Mo
  • 红帽子Linux6.5 X86_64 自动重启解决办法

    机器重启前的15分钟 都会有一个报错 usr sbin bmc watchdog fiid obj get present countdown value data not available redhat对此有说明https access
  • qt中的tableView中的排序

    一 第三列的排序方式 1 第3列是按照升序来排列 ui gt tableView gt sortByColumn 3 Qt AscendingOrder 第3列是按照升序来排列 ui gt tableView gt setSortingEn
  • 弱网测试—Network-Emulator-Toolkit

    弱网测试 属于健壮性测试 怎么样去做弱网测试呢 一 安装弱网测试工具 Network Emulator Toolkit 推荐一个工具 Network Emulator Toolkit 这个工具的作用主要是设置丢包率和延时 1 安装与卸载 下
  • 怎么使用Web3.js开发一个简单的Dapp

    通过这篇文章 我们将学习 Dapps 和 Web3js 的基础知识 让我们了解一下基本术语 区块链 去中心化应用程序 以太坊 智能合约 web3js 区块链 区块链是一个可审计且不可逆的数据库 其中数据只能添加 在区块链中 数据可以作为块添
  • elasticSearch详细教程

    一 Elasticsearch简介 Elasticsearch是使用Java编写的一种开源搜索引擎 它在内部使用Luence做索引与搜索 通过对Lucene的封装 提供了一套简单一致的RESTful API Elasticsearch也是一
  • 数据结构中Java实现KMP与BF算法对比

    public class KMPANDBF public int indexBfCount SeqString s SeqString t int begin int slen tlen i begin j 0 int count 0 sl