5.6 广义表描述 m元多项式

  • 一个一元多项式可以用一个长度为 n,每个数据元素有两个数据项(系数项和指数项)的线性表来表示。

  • 对于 m 元多项式:
    一个 m 元多项式的每一项,至多有 m 个变元。
    用线性表来表示,每个数据元素需要 m+1 个数据项,以存储 1 个系数值和 m 个指数值。

  • 若每个数据元素都用 m+1 个数据项来表示,会造成存储空间的浪费;
    按实际大小来给每个数据元素分配空间,那么每个节点的大小是变化的,因此采用链式结构来表示 m元多项式

  • 实例:

P(x, y, z ) = x10y3z2 + 2x6y3z2 + 3x5y2z2 + x4y4z + 6x3y4z + 2yz + 15

改写为
P(x, y, z ) = ( ( x10 + 2x6 ) y3 + 3x5y2 ) * z2 + (( x4 + 6x3 ) y4 + 2y ) * z +15

可以把多项式 P 看作:A z2 + B z + 15 Z0,以 z 为变元的一元多项式
而 A 和 B 均又可以看作 以 y 为变元的一元多项式,依此类推。

  • 用广义表来表示 m元多项式:
P = z( (A, 2), (B, 1), (15, 0) )

A = y( (C, 3), (D, 2) )
B = y( (E, 4), (F, 1) )

C = x( (1, 10), (2, 6) )
D = x( (3, 5) )
E = x( (1, 4), (6, 3) )
F = x( (2, 0) )
  • 利用广义表的第二种存储结构来表示 m元多项式
    在这里插入图片描述
    其中,exp 为指数域,coef 为系数域,tp 指向同一层的下一结点
typedef struct MPNode
{
	ElemType tag;		// 区分原子结点0 还是表结点1
	int exp;			// 指数域
	union
	{
		float coef;		// 系数域
		struct MPNode * hp;	// 表结点的表头指针
	}
	struct MPNode *tp;		// 相当于线性链表的next,指向下一个元素节点
} *MPList;					// m 元多项式广义表类型
  • 用图形表示上面的多项式
    在每一层上增设一个表头结点并利用 exp域 指向该层的变元,用一个一维数组存储一个多项式中的所有变元,exp域中存对应边缘的下标即可。
    头指针 p 的 exp 域中是该多项式中所有变元的个数。

在这里插入图片描述

  • 4
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值