布赫伯格演算法(Buchberger's algorithm)
/ BOOK-bair-ger /
葛羅布納基底是獎品;布赫伯格演算法則是你實際計算它的方法。由布魯諾·布赫伯格於 1965 年發明(並以他的指導教授沃夫岡·葛羅布納命名),它是把一團亂的多項式組轉成那個特殊、結構良好、可用以解多項式系統之基底的原始配方。它之於葛羅布納基底,正如高斯消去法之於列階梯形:使抽象想法可用的具體程序。
其機制是一個巧妙的單迴圈。要擁有葛羅布納基底,障礙在於成對多項式的領頭項可能以基底尚未「看見」的方式互相抵消。對每一對,布赫伯格形成它們的 S 多項式——一個刻意設計、用以抵消兩個領頭項並揭露底下藏著的任何新多項式關係的組合。他接著把那個 S 多項式用目前的集合去除以做約化。若餘式非零,它就是基底先前漏掉、確實屬於該理想的新成員,於是加進去並繼續;若每個 S 多項式都約化為零,這個集合就已是葛羅布納基底,你便停下。布赫伯格證明了這必定停機並產生正確的基底。昂貴的部分是 S 多項式對的洪流,所以實務的實作使用布赫伯格自己的判準跳過可證明注定約化為零的對,而更快的後裔(佛日爾的 F4 與 F5)把工作改寫成大型的線性代數消去。
布赫伯格演算法之所以重要,在於它是每個電腦代數系統內部解多項式系統的基礎引擎,而它的發現基本上開創了計算理想論。誠實的提醒正是縈繞整個領域的那個:它可能慢到驚人且極耗記憶體,因為葛羅布納基底有雙重指數的最壞情況大小,而中間多項式劇烈膨脹。一個教科書般簡單的實作會在人類稱之為小的系統上卡死;現代工具裡的聰明,幾乎全是關於馴服那場爆炸。
取 f = x^2 - 1 與 g = x*y - 1,x 排在 y 之上。它們的 S 多項式抵消領頭的 x 項:y*f - x*g = y*(x^2 - 1) - x*(x*y - 1) = x - y。把 x - y 對 f 與 g 約化後留下非零餘式,於是 x - y 加入基底——一個原始那對未顯示出來的新關係。
S 多項式抵消領頭項以浮現隱藏的關係,然後被約化。
布赫伯格演算法必定以正確的葛羅布納基底停機,但其執行時間可能是雙重指數的,且對單項式排序與配對選擇策略高度敏感。天真的實作很快就被壓垮;現代的 F4/F5 變體快得多,但最壞情況依然殘酷。