今天的学习任务是粗略了解hash算法,然后是继续熟悉kmp算法,做相关例题;

hash算法的了解

哈希查找是一种快速查找算法,该算法不需要对关键字进行比较,而是以关键字为自变量,以该关键字在存储空间中的地址为因变量,建立某种函数关系,称为哈希函数,这样在查找某一关键字的时候,就可以通过哈希函数直接得到其地址,有效的提高了查找效率。

自我理解就是,一个很难表示东西给它贴上标签,然后直接通过标签找到这个东西,如果是要找一个学生的基本信息,只要知道这个学生的学号,然后通过hash函数直接找到信息,然后具体体现就是可以利用余数的做法来将数据集中起来(其实我感觉和桶排序有点像,但是实用性会更好),就比如说有一组数据{1,200,900,1900},我如果要查找1900,那么我就要从头开始遍历,知道遍历到1900,但是,很明显这样又浪费时间又浪费空间,那么这个时候我们可以利用hash函数,重新给1900赋予一个新的编号;

那么经过hash函数的处理,可以将四个数集中在一起,那么只要遍历完4,就可找到这四个数的任意一个数,那么就节省了许多空间和时间;

这个时候有三个余数都为0,那么这个时候就是说发生了哈希冲突,那么大致有俩种解决方式,关于hash函数的重点其实是当数与数之间出现冲突的时候的处理方式,大致总结出来就是,一个是往外延伸,另一个是往后延伸;

其中往外延伸的意思是:

通过链表的方式,向外扩

还有一种就是往后推

意思是 hash [ 900 ]=hash[ 900+1 ](每次最好加的是质数,然后其实有很多种加的方式,比如说每次加查找次数的平方,这么加查找的次数就会减少一点)

大致对hash的理解就是这样

kmp例题

例一 Barn Echoes G

关于题目的表述,大概意思就是给出俩段字符串,找出最长的重复段。

然后基本思路是,让俩个字符串分别作为前缀和后缀进行查找,然后比较俩种情况得出来的字符串哪个更长,然后输出,至于为什么这么做,本来找kmp中next数组就是找前缀后缀相同的情况,那么这个题目也是这么个意思,同样也是找相同的段,那么相同的道理,我先不管找多长的重复串,假设就是想把所有的重复串找出来,那么意思不就跟next数组一样了吗,所以只要利用相同的逻辑,得出结果

代码

#include <stdio.h>
#include<string.h>int coni(char a[100],char b[100])
{int num,i,j;int len1,len2;len1=strlen(a);len2=strlen(b);for(j=0; j<len2; j++) {i=0,num=0;if(a[i]==b[j]){while(a[i]==b[j] && i<len1 && j<len2){num++;i++;j++;}if(b[j]==0)return num;}}return 0;
}
int main()
{char s1[81],s2[81];int len1,len2;scanf("%s %s",s1,s2);len1=coni(s1,s2);len2=coni(s2,s1);printf("%d",len1>len2?len1:len2);return 0;
}

学习日记(1.12)相关推荐

  1. App Inventor菜鸟学习日记 2013/12/6

    今天是接触到App Inventor的第三天,总的感觉就是让我这个曾经因为看太久屏幕把眼睛看出病倒在初学JAVA的道路上的小菜鸟又看到了学习编程的希望.废话不多说,先介绍一下App Inventor, ...

  2. C语言学习日记(12)——回溯法解迷宫(1)

    走迷宫是一种经典的智力游戏,相信很多人都玩过.我们走迷宫的过程一般是这样的:从入口开始尝试,如果走到某个位置有几种方案可以选择,则选择其中的一种方案进行尝试,不断重复这个过程.如果走不通,就回退到前一 ...

  3. 蓝桥直通车学习日记12.13

    蓝桥直通车学习日记(12.13) 添加注释的方法 添加注释的方法有两种 单行注释 多行注释 // 这是一个单行注释 /*这是一个多行注释*/ 现代模式, "use script" ...

  4. (学习日记)2023.4.12

    写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈. 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈. 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录, ...

  5. GPU(CUDA)学习日记(十一)------ 深入理解CUDA线程层次以及关于设置线程数的思考

    GPU(CUDA)学习日记(十一)------ 深入理解CUDA线程层次以及关于设置线程数的思考 标签: cuda存储线程结构网格 2012-12-07 16:30 6298人阅读 评论(4)收藏 举 ...

  6. GPU(CUDA)学习日记(九)------ CUDA存储器模型

    GPU(CUDA)学习日记(九)------ CUDA存储器模型 标签: cuda存储bindingcache编程api 2012-09-27 10:53 1677人阅读 评论(1) 收藏 举报 分类 ...

  7. FireBird Embedded学习日记

    FireBird Embedded学习日记   FireBird简介 Firebird是一个真正的关系数据库,支持存储过程.视图.触发器.事务等大型关系数据库的所有特性:不用考虑授权费用(免费),不用 ...

  8. 爬虫学习日记1-豆瓣top250电影信息爬取

    @ 爬虫学习日记1-豆瓣top250电影信息爬去 学习任务:结合requests.re两者的内容爬取https://movie.douban.com/top250里的内容, 要求抓取名次.影片名称.年 ...

  9. OpenCV学习日记(2)

    绪言 图像基本要素简介 1.灰度色彩空间 2.BGR色彩空间 3.HSV色彩空间 数学知识简介 图像处理中的数学 连续傅里叶变换 离散时间傅里叶变换 离散傅里叶变换 傅里叶逆变换 卷积 滤波器 简介 ...

  10. informatica 学习日记整理(转)

    1. INFORMATICA CLIENT的使用 1.1 Repository Manager 的使用 1.1.1 创建Repository. 前提: a. 在ODBC数据源管理器中新建一个数据源连接 ...

最新文章

  1. linux shell脚本攻略_(python)Linux下shell脚本监控Tomcat的状态并实现自动启动步骤...
  2. JHipster技术简介
  3. ATM高层定义了4类业务,压缩视频信号的传送属于______。B
  4. 斯坦福大学科学家研发微型植入式神经刺激器
  5. 1151 LCA in a Binary Tree (30 分)【难度: 难 / 知识点: LCA 未完成】
  6. 超微服务器 旧系统盘 新服务器,超微服务器做系统
  7. springboot+dynamic多数据源配置
  8. 利用Helm简化Kubernetes应用部署(1)
  9. git第一次提交代码至远程仓库步骤
  10. 数据结构期末复习之B树、B+树
  11. 计算机系要考英语口语吗,2015年高考英语口语由计算机“打分”,这些细节要注意!...
  12. 走火入魔的 C/C++ 如何通过编译器预定义的宏值来区分 target OS 是 Windows 还是 Linux...
  13. 重磅推荐:2017 年最流行的 15 个数据科学 Python 库
  14. IBGP的自己下一跳,指定源命令。
  15. 超详细的OpenCV入门教程,12小时带你吃透OpenCV。
  16. 疲劳检测(一)Landmark + HeadPose
  17. C/C++ 找出最大素数 算法
  18. 电子技术应用课程设计
  19. 时序分析/约束(一):相关概念
  20. java操作word宏

热门文章

  1. iOS“伪后台“机制下如何保持APP一直运行在后台
  2. Vivado Digilent IP核
  3. Leetcode 1022:从根到叶的二进制数之和(超详细的解法!!!)
  4. 京东商城的title
  5. laravel 发邮件 qq配置
  6. 3D点云处理:数据集生成点云
  7. signature=7869ee9cbc095e9d3615b893510e566e,Digital Signature Schemes for Secure Video
  8. 小米机器人扫地机贴纸_小米扫地机亲测,真的好用
  9. 每步科技动态域名怎么用
  10. 统计英文句子中有多少个英文单词 单词之间用空格分开