ZeroP()
: return p(X)=0IsZeroP(p)
: if (poly) return FALSE else return TRUEcoef(p, e)
: if (<e,a> ∈ p) return c else return 0maxExp(p)
: return max (최고차항 반환)addTerm(p, c, e)
if (<e,a> ∈ p) return error else return 삽입된 polydelTerm(p, e)
if (<e,a> ∈ p) return 삭제된 poly else return errorsingleMult(p, c, e)
return poly c x^epolyAdd(p1, p2)
return p1 + p2polyMult(p2, p2)
return p1 * p2zeroP()
와 addTerm()
을 이용해 생성
addTerm(addTerm(addTerm(zeroP(), a, 3), b, 2), 5, 0)
= $a*x^3 + b*x^2+5$표
1️⃣ 모든 차수에 대한 계수값을 배열로 저장
typedef struct {
int degree;
float coef[MAX_DEGREE];
} polynomial;
⚠️ 0인 계수가 많은 경우 메모리 낭비가 심함
2️⃣ 지수와 계수가 존재하는 항만 배열로 저장
#define MAX_TERMS 100 // 지수가 존재하는 term 최대수
typedef struct {
float coef; //계수
float expon; //지수
} polynomial;
polynomial term [MAX_TERMS];
int avail = 0; // 다음 번 빈 슬롯의 array index 번호 유지
표현 : terms[MAX_TERMS] = { {10,5}, {6,1}, {3,0} };
하나의 배열로 여러 개의 다항식 표현 가능
⚠️ 계수 0인 항이 적은 경우 메모리를 2배나 더 소모하게 됨
polyAdd(p1, p2)
// p3 = p1 + p2 : 다항식 p1과 p2를 더한 결과 p3을 반환
p3 = zeroP();
while (not isZeroP(p1) and not isZeroP(p2) do {
case {
maxExp(p1) < maxExp(p2) :
p3=addTerm(p3, coef((p2), maxExp(p2)), maxExp(p2);
p2=delTerm(p2, maxExp(p2));
maxExp(p1) = maxExp(p2) :
sum=coef(p1, maxExp(p1)) + coef(p2, maxExp(p2));
if (sum != 0) then p3 = addTerm(p3, sum, maxExp(p1));
p1 = delTerm(p1, maxExp(p1));
p2 = delTerm(p2, maxExp(p2));
maxExp(p1) > maxExp(p2) :
p3 = addTerm(p3, coef(p1, maxExp(p1)), maxExp(p1));
p1 = delTerm(p1, maxExp(p1));
}
}
if (not isZero(p1)) then p1의 나머지 항들을 p3에 복사
else if (not isZeroP(p2)) then p2의 나머지 항들을 p3에 복사
return p3;
end polyAdd()
while문 in → p1과 p2를 비교하여 큰 지수를 가진 것부터 p3에 복사
while문 out → p1이나 p2 중에 먼저 끝난 경우 나머지 항들을 p3에 복사