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

安全联盟这种网站建设网站建设的征求意见稿

安全联盟这种网站建设,网站建设的征求意见稿,门户网站 销售,网站的设计个人主页:【😊个人主页】 系列专栏:【❤️我欲修仙】 学习名言:莫等闲、白了少年头,空悲切。——岳飞 系列文章目录 第一章 ❤️ 学习前的必知知识 第二章 ❤️ 二分查找 文章目录系列文章目录前言🚗&…

个人主页:【😊个人主页】
系列专栏:【❤️我欲修仙】
学习名言:莫等闲、白了少年头,空悲切。——岳飞


系列文章目录

第一章 ❤️ 学习前的必知知识
第二章 ❤️ 二分查找


文章目录

  • 系列文章目录
  • 前言🚗🚗🚗
  • BF算法
  • KMP算法
    • 介绍:
    • 算法主体
    • next[]数组
  • 总结:


前言🚗🚗🚗

进入修仙界你会遇见许多新奇事务,认识新的好友,还有许多奇遇,那么废话少说让我们进入到今天的冒险吧!

在这里插入图片描述


BF算法

BF算法,即暴力(Brute Force)算法,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。

在这里插入图片描述

int BF( char* b,  char* a)
{int i = 0, j = 0; int ret = i;//i用来控制主串,j用来控制子串,ret用来记录若有完整的匹配的字符串时,该字符串的起始位置//当主串和子串都不为'\0'时,进入循环进行比对while (*(b + i) && *(a + j)){//如果对应元素相同,则都指向下一位if (*(b + i) == *(a + j)){i++;j++;}//不同,则让i回到主串的上一次比较过的元素的第一个元素的后一元素,j赋为0,子串重新比对,//ret则等于新的起始位置else{i = i - j + 1;j = 0;ret = i;}}//若主串对应的元素为0,则代表遍历完成,主串没有与子串相匹配的字符串,if (*b == '\0'){return -1;}//if如果不执行,下面这个return便会执行。返回下标。return ret;
}

显然这种暴力的算法并不高效,于是KMP算法就诞生了。

KMP算法

介绍:

KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。KMP算法的时间复杂度O(m+n)

KMP算法主要分为两部分:1.算法主体 2.获取next[]数组

算法主体

让我们忽略next[]的由来,只是关注算法主体,算法可以写成

int KMP_S(char *a,char *b,int Len_p,int Len_s)
{int i = 0, j = 0;int* next = build_next(b,Len_s);//获取next[]数组while (i < Len_p){if (*(a + i) == *(b + j)){i++;j++;}//如果两个数相同,这两个数组都向下移动   else if (j > 0)j = *(next+j-1);//非第一个字符,从跳过next数重新匹配elsei++;//第一个字符匹配时就失配if (j == Len_s)return i - j;//返回下标值}
}

请添加图片描述

next[]数组

next[]数值代表的是在匹配失败的时候字串中可以跳过匹配的字符个数,通过观察我们不难发现,我们跳过的字符与后面的字符完全相同,即前缀和后缀相同,所以我们可以认为next[]数组的本质就是寻找子串中“相同前后缀的长度,并且一定是最长的前后缀”(不包括其本身)
我们可以使用递归的方式去求解next[]数组:
请添加图片描述

int* build_next(int* b, int Len_s)
{int i, j = 0;int next[MAX] = { 0 };for (i = 1;i < Len_s;i++){while (j > 0 && *(b + i) != *(b + j)){j = next[i - 1];}if (*(b + i) == *(b + j)){next[i] = j;}}return next;
}

总结:

KMP算法比较难以理解,我发现网上大部分讲解KMP算法的文章都比较难懂事实上在这方面我认为还是通过动画视频的方式可以更加直观的认识到KMP算法的运算方式。
这里我推荐:最浅显易懂的 KMP 算法讲解

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#define MAX 100
int next[MAX] = { 0 };
/*int* build_next(int* b, int Len_s)
{int i, j = 0;int next[MAX] = { 0 };for (i = 1;i < Len_s;i++){while (j > 0 && *(b + i) != *(b + j)){j = next[i - 1];}if (*(b + i) == *(b + j)){next[i] = j;}}return next;
}*/
int* build_next(char* b, int Len_s)
{int next[MAX] = { 0 };int len = 0, i = 0;while (i < Len_s){if (*(b + len) == *(b + i)){len++;next[i] = len;i++;}else if (len == 0){next[i] = 0;i++;}elselen = next[len - 1];}return next;}//求解next*/
int KMP_S(char *a,char *b,int Len_p,int Len_s)
{int i = 0, j = 0;int* next = build_next(b,Len_s);while (i < Len_p){if (*(a + i) == *(b + j)){i++;j++;}//匹配成功向下移动   else if (j > 0)j = *(next+j-1);//非第一个字符,从跳过next数重新匹配elsei++;//第一个字符匹配时就失配if (j == Len_s)for (;j < i;j++){printf("%c", *(a + j));return i - j;}}
}
int main()
{char Pst[MAX] = { 0 };char Sst[MAX] = { 0 };int Len_p = 0;int Len_s = 0;fgets(Pst, MAX, stdin);getchar();fgets(Sst, MAX, stdin);Len_p = strlen(Pst)-1;Len_s = strlen(Sst);printf("%d %d\n", Len_p, Len_s);KMP_S(Pst, Sst,Len_p,Len_s);return 0;
}

在这里插入图片描述
(部分文字与图片来源于网络,侵权请联系删除)

http://www.yayakq.cn/news/681872/

相关文章:

  • 小说网站开发的看书软件国际购物网站
  • 网站开发基本语言在兔展上怎么做网站页面
  • 网站开发项目经理主要工作大航母网站建设流程
  • 朝阳网站建设是什么意思杭州建站模板搭建
  • 专门做2手手机的网站网站建设硬件设备
  • 做个平台网站怎么做建网站视频
  • wordpress配置数据库不正确seo顾问张智伟
  • 网站建设企业电话网站建设报销属于什么会计科目
  • 做公司网站软件图片分享功能网站开发
  • 潮州市建设局官方网站如何给企业做网络推广
  • 网站建设合同的注意事项wordpress 插件国际化
  • 怎么自己做网站排名帝国cms 网站搬家
  • 宁阳网站设计网站建设要做哪些前期准备工作
  • 凡科网站制作教程网站建设与经营
  • 任丘网站建设谷歌浏览器 官网下载
  • 郑州网站空间哪些浏览器可以看禁止访问的网站
  • 国家重大建设项目库网站电话网站推广计划方案
  • 新网站推广最直接的方法vs 2012网站开发
  • 建设银行 u盾不弹出网站流量精灵
  • wordpress链接按钮网站的优化与推广
  • 高端建设网站建设精英学校老师给学生做的网站
  • 软件开发计划模板网站后端性能优化措施
  • 苏州建站模板平台三维家官网在线设计
  • 做网站知名的学习网站建筑网站上海
  • 手机网站展示做网站一般需要什么
  • 常州做网站的平板电脑可以做网站不
  • 威海网站建设短信精准群发数字化营销模式及特点
  • 3d效果图教程网站云虚拟主机可以做多少个网站
  • 网站建设中所需条件南通网站建设维护
  • 邢台企业网站建设价格下载大连建设网官方网站