首页 >算法资讯 >bm算法代码

bm算法代码

来源:www.moneyprint.net 时间:2024-05-17 06:27:56 作者:远虑算法网 浏览: [手机版]

  BM算法是一种符串匹配算法,它的全称是Boyer-Moore算法,由Robert S.BoyerJ.Strother Moore于1977年原文www.moneyprint.net。BM算法是一种高效的符串匹配算法,它的时间复杂度为O(n+m),其中n为文本串的长度,m为模式串的长度远~虑~算~法~网。相对于其他符串匹配算法,BM算法在多数情况下都具有更快的速度更好的性能远~虑~算~法~网

  BM算法的核用模式串中的信息来尽可能地减文本串中的比较次数moneyprint.net。在BM算法中,我们需要先预处理模式串中每符最出现的位置,然从文本串的末尾开始匹配,每次匹配失败就根据模式串中的信息来决定向右移动多位,以减比较次数moneyprint.net

  下面是BM算法的代码实现:

```

  void BM(string text, string pattern) {

  int n = text.length();

int m = pattern.length();

  int bad_char[256];

int suffix[m];

  bool prefix[m];

bm算法代码(1)

// 初始化bad_char数组

  for (int i = 0; i < 256; i++) {

  bad_char[i] = m;

}

  for (int i = 0; i < m; i++) {

  bad_char[pattern[i]] = m - i - 1;

  }

  // 初始化suffixprefix数组

int j = m - 1;

  for (int i = m - 2; i >= 0; i--) {

  while (j >= 0 && pattern[j] != pattern[i]) {

  j--;

}

  suffix[i] = j;

  j--;

}

for (int i = 0; i < m; i++) {

  prefix[i] = true;

  }

  for (int i = 0; i < m - 1; i++) {

  int j = suffix[i];

  if (j >= 0) {

  prefix[m - 1 - j] = false;

}

  }

  // 开始匹配

int i = m - 1;

  while (i < n) {

int j = m - 1;

  while (j >= 0 && text[i] == pattern[j]) {

  i--;

j--;

  }

  if (j < 0) {

  cout << "匹配成功,起始位置为:" << i + 1 << endl;

  i += m + 1;

  } else {

i += max(bad_char[text[i]], prefix[m - 1 - j] ? m - 1 - j : m - suffix[j] - 1);

}

  }

  }

  ```

在上面的代码中,我们先初始化了bad_char、suffixprefix数组,然从文本串的末尾开始匹配,每次匹配失败就根据模式串中的信息来决定向右移动多位,最终找到所有匹配的起始位置来自www.moneyprint.net

0% (0)
0% (0)
标签:算法代码
版权声明:《bm算法代码》一文由远虑算法网(www.moneyprint.net)网友投稿,不代表本站观点,版权归原作者本人所有,转载请注明出处,如有侵权、虚假信息、错误信息或任何问题,请尽快与我们联系,我们将第一时间处理!

我要评论

评论 ( 0 条评论)
网友评论仅供其表达个人看法,并不表明好好孕立场。
最新评论

还没有评论,快来做评论第一人吧!
相关文章
  • OpenSSH算法:保障网络安全的利器

    OpenSSH算法的概述OpenSSH是一种安全加密协议,用于在网络中安全地传输数据。它是SSH协议的实现,可以保护数据的完整性、机密性和可用性。OpenSSH算法是一种公钥加密算法,采用了RSA和DSA算法,以及AES、Blowfish和3DES等对称加密算法,实现了安全的远程登录和文件传输。OpenSSH算法的工作原理

    [ 2024-05-17 05:31:20 ]
  • 跟踪算法MFT:实现视频目标跟踪的新方法

    引言视频目标跟踪是计算机视觉领域的重要研究方向之一。它的应用广泛,如智能监控、自动驾驶、虚拟现实等。目标跟踪的任务是在连续的视频帧中追踪某个目标,即使目标在运动中,也能保持对其的跟踪。近年来,深度学习技术的发展使得目标跟踪的性能有了大幅提升。

    [ 2024-05-17 05:07:14 ]
  • 如何使用分布估计算法进行数据分析?

    随着大数据时代的到来,数据分析已经成为了各行各业必不可少的一项工作。而在数据分析中,分布估计算法是一种非常重要的方法。本文将介绍分布估计算法的基本概念和应用,并且提供一些常见的分布估计算法的代码实现。一、分布估计算法的基本概念分布估计算法是一种用于估计数据分布的方法。在数据分析中,我们通常需要知道数据的分布情况,以便更好地理解和分析数据。

    [ 2024-05-17 04:55:44 ]
  • 算法分析目标

    什么是算法分析算法分析是指对一个算法进行评估和比较的过程。在计算机科学中,算法是指解决特定问题的一系列有序步骤。在实际应用中,我们需要对不同的算法进行比较和评估,以确定哪个算法更适合解决特定问题。算法分析的目的是找到最优算法,以提高程序的效率和性能。算法分析的目标

    [ 2024-05-17 04:32:37 ]
  • 股票盈利和亏损的算法

    随着经济的发展和市场的繁荣,越来越多的人开始涉足股票市场,希望通过股票交易获得更多的收益。但是,股票市场的风险也是不可忽视的。在进行股票交易时,我们需要了解股票盈利和亏损的算法,以便更好地规划投资策略和控制风险。一、股票盈利的算法1. 股票买入价低于卖出价

    [ 2024-05-17 04:20:20 ]
  • 柏林噪声算法:可预测的未来声音

    随着城市化进程的不断加速,噪声污染已成为影响人们生活质量的一大问题。而柏林噪声算法的出现,为我们提供了一种可预测未来声音的新思路。一、什么是柏林噪声算法?柏林噪声算法(Berlin Noise Algorithm)是一种基于机器学习的预测噪声模型,由德国柏林市政府环境保护局开发。

    [ 2024-05-17 04:09:11 ]
  • 进程调度算法及优缺点总结

    引言进程是计算机中最基本的执行单元,它是操作系统中最重要的概念之一。操作系统需要对进程进行管理和调度,以确保系统资源的合理利用和进程的高效执行。进程调度算法是操作系统中的一个重要组成部分,其目的是根据一定的策略,将CPU的使用权分配给不同的进程,以实现多道程序的并发执行。本文将介绍常用的进程调度算法,分析它们的优缺点,并讨论如何选择合适的调度算法。

    [ 2024-05-17 03:56:13 ]
  • 无约束算法:从理论到实践

    随着计算机技术的不断发展,人们对算法的要求越来越高。传统的约束算法,虽然在某些场景下表现良好,但在面对一些复杂的问题时,往往束手无策。为了解决这一问题,无约束算法应运而生。一、什么是无约束算法无约束算法,顾名思义,是指在问题求解过程中,没有任何限制和约束的算法。它不受任何先验知识、规则、限制等的限制,完全依靠数据本身的特征和规律进行求解。

    [ 2024-05-17 03:43:28 ]
  • 海洋搜救算法:从技术到实践

    导言海洋是地球上最广阔的领域之一,也是最具挑战性的领域之一。无论是商业航运、渔业、旅游还是军事行动,都需要在海洋上进行。然而,海洋的复杂性和不可预测性给海上活动带来了很大的风险。一旦发生海难事故,海洋搜救就成为最紧迫的任务之一。本文将介绍海洋搜救的算法和技术,并通过实例介绍其应用。海洋搜救算法

    [ 2024-05-17 03:19:39 ]
  • 算法助手——抓弹窗神器

    随着互联网的发展,弹窗广告已成为人们日常生活中的一种不可避免的现象。每当我们打开一个网页或者使用一款应用程序时,总会不断地弹出各种广告窗口,让人感到十分烦躁。为了解决这个问题,我们可以使用一种名为“算法助手”的工具,它可以帮助我们抓住弹窗,让我们的网络体验更加舒适。一、算法助手的原理

    [ 2024-05-17 03:07:28 ]