数据结构第四章学习小结

一、本章内容的小结

  本章学习的数据结构在前面的学习已经打好了基础。串其实就是string的抽象说法:在顺序存储下用法与string一样;同时比以前多了一种链式存储的方式。

  本章最重要的内容是串模式匹配算法:BF、KMP算法。讲真我觉得KMP算法太难搞懂了(哭.jpg),神奇的是如果先找出模式串中重复的最长子串就能大大地提高效率,不过还没明白为什么。。还有下标的回溯也好乱。。。有一种好像大概能明白但不是非常清楚的感觉。太难受了。

  接着剩下的内容是数组跟广义表。通过作业初步了解了稀疏矩阵的两种压缩方法:三元组存储方式&十字链表存储方式:三元组存储的方法在老师的视频中给出,共有三个域(成员变量),分别是i,j,e(行,列,值);十字链表存储的方法在百度上可以查到,共有五个域,分别是i,j,e,*down(纵向下一个结点的地址),*right(横向下一个结点的地址)。

  我看了多维数组的ADT定义,看不懂前面的数据对象跟数据关系,我百度了好久也没找到对应的解释,希望有人能解答。。。

  广义表是树结构,线性表的推广,其定义是一个递归的定义。

 

二、完成作业或实践时的心得体会

  这一次PTA的完成比上一次进步许多。

  1)对于《串的模式匹配》那题,我没有使用KMP算法,用的是比BF算法稍微好那么一些的方法,所以结局是最后一个测试点运行超时……需优化,但估计还得用KMP。我觉得可能在一步步的优化过程中就能理解KMP算法了。

  2)在做《求集合交集》时,与之前做的对比了一下,找到了不一样的地方。

   然后有两种方法:

1. 两个集合先排序再求交集

2. 先求交集再排序 

  我尝试分析了一下时间复杂度,觉得第2种方法更高效一些(尤其是当两个集合元素很多但无交集的时候),但是觉得有些难操作(原因如下):

题目要求先输出交集个数,再换行输出交集元素。这意味着要先存好交集,不能找到一个交集元素就输出一个。但是交集个数不确定,如果一下子开个c[100000]来存交集元素感觉有些浪费空间,再者记得之前说过在内存中连续开辟很长的空间是很难实现的(现实中内存空间比较碎),所以我想着用链表存交集。但是问题又来了,,,(无奈.jpg)链表不能随机存取,排序不像数组那样好操作…

  于是最终采取第1种方法,更无奈的是也是最后一个测试点超时了。或许用第2个方法同时用数组存交集(放弃对空间的执着),说不定能通过。

 

三、没有什么分享的资料

四、上一阶段的目标完成情况,接下来的目标

1)

上一阶段的目标:完成、搞懂老师布置的所有讨论、分组任务、作业和实践

完成情况:92%完成度。

漏了一次评论(评论6个人的那个),后来自己写了一遍字符串截取的代码,看了老师发的资料;分组任务搞懂了;作业跟实践的完成是最好的一次,虽然两个都是最后的测试点没过。

剩下的任务:KMP算法 以及 作业跟实践的代码没修改完。

2)接下来的目标(与原来一样):完成、搞懂老师布置的所有讨论、分组任务、作业和实践

你可能感兴趣的:(数据结构第四章学习小结)