数据结构与算法2

本文探讨了求解最大子列和问题的三种不同算法,包括它们的时间复杂度,分别是O(N^3)、O(N^2)和O(N)。同时,介绍了线性表的概念,如顺序存储和链表结构,并详细讲解了线性表的基本操作及其在存储多项式非零项时的应用。
摘要由CSDN通过智能技术生成

算法应用实例:最大子列和问题

在这里插入图片描述

算法1

int MaxSubseqSuml ( int A[], int N )
{ int ThisSum, Maxsum = 0 ;
int i,j,k;
for( i = 0; i< N;i++{/*i是子列左端位置*/
	for ( j = i;j<N;j++{/*j是子列右端位置*/
		ThisSum= 0; /* 从A[i]到A[j]的子列和*/
			for (k= i;k<=j;k++)
				ThisSum += A[k];
if ( ThisSum › MaxSum)  /* 如果刚得到的这个子列和更大 */
	MaxSum=ThisSum;/* 更新结果*/
}/*j循环结束*/
}/*i循环结束*/
return MaxSum;
}

该算法T(N)=O(N^3) //三个for循环

算法2

int MaxSubseqSum2 ( int A[], int N )
{ int ThisSum,MaxSum = 0;
int i,j;
for( i = 0; i <N; i++ ) {/*i是子列左端位置*/
	ThisSum = 0; /*从A[i]到A[j]的子列和*/
	for( j = i; j< N; j++ ) {/*j是子列右端位置*/
	ThisSum +=A[j];
/*对于相同的i的循环中,不同的j,只要在j-1次循环的基础上累加1项即可*/
if( ThisSum >MaxSum )/*如果刚得到的这个子列和更大*/
	Maxsum= ThisSum; /*则更新*/
}/*j循环结束*/
}/*i循环结束*/
return MaxSum ;
}

该算法T(N)= O(N^2) //两个for循环

算法三

int MaxSubseqsum4 ( int A[], int N )
{ int ThisSum,MaxSun ;
int i;
ThisSum = MaxSum= 0;
for( i = 0; i <N; i++ ){
	ThisSum+=A[i];/*向右累加*/
	if( ThisSum > MaxSum )
 	 MaxSum = ThisSum; /*发现更大和则更新当前结果*/
	else if( ThisSum < 0 )/*如果当前子列和为负*/
 	 ThisSum = 0; /*则不可能使后面的部分和增大,抛弃之*/
}
return Maxsun ;

T(N)=O(N) //一个for循环加if elseif 常数

线性结构

线性表及其实现

引入

关于多项式的表示:n 项数,ai系数,i指数
1.顺序存储
在这里插入图片描述
当遇到指数很庞大而项数少则会出现很多项系数为0也要占存储空间 e.g x+5x^200
2.顺序存储非零项
把一个多项式看成是一个( ai,i )二元组的集合。

在这里插入图片描述
在这里插入图片描述
3.链表结构存非零项
链表每个节点存(系数coef 指数expon 指针域)
在这里插入图片描述

什么是线性表(List)

同类型数据元素构成有序序列的线性结构
长度:元素个数
没元素叫空表
起始表头 结束表尾
线性表基本操作:
1、List MakeEmpty():初始化一个空线性表L;
2、ElementType FindKth( int K, List L):根据位序K,返回相应元素﹔
3、int Find( ElementType X, List L):在线性表L中查找X的第一次出现位置
4、void lnsert( ElementType X, int i,List L):在位序i前插入一个新元素X;
5、void Delete( int i, List L):删除指定位序i的元素;
6、int Length( List L ):返回线性表L的长度n。

线性表顺序存储

根据前面引入,利用数组连续存储空间顺序放线性表元素

typedef struct LNode *List;
struct LNode{
	ElementType Data[MAXSIZE];
	int Last;
}struct LNode L;
List PtrL;

访问下标为i的元素:L.Data[i]或PtrL->Data[i]
线性表的长度:L.Last+1或PtrL->Last+1 //从0开始算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值