一.上机内容
1、实现串的模式匹配算法。
2、实现稀疏矩阵的三元组表压缩存储方法
3 *、三元组表压缩存储方法基础上实现稀疏矩阵的转置,主要涉及矩阵中每一行非零元素的个数的求解方法和转置矩阵的每一行中的第一个元素在其三元组表中的存储位置的计算。
二.代码实现
1、实现串的模式匹配算法。
1.Brute-Force模式匹配算法
/**
* 返回模式串t在主串从start开始的第一次匹配位置,匹配失败返回-1
* @param t
* @param start
* @return
*/
public int indexof_BF(IString t,int start){
// 当主串比模式串长的时候才开始比较
if (this!=null && t!= null && t.length() > 0 && this.length > t.length()) {
// i表示主串中某个子串的序号
int slen, tlen, i = start, j = 0;
// 主串的长度
slen = this.length();
// 匹配串的长度
tlen = t.length();
// i和j都在比较范围内
while ((i < slen) && (j < tlen)) {
// j为模式串当前字符的下标
if (this.charAt(i) == t.charAt(j)) {
i++;
j++;
} else {
// 继续比较主串中的下一个子串
// i-j+1就是在本次比较前,往后走一个字符
i = i - j + 1;
// 模式串下标退回0
j = 0;
}
}
// 如果匹配成功,返回子串序号
// 运行到这里,不一定是j超出了范围,还有可能是i超出了范围,i超出范围但是j没有,说明匹配失败
if (j >= t.length()) {
return i - tlen;
} else {
return -1;
}
}
return -1;
}
2.KMP模式匹配算法
/**
* next[j]函数
* @param T
* @return 返回模式串的next[j]数组
*/
public int[] getNext(IString T){
// next[]数组
int[] next = new int[T.length()];
//主串指针
int j = 1;
// 模式串指针
int k =