昨天首先学习了Hash表,Hash表能够快速定位到想要查找的记录,而不是与表中存在的记录的关键字进行比较来进行查找。这是因为它用函数映射的思想将记录的存储位置与记录的关键字关联起来,从而能够很快速地进行查找。
Hash表的一大应用是字符串Hash,将一个字符串转化为一个可以代表它的数字,在调用,查询这个字符串的任何一部分时都是可以的,并且大大缩短了时间复杂度,可以用o(1)的算法实现。
后来又看了后缀数组,后缀数,组通过将后缀按字典序排序,得到关键的3个数组:
sa[i]:排名为 i 的后缀的起始下标。
rank[i]:起始下标为 i 的后缀的排名。
height[i]:Suffix[sa[i]]和Suffix[sa[i-1]]的最长公共前缀,即为排名相邻的两个后缀的最长公共前缀。
题目一般都是通过操作这3个数组来求解。
然后又看了大佬的博客,总结的很详细,像是单个字符串相关问题,重复子串问题,子串计数问题,等等,十分全面,今天想把它们在看完配合着例题的学习。
再说一下晚上做的题的情况,每次出的都是那些最简单的思维或模拟题加上前缀和什么的优化一下,那些一涉及到算法的题例如dp,搜索之类由于自己还没看到那部分,就会心生恐慌。哎,还是自己学的少。
昨天老师发了一个程序设计竞赛涉及到的算法知识,有一些是听过的,也有很多只是闻其名但见都没见过的,但这个能让我对竞赛时会涉及到的算法有一种熟悉感,就好像是给了你一个学习的大纲让你去学就是啦,以后在学习新知识或做题时但凡涉及到这些提到的算法时,都要认真学习弄懂。
有学习努力 付出才能学到知识,今天是在家的第一天,在如此舒适的环境里,我一定要按照计划一步步地走,进一步提高学习的深入度和效率。