Algorithm 检验零多项式

Algorithm 检验零多项式,algorithm,data-structures,zero,polynomial-math,sparks-language,Algorithm,Data Structures,Zero,Polynomial Math,Sparks Language,有人能解释我在下面的算法中“ISZERO”函数是如何检查多项式是否为零的吗。这里的“REM(P,e)”函数删除了指数为“e”的所有值。 我不能理解的是“如果COEF(P,e)=-c”的意义。还有什么是“污点”功能 structure POLYNOMIAL declare ZERO( ) poly; ISZERO(poly) Boolean COEF(poly,exp) coef; ATTACH(poly,coef,exp) poly REM(poly,exp)

有人能解释我在下面的算法中“ISZERO”函数是如何检查多项式是否为零的吗。这里的“REM(P,e)”函数删除了指数为“e”的所有值。 我不能理解的是“如果COEF(P,e)=-c”的意义。还有什么是“污点”功能

 structure POLYNOMIAL
    declare ZERO( ) poly; ISZERO(poly) Boolean
    COEF(poly,exp) coef;
    ATTACH(poly,coef,exp) poly
    REM(poly,exp) poly
    SMULT(poly,coef,exp) poly
    ADD(poly,poly) poly; MULT(poly,poly) poly;
    for all P,Q, poly c,d, coef e,f exp let
    REM(ZERO,f) :: = ZERO
    REM(ATTACH(P,c,e),f) :: =
    if e = f then REM(P,f) else ATTACH(REM(P,f),c,e)
    ***ISZERO(ZERO) :: = true
    ISZERO(ATTACH(P,c,e)):: =
    if COEF(P,e) = - c then ISZERO(REM(P,e)) else false***
    COEF(ZERO,e) :: = 0
    COEF(ATTACH(P,c,e),f) :: =
    if e = f then c + COEF(P,f) else COEF(P,f)
    SMULT(ZERO,d,f) :: = ZERO
    SMULT(ATTACH(P,c,e),d,f) :: =
    ATTACH(SMULT(P,d,f),c d,e + f)
    ADD(P,ZERO):: = P
    ADD(P,ATTACH(Q,d,f)) :: = ATTACH(ADD(P,Q),d,f)
    MULT(P,ZERO) :: = ZERO
    MULT(P,ATTACH(Q,d,f)) :: =
    ADD(MULT(P,Q),SMULT(P,d,f))
    end
    end POLYNOMIAL

不知道这是什么语言,它看起来像这行

ISZERO(ATTACH(P,c,e)):: =
if COEF(P,e) = - c then ISZERO(REM(P,e)) else false
正在递归地指定
为零。我们试图确定
ATTACH(P,c,e)
,也就是
P(x)+cx^e
,是否为零。它首先检查
P
x^e
系数是否为
-c
。如果不是,那么
P(x)+cx^e
肯定不是零,您可以立即返回false。否则,
P(x)+cx^e=REM(P,e)
,因此您必须检查
ISZERO(REM(P,e))


我相信
SMULT
是乘法,所以
SMULT(p,a,b)
相当于
a*x^b*p(x)

*“.“if COEF(p,e)=-c.”的意义。这不是这里唯一不理解的事情。为什么这是用c标记的?@WhozCraig cz我将在这个规范的cSource中执行这个算法。显然,这个“语言”没有完整的描述,但有部分描述。此算法中使用的语言是sparks。问题是我无法理解检查“负系数”的意义。负多项式或正多项式如果有系数,则不为零。请解释一下。例如,假设P是x^2-3x+2,c是3,e是1。然后算法检查P+3x是否为零。它首先检查COEF(P,1)是否为-3。这是真的,所以它检查REM(P,1)=x^2+2是否为零。它不是零,所以它返回false(它必须做进一步的缩减,比如x^2+2=ATTACH(x^2,2,0),但它最终发现它是false)。如果在上面的示例中我们将P更改为x^2-2x+2,那么我们首先要检查COEF(P,1)不是-3。然后我们知道P+3x不可能是零,因为x系数不是零。因此,我们可以立即返回false。很抱歉再次询问,但请解释。为什么我们需要用REM(P,1)来去除负系数来检查多项式是否为零。多项式的加法算法是在加法之前使用ISZERO函数,如果你认为SMULT函数是用于乘法的,那么MUL函数的目的是什么。