数组与字符串总结

news2024/11/23 16:44:53

一、数组

基本概念

特点:顺序存储,每个元素大小,类型相同,元素有限

高维数组可以转化为一维数组

高维数组存放次序:按行优先或者按列优先

按行优先的寻址公式:

  1. 二维数组a[m] [n]: Loc(a[i] [j]) = Loc(a[0] [0]) + (i*n+j) * C
  2. 三维数组a[m] [n] [p]: Loc(a[i] [j] [k]) = Loc(a[0] [0] [0]) + (i*n *p +j * p + k) * C
  3. a[i1] [i2]…[in] =在这里插入图片描述

按列优先的寻址公式:

  1. 二维数组a[m] [n]: Loc(a[i] [j]) = Loc(a[0] [0]) + (j*m+i) * C
  2. 三维数组a[m] [n] [p]: Loc(a[i] [j] [k]) = Loc(a[0] [0] [0]) + (k*m *n +j * m + i) * C
  3. a[i1] [i2]…[in]= 在这里插入图片描述

举例:

A[0:2,0:4,0:10,0:2],A[I] [J] [K] [L] 地址计算公式

按行优先:

*Loc(A)+(165I+33J+3K+L)C

按列优先:

*Loc(A)+ (165L+15K+3J+I)C

二、矩阵

1、矩阵的乘法操作

**思路:**三重for循环实现

//矩阵乘法
void mul(int a[][maxsize], int b[][maxsize], int ans[][maxsize],int a_m, int a_n, int b_m, int b_n){//a_m,a_n为a的行数与列数,b_m,b_n为b的行数与列数
	int i,j,k; 
	for(i=0; i < a_m; i++){	//三重for循环 
		for(j=0; j < b_n; j++){
			for(k=0; k < a_n; k++){
				ans[i][j] += a[i][k] * b[k][j];
			} 
		}
	} 
} //O(n^2*m)

2、特殊矩阵的压缩存储

特殊矩阵:(转化为一阶矩阵存储都是下标从0开始)

  1. 对称矩阵的压缩存储 (注意是1开头)

    • 一共N(N+1)/2元素

    • 行优先存储:掌握自己推导

      • i>=j d[k] = i(i-1)/2 + (j-1) 下三角区域
      • i < j, d[q] = j(j-1)/2 + (i-1) 上三角区域
  2. 三角矩阵

    • 上三角矩阵 i<j M(i,j) = 0
      • 寻址方式:
        • 行优先:k = n + n-1 + n-i+2 + (j-i)
        • 列优先: k = 1+2+…+(j-1)+(i-1)
    • 下三角矩阵i>j M(i,j) = 0
      • 寻址方式:
        • 行优先:k = 1+2+…+(i-1)+(j-1)
        • 列优先:k = n + n-1 + n-j+2 + (i-j)
  3. 对角矩阵

    • 三对角矩阵(带状矩阵)的压缩存储

      • 在这里插入图片描述

      • |i-j|>1时,有ai,j = 0(1<=i,j<=n)

      • 行优先

        • 前 i-1 行共有3(i-1)-1个元素
        • ai,j是第 i 行第j-i+2个元素
        • ai,j为2i+j-2个元素, 一维数组是从0开始的 k = 2i+j-3
        • 第k+个元素 计算第几行第几列
          • 3(i-1)-1 < k+1 <= 3i-1 ==> i >= (k+2)/3 向上取整得第几行
    • 对于一个n*n的矩阵,最多只有n个非0元素,只需存储n个对角元素信息即可。直接采用一维数组d[i]存储M(i,i)的值

  4. 稀疏矩阵

    • 三元组 <行,列,值>定义一个新的结构体

      • 在这里插入图片描述
    • 十字链表 定义一个新的结构体

      • 在这里插入图片描述

      • 在这里插入图片描述

三、字符串

1、朴素模式匹配

思路:

  • 不断比较,如果相同就继续比较,如果不同就重新比较,下标关系为:

    i = i-j+1;				//i-j表示i回到起始前的一个位置      +1表示下一个子串的起始位置 
    j = 0;					//j重新回到0
    
  • 如果最后j等于模式串长度,说明匹配成功,返回 i-tlen,匹配成功的起始位置,不相等,匹配失败

代码:

//1、朴素模式匹配
int NaiveMatch(char *s, char *t){	//s为主串, t为模式串
	int lens = strlen(s), lent = strlen(t);
	int i=0,j=0;
	while(i < lens && j < lent){
		if(s[i] == t[j]){			//匹配成功,继续匹配 
			i++;
			j++;
		}
		else{						//匹配失败,模式串从头开始匹配,主串 
			i = i-j+1;				//i-j表示i回到起始前的一个位置      +1表示下一个子串的起始位置 
			j = 0;					//j重新回到0 
		} 
	} 
	if(j == lent) return i-lent;
	else return 0; 
} 

2、KMP算法

思路:

  • 关键是求失败函数
    • 不断迭代找到当前i所指的值与s[k+]所指的值相同的下标
    • 如果s[i]==s[k+1],匹配上了,失败函数为f[i]的值就为k+1,否则为-1
  • KMP算法前面与朴素模式匹配一样,在匹配成功时或者j==0时,同时+1
  • 如果匹配失败,下一个j的值为失败函数对应的值

代码:

//关键:失败函数
void Fail(char *s, int f[]){
	int len = strlen(s);
	f[0] = -1;
	int i=1,k=0;
	for(i=1; i < len; i++){
		k = f[i-1];						//k指向当前位置的前一个元素,前k项与第i-1往前找k项相同,如果第k+1项与第j项不同 
		while(s[i]!=s[k+1] && k>=0){
			k = f[k];					//迭代求下一个位置,保证k不越界 
		}
		if(s[i] == s[k+1]){				//如果存在,就加1 
			f[i] = k+1;
		}
		else{							//不存在,赋值为-1 
			f[i] = -1;
		}
	}
} 

int KMP(char *s, char *t){			//s为主串,t为模式串 
	int lens = strlen(s), lent = strlen(t);
	int f[lent];
	int i=0,j=0;
	
	Fail(t,f);						//求得失败函数
	while(i<lens && j < lent){
		if(j==0 || s[i] == t[j]){
			i++;
			j++;
		}
		else{
			j = f[j-1]+1;
		}
	} 
	if(j == lent) return i-lent;
	else return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/53764.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ajax axios JSON Fastjson

1、概述 AJAX (Asynchronous JavaScript And XML) &#xff1a;异步的JavaScript和XML AJAX工作流程如下: 1.1、作用 AJAX作用有以下两方面&#xff1a; 1&#xff09;与服务器进行数据交换&#xff1a;通过AJAX可以给服务器发送请求&#xff0c;服务器将数据直接响应回浏览…

算法训练Day36 贪心算法系列 - 重叠区间问题 | LeetCode435. 无重叠区间;763. 划字母区间;56.合并区间

前言&#xff1a; 算法训练系列是做《代码随想录》一刷&#xff0c;个人的学习笔记和详细的解题思路&#xff0c;总共会有60篇博客来记录&#xff0c;计划用60天的时间刷完。 内容包括了面试常见的10类题目&#xff0c;分别是&#xff1a;数组&#xff0c;链表&#xff0c;哈…

【Linux】快捷键

Ctrl C&#xff1a;终止当前命令

星环科技数据中台解决方案,助力某政府机构建设新型智慧城市

客户背景 城市&#xff0c;是人们工作生活的栖息地&#xff0c;也是展示发展成果的全景图。某政府机构不仅注重城市“中枢大脑”的建设&#xff0c;而且兼顾“神经末梢”的需求&#xff0c;既有技术进步的“面子”&#xff0c;更有民生保障的“里子”。站在新的起点上&#xff…

Linux计划任务管理

一&#xff0c;计划任务管理&#xff1a; 任务管理很宽泛&#xff0c;这里是指的计划任务管理&#xff0c;在指定的时间执行。 1&#xff0c;at命令 &#xff1a; 由atd守护进程来执行&#xff0c;atd进程会定期检查系统上的 /var/spool/at 目录&#xff0c;获取at命令写入的任…

如何建立你的财务体系?

天下人都想同时实现财务管理民主自由&#xff0c;换言之一下&#xff0c;你躺在毛里求斯的海滩上&#xff0c;吹着南风&#xff0c;晒着月亮&#xff0c;还有总收入源源不绝的流向&#xff0c;阿涅尔&#xff1f; 那么&#xff0c;怎样同时实现&#xff1f;坚信我们都知道投资…

准备大半年,面试频繁受挫,Java岗面试为何越来越难?

作为一名优秀的程序员&#xff0c;技术面试都是不可避免的一个环节&#xff0c;一般技术面试官都会通过自己的方式去考察程序员的技术功底与基础理论知识。 如果你参加过一些大厂面试&#xff0c;肯定会遇到一些这样的问题&#xff1a; 1、看你项目都用的框架&#xff0c;熟悉…

什么是链动2+1模式?链动2+1模式玩法解析

链动21模式玩法解析 模式框架&#xff1a;代理、老板 奖励机制&#xff1a;平级奖、见点奖、平级奖、帮扶基金、分红奖 商业模式玩法&#xff1a;每一个代理晋升为老板的同时&#xff0c;都需要给上级代理留下“两个原始种子用户”&#xff0c;咱们这里就俗称“感恩机制”。…

双十二有哪些数码好物值得入手、双十二必买数码好物清单

双十二马上就到了&#xff0c;相信很多小伙伴已经按耐不住想要入手了吧&#xff1f;但如果目前还没什么头绪&#xff0c;不知道买什么的话&#xff0c;现在就不妨来抄一下作业吧&#xff01;近期我整理了一份双十二数码好物清单&#xff0c;都是我从用户评价、产品亮点、折扣力…

python中base64编码

1. base64编码简介 用记事本打开exe、jpg、pdf这些文件时&#xff0c;我们都会看到一大堆乱码&#xff0c;因为二进制文件包含很多无法显示和打印的字符&#xff0c;所以&#xff0c;如果要让记事本这样的文本处理软件能处理二进制数据&#xff0c;就需要一个二进制到字符串的…

Perl与JS的对比分析(数组、哈希)

一、数组 可以对数组进行增删&#xff0c;插入。与JS不同的是这些函数都是全局的&#xff0c;JS则是挂在Array.prototype上。 1&#xff0c;对数组尾部的操作pop&#xff08;删除最后的元素&#xff09;、push&#xff08;在尾部添加&#xff09; 1 2 3 goods qw/pen penci…

[附源码]JAVA毕业设计婚纱影楼服务管理(系统+LW)

[附源码]JAVA毕业设计婚纱影楼服务管理&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术…

BluePrism里WorkQueue的几种传法和区别

WorkQueue是开发中的好帮手&#xff0c;流程间任务流转非常方便&#xff0c;基本可以取代数据库的场景。 一.循环SourceData单行传入 把Queue的Item Key搭好New Item Data本来为空的collection&#xff0c;每次循环增加一行把Item Key加入New Item Data.Item KeyNew Item Data加…

SpringBoot+Vue实现前后端分离的员工日志管理信息系统

文末获取源码 开发语言&#xff1a;Java 使用框架&#xff1a;spring boot 前端技术&#xff1a;JavaScript、Vue.js 、css3 开发工具&#xff1a;IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库&#xff1a;MySQL 5.7/8.0 数据库管理工具&#xff1a;phpstudy/Navicat JD…

以工程化路径破题,中国系统推动数据要素化

光阴似箭&#xff0c;大数据产业已走过十余载。 如今&#xff0c;人们在各种数字化场景中深刻感受到数据所蕴含的巨大价值&#xff0c;也深深为数据滥用、数据窃取、数据非法交易等各种乱象而担忧。似乎&#xff0c;数据安全与和数据流动、共享与使用已成一对天然的“矛盾”&a…

15.前端笔记-CSS-PS切图

1、图片格式 格式优点jpg同jpeg,产品类图片常用&#xff0c;高清&#xff0c;颜色多gif可以保存成透明背景和动画效果&#xff0c;图片小动画常用&#xff0c;最多存储256色png结合了jpg和gif的优点&#xff0c;保存为背景透明&#xff0c;存储形式丰富psdphotoshop的文件格式…

JMM(Java Memory Model)

Java虚拟机规范中定义了Java内存模型&#xff08;共享内存模型&#xff0c;实现线程与线程之间的通信&#xff0c;其中主内存是逻辑空间&#xff09;&#xff0c;用于屏蔽掉各种硬件和操作系统的内存访问差异&#xff0c;以实现让Java程序在各种平台下都能达到一致的并发效果&a…

30张图 讲清楚Redis Cluster

今天下午和一位同学聊Redis集群&#xff0c;这玩意真没那么简单&#xff0c;内容非常多。 Redis Cluster是Redis官方提供的Redis集群功能。 1.为什么要实现Redis Cluster 1.主从复制不能实现高可用 2.随着公司发展&#xff0c;用户数量增多&#xff0c;并发越来越多&#x…

基于微分段的东西向安全防护,如何提升数据中心运维效率?|社区成长营分享回顾

在社区成长营网络与安全第二期分享中&#xff0c;SmartX 高级产品营销经理张涛介绍了原生于超融合系统的微分段防火墙和其工作模式的特点&#xff08;点击查看第二期图文总结&#xff09;。 网络与安全第三期分享继续由张涛老师提供&#xff0c;以下为内容回顾。 SmartX 社区成…

品质创未来!流辰信息技术公司实力谱新章!

对于一个企业而言&#xff0c;一辈子用心做好一件事就是对社会最大的贡献。自从深耕于低代码开发平台领域以来&#xff0c;流辰信息技术公司便时刻保持着奋斗和创新的研发心态&#xff0c;不仅增强自主创新能力&#xff0c;而且还积极扩大队伍团队和实力&#xff0c;立志为每一…