• 第四章心得体会


    一、内容小结

    数据结构第四章学习的是串,数组和广义表

    串的定义其实在c++学习中就有所接触,串的逻辑结构和线性表极为相似,区别仅在于串的数据对象约束为字符集。在线性表的基本操作中,大多以“单个元素” 作为操作对象,在串的基本操作中,通常以“串的整体”作为操作对象,

     重点说的是两个串模式匹配算法

    1.BF算法

    BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;

    若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。

    2.KMP算法

    KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。

    具体实现就是实现一个next()函数,函数本身包含了模式串的局部匹配信息。时间复杂度O(m+n)。

    二、作业实践的心得体会

    7-1 串的模式匹配 (30 分)
    KMP算法的代码实现运用到此题
    int Index_KMP(SString S, SString T, int next[]) { //S主串,T模式串
        int i = 1, j = 1;       //i指主串,j指模式串
        int result = 0;
        while (i <= S.length&&j <= T.length) {
            if (j == 0 || S.ch[i] == T.ch[j]) {     /如果匹配接着往下比较,不匹配就右移T
                i++;
                j++;
            }
            else {
                j = next[j];
            }
        }
        if (j > T.length) {     //当j到最后仍与主串相等+1时匹配成功
            result = i - T.length;
        }
        return result;
    }
    

      



    主要还是getnext函数
    void getNext(SString T, int next[]) {
        int i = 1, j = 0;   
        next[1] = 0;
        while (i < T.length) {
            if (j == 0 || T.ch[i] == T.ch[j]) { 
                i++;
                j++;
                if (T.ch[i] != T.ch[j]) {   //i和j都右移后如果不同,把最长串最后一个的位置给next
                    next[i] = j;
                }
                else {          //但是如果相同,就让next变为next[j]        
                    next[i] = next[j];
                }
            }
            else {              //如果j不为0且ch[i] 与 ch[j]不等,表示之前有相同串,但右移后又不同了  
                j = next[j];
            }
        }
      
    }
    

      2、求集合交集

    这部分代码思路还是比较简单的,不过需要注意的是,输出的格式 第二行按非降序输出交集元素,所以在需要进行排序,查找相关资料可以调用sort函数,不过需要注意的是写它的头文件#include <algorithm>


    三、下一阶段的目标
    感觉自己的代码能力有了小小的提升,还是希望自己能够好好巩固一下这章学习的内容,接下的内容也要好好学习!
  • 相关阅读:
    MySQL系列(四)--数据库结构优化、范式化与反范式化
    Java数据结构和算法(二)--队列
    Java数据结构和算法(一)--栈
    MySQL系列(三)--MySQL存储引擎
    Java集合(六)--ArrayList、LinkedList和Vector对比
    Java集合(五)--LinkedList源码解读
    Java集合(四)--基于JDK1.8的ArrayList源码解读
    P1048 采药(洛谷,动态规划递推,01背包原题)
    P1091 合唱队形题解(洛谷,动态规划LIS,单调队列)
    语法摔过的坑(用来给自己看的,粗糙,勿点)
  • 原文地址:https://www.cnblogs.com/lsy-273700263/p/12827552.html
Copyright © 2020-2023  润新知