第四章总结
Posted linyulan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第四章总结相关的知识,希望对你有一定的参考价值。
一、病毒匹配这个程序主要就在三个函数
第一个比较简单,想方设法把下标0从1开始,
于是,就用了strcat 的方法,在主串和模式串的前面加个任意字符的。
但是在vs 的时候出现了一个内存不足的问题?
于是把这个改成了如图所示 strcat_s, 编译没有问题了,但是在pta 上面会显示编译错误。
当变成原来的就又成功了。。。但是在vs上无法成功,
存在异常??是什么东西??
这个问题还没有解决。
第二个函数就是得到next[ ] 的值,这个很难搞懂,搞懂了也不会自己打,还是看着书来的,自己写的注释也不知道对不对,不知道理解有没有问题。
但是总觉得模模糊糊,乱七八糟的。反正主要目的是找到最长相同前后缀,经过看了好几次某同学的博客终于大概理解了一点。
第三个函数是kmp 算法,据我理解应该就是比较主串的i 位置与模式串的j 位置是否相同,与BF算法不同的是,KMP回溯的是模式串的j ,令j = next[ j ],容易理解。
BF算法是比较容易理解的,遇到不相同的就将主串的i 回溯到之前的下一个继续匹配,但是很浪费时间,其时间复杂度为n*m;
而KMP的是m+n;
这是本次通过写这道题得出的一些小看法。
二、稀疏矩阵
(非零元素比较多)
主要就是这个三元组
typedef struct { int i; //行 int j; //列 int value; //值 }node; //三元组 typedef struct { int m; //行 int n; //列 int cnt; //非零个数 node a[500];//三元组 }matrix; matrix m;
三、AI核心代码
虽然是老师手把手交的,但还是又很多问题出现。
int main() { int n; string s; cin>> n; getchar(); //吸收回车<cstdio> for(i=0;i<n;i++) { getline(cin,s); cout<<s<<endl; cout<<"AI:"; go(s); //根据s 输出AI } return 0; } void go(string s ){ //根据s输出AI;下面写关于AI的要求 string t;//新字符串 int i,j; //i定位到s 的第一个非空 for(i=0; s[i]!=‘