如何实现两个多项式合并

一、算法分析

现假设有两个多项式,均按升序排列,要将如下两个多项式进行合并,合并后的新序列仍按升序排列:

多项式1:x^2 + 2x^3 + 3x^5

多项式2:x + 2x^2 + 8x^4 + 4x^5

进行合并的基本思路如下:

      多项式1和多项式2均从第一项开始循环,比较其幂指数是否相同。若a1(多项式1中的某一项)的幂指数大于b1(多项式2的某一项)的幂指数,则将a1追加入新申请的数组中;如果b1的幂指数大于a1的幂指数,则将b1追加入新申请的数组中;如果a1和b1的幂指数相同,则将这两项的系数相加,追加入新申请的数组中。循环结束后,若某一多项式仍有项,则将剩余的项全部追加进新申请的多项式。

二、核心代码

POLYNOMIAL *addPoly(const POLYNOMIAL *polyOne,const POLYNOMIAL *polyAnother){
	POLYNOMIAL *result = NULL;                                   //先申请一个空多项式数组
	
	initPolynomial(&result,getCapacity(polyOne) + getCapacity(polyAnother)); //数组容量为进行比较的两个数组容量之和
	               
	int polyOneIndex = 0;
	int polyOtherIndex = 0;
	POLY_ITEM itemOne;
	POLY_ITEM itenOther;
	double newCoeff;
	
	getElementAt(polyOne,polyOneIndex,&itemOne);         
	getElementAt(polyAnother,polyOtherIndex,&itemOther);       
	While(polyOneIndex < getCount(polyOne) && polyTwoIndex < getCount(polyAnother)){
		if(itemOne.expon > itemOther.expon){
			appendElementAt(result,itemOne);
			getElementAt(polyOne,++polyOneIndex,&itemOne);
			continue;
		}                                    //a1>b1,将a1追加入新申请的数组,a1后移
		if(itemOne.expon < itemOther.expon){
			appendElementAt(result,itemOther);
			getElementAt(polyOne,++polyOneIndex,&itemOther);
			continue;
		}                                    //a1<b1,将b1追加入新申请的数组,b1后移
		newCoeff = itemOne.coeff + itemOther.coeff;
		if(fabs(newCoeff) > 1e-6){
			itemOne.coeff  = newCoeff;
			appendElementAt(result,itemOne);
		}                                    //a1=b1,则系数求和,再进行追加
		getElementAt(polyOne,++polyOneIndex,&itemOne);
		getElementAt(polyOne,++polyOneIndex,&itemOther);  //a1,b1均后移
	}
	while(polyOneIndex < getCount(polyOne)){
		appendElement(result,itemOne);
		getElementAt(polyOne,++polyOneIndex,&itemOne);  //若多项式1未循环结束,则剩余项全部追加
	}
	while(polyOtherIndex < getCoUNT(polyOther)){
		appendElement(result,itemOther);
		getElementAt(polyOther,++polyOtherIndex,&itemOther);  若多项式2未循环结束,则剩余项全部追加
	}                                                              
	
	return result;
}

以上讲解若有不当之处,请各位大佬指正。

    原文作者:柯静如
    原文地址: https://blog.csdn.net/weixin_44047196/article/details/102841577
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞