使用固定大小陣列存儲係數,下標即指數。結構簡單、隨機訪問快,適合次數上限已知、密集分佈的多項式。
#define MaxDegree 100 // 最大指數
typedef struct {
int CoeffArray[MaxDegree + 1]; // 係數陣列,索引=指數
int HighPower; // 最高非零項指數
} *Polynomial;
void ZeroPolynomial(Polynomial Poly) {
for (int i = 0; i <= MaxDegree; i++)
Poly->CoeffArray[i] = 0;
Poly->HighPower = 0;
}
void AddPolynomial(const Polynomial P1, const Polynomial P2, Polynomial Sum) {
ZeroPolynomial(Sum);
Sum->HighPower = (P1->HighPower > P2->HighPower) ? P1->HighPower : P2->HighPower;
for (int i = Sum->HighPower; i >= 0; i--)
Sum->CoeffArray[i] = P1->CoeffArray[i] + P2->CoeffArray[i];
}
void MultPolynomial(const Polynomial P1, const Polynomial P2, Polynomial Prod) {
ZeroPolynomial(Prod);
Prod->HighPower = P1->HighPower + P2->HighPower;
if (Prod->HighPower > MaxDegree) FatalError("Exceeded array size");
for (int i = 0; i <= P1->HighPower; i++)
for (int j = 0; j <= P2->HighPower; j++)
Prod->CoeffArray[i + j] += P1->CoeffArray[i] * P2->CoeffArray[j];
}
| 維度 | 陣列版 | 鏈表版 |
|---|---|---|
| 空間效率 | 稀疏多項式浪費大 | 僅存非零項,緊湊 |
| 訪問速度 | O(1) 隨機訪問 | O(n) 遍歷查找 |
| 加法複雜度 | O(MaxDegree) | O(m+n) 歸併 |
| 乘法複雜度 | O(d1×d2) | O(m×n) + 合併 |
| 動態擴展 | 受限於 MaxDegree | 無上限 |
| 實現簡度 | 極簡 | 中等 |
realloc)突破 MaxDegree 限制float/double/complex 係數