Это не официальный сайт wikipedia.org 01.01.2023

F4 (алгоритм) — Википедия

F4 (алгоритм)

Алгоритм F4 был предложен Жан-Шарль Фожером (Jean-Charles Faugerе) в 1999 г как новый эффективный алгоритм вычисления базиса Грёбнера[1]. Этот алгоритм вычисляет базис Грёбнера идеала в кольце многочленов с помощью серии стандартной процедуры линейной алгебры: приведений матриц к ступенчатому виду. Он является одним из самых быстрых на сегодняшний день.

АлгоритмПравить

ОпределенияПравить

  • Критическая пара ( f i , f j )   является членом

T T K [ x 1 , . . . , x n ] T K [ x 1 , . . . , x n ] , P a i r ( f i , f j ) := ( H O K i j , t i , f i , t j , f j )  

такое, что

H O K ( P a i r ( f i , f j ) ) = H O K i j = L T ( t i f i ) = L T ( t j f j ) = H O K ( f i , f j )  

  • Определим степень критической пары p i , j = P a i r ( f i , f j ) , d e g ( p i , j )   как d e g ( H O K i , j )  .
  • Определим следующие операторы: L e f t ( p i , j ) := t i f i   and R i g h t ( p i , j ) := t j f j  

Псевдокод алгоритма F4 (упрощённая версия)Править

Вход: { F  конечное подмножество  K [ X 1 , . . . , X n ] S e l  функция  L i s t ( P a i r s ) L i s t ( P a i r s ) такое, что  S e l ( I )  если  I  

Выход: конечное подмножество K [ X 1 , . . . , X n ]  


G := F , F ~ 0 + := F := 0  и  P := { P a i r ( f , g ) | ( f , g ) G 2  c  f g }  

While P   do

d := d + 1  

P d := S e l ( p )  

P := P P d  

L d := L e f t ( P d ) R i g h t ( P d )  

F ~ d + := R e d u c t i o n ( L d , G )  

for h F ~ d +   do

P := P { P a i r ( h , g ) | g G } G := G { h }  

return G  

Алгоритм редукцииПравить

Теперь мы можем расширить определение редукции полинома по модулю

подмножества K [ X 1 , . . . , X n ]  , до редукции подмножества K [ X 1 , . . . , X n ]   по

модулю другого подмножества K [ X 1 , . . . , X n ]  :

Вход: L, G конечные подмножества K [ X 1 , . . . , X n ]  

Выход: конечные подмножества K [ X 1 , . . . , X n ]   (Может быть пустым)


F := SymbolicPreprocessing ( L , G )  

F ~ := Редукция Гауса  F  относительно <  

F ~ + := { f F ~ | L T ( f ) L T ( F ) }  

return F + ~  

Арифметическая операция не используется: это символьный препроцессинг.

Алгоритм Символьного ПрепроцессингаПравить

Вход: L, G конечные подмножества K [ X 1 , . . . , X n ]  

Выход: конечные подмножества K [ X 1 , . . . , X n ]  

F := L  

D o n e := L T ( F )  

while T ( F ) D o n e   do

m T ( F ) D o n e  

D o n e := D o n e { m }  

if m   приводим сверху по модулю G   then

существует g G  И  m T : m = m L T ( g )  

F := F { m g }  

return F  

ЛеммаПравить

Для всех многочленов p L d  , мы имеем p G F ~ + 0  

Теорема (без доказательства)Править

Алгоритм F 4   вычисляет базис Гребнера G в K [ X 1 , . . . , X n ]  

такой что F G  И  I d ( G ) = I d ( F ) .  

Замечание

Если # S e l ( I ) = 1   для всех I  , тогда алгоритм F 4   сводится к алгоритму Бухбергера. В этом случае функция Sel является эквивалентом стратегии выбора для алгоритма Бухбергера.

Функция выбораПравить

Вход: P   список критических пар

Выход: список критических пар

d := m i n { d e g ( l c m ( p ) ) }  

P d := { p P | d e g ( l c m ( p ) ) = d }  

return P d  

Назовём эту стратегию нормальной стратегией для F 4  .

Следовательно, если входные полиномы однородны, мы получаем в степени, и d - базис Гребнера.

На следующем шаге мы выбираем все критические пары, необходимые для вычисления базиса Гребнера в степени d+1.

Оптимизация алгоритма F4Править

Существует несколько путей оптимизации алгоритма:

  • включение критерия Бухбергера (или критерия F5);
  • повторное использование всех строк в приведённых матрицах.

Критерии Бухбергера Алгоритм - реализация:

( G n e w , p n e w ) := U p d a t e ( G o l d , P o l d , h )  

Вход: { конечное подмножество  G o l d  в  K [ X 1 , . . . , X n ] конечное подмножество  P o l d  критических пар в  K [ X 1 , . . . , X n ] 0 h K [ x 1 , . . . , X n ]  

Выход: конечное подмножество в K [ X 1 , . . . , X n ]   обновлённый список критических пар

Пседвокод алгоритма F4 (с критерием)Править

Вход: { F K [ X 1 , . . . , X n ] S e l  функция  L i s t ( P a i r s ) L i s t ( P a i r s )  

Выход: конечное подмножество K [ X 1 , . . . , X n ]  .

G :=  И  P :=  И  d := 0  

while F   do

f := f i r s t ( F ) ; F : F { f }  

( G , P ) := U p d a t e ( G , P , f )  

while P   do

d := d + 1  

P d := S e l ( P ) ; P := P P d  

L d := L e f t ( P d ) R i g h t ( P d )  

( F ~ d + , F d ) := R e d u c t i o n ( L d , G , ( F i ) d = 1 , . . . , ( d 1 ) )  

for P F ~ d +  

P := P { P a i r ( h , g ) | g G }  

( G , P ) := U p d a t e ( G , P , h )  

return G  

F4 и его отличия от Алгоритма БухбергераПравить

Пусть есть некоторое конечное множество многочленов F  . По этому множеству строится большая разреженная матрица, строки которой соответствуют многочленам из F  , а столбцы — мономам. В матрице записаны коэффициенты многочленов при соответствующих мономах. Столбцы матрицы отсортированы согласно выбранному мономиальному упорядочению (старший моном соответствует первому столбцу). Приведение такой матрицы к ступенчатому виду позволяет узнать базис линейной оболочки многочленов из F   в пространстве многочленов.

Пусть в классическом алгоритме Бухбергера требуется провести шаг редукции многочлена f   относительно g  , и при этом g   должен быть домножен на моном M  . В алгоритме F4 в матрицу будут специально помещены f   и M   g  . Утверждается, что можно заранее подготовить множество всех потенциальных домноженных редукторов, которые могут потребоваться, и поместить их заранее в матрицу.[2]

Обобщим алгоритм F4[3]:

пусть нам требуется отредуцировать многочлен f   относительно множества F  . Для этого мы

(1) добавляем f   в матрицу;

(2) строим носитель M   многочлена f   (множество мономов);

(3) если M   пусто, то заканчиваем процедуру;

(4) выбираем максимальный моном M   в M   (и выкидываем его из M  );

(5) если M   не делится ни на один старший моном элементов F  , то переходим к шагу (3);

(6) иначе выбираем редуктор r   ∈ F   (и дополнительный множитель t  ): тогда M   = L M   t r  ;

(7) добавляем t r   в матрицу;

(8) добавляем мономы многочлена t r   (кроме старшего M  ) ко множеству M  ;

(9) переходим к шагу (3).


Эта процедура пополнения матрицы домноженными редукторами называется символьным препроцессингом. Кроме того, вместо S-полиномов можно поместить в матрицу их левые и правые части (при редукции одной строки по другой автоматически получится S-полином).

Наконец, третьим отличием от алгоритма Бухбергера является то, что в алгоритме F4 разрешается поместить в одну матрицу части сразу нескольких S-полиномов, выбранных согласно какой-либо стратегии. Так, если на каждом шаге выбирается один S-полином, то он повторяет классический алгоритм Бухбергера.

Другая крайность — когда на очередном шаге редуцируется множество всех имеющихся S-полиномов. Это тоже не очень эффективно из-за больших размеров матриц. Автор алгоритма Ж.-Ш. Фожер предложил нормальную стратегию выбора S-полиномов для редукции[4], согласно которой выбираются S-полиномы с наименьшей степенью левых и правых частей. Она даёт хорошие эмпирические результаты для упорядочения DegRevLex и ее выбор является естественным для однородных идеалов.

В алгоритм можно внести несколько естественных усовершенствований. Как и в классическом алгоритме вычисления базиса Грёбнера, можно применять критерии Бухбергера для отсеивания заведомо ненужных S-полиномов.

РеализацииПравить

Реализован алгоритм F4

  1. в FGb - собственная реализация Фожера[4], которая включает интерфейсы для его использования из C/C ++ или Maple;
  2. в системе компьютерной алгебры Maple в качестве опции method = fgb функции Groebner [gbasis];
  3. в системе компьютерной алгебры Magma , в системе компьютерной алгебры SageMath.

ПримерПравить

Задача: посчитать базис Грёбнера для многочленов { f 1 = a b c d 1 ; f 2 = a b c + a b d + a c d + b c d ; f 3 = a b + b c + a d + c d ; f 4 = a + b + c + d }  В начале присваиваем G = f 4 ,   P 1 = P a i r ( f 3 , f 4 ) ,   L 1 = { ( 1 , f 3 ) , ( b , f 4 ) }  

1) Символьный препроцессинг ( L 1 , G , ) :  

F 1 = { f 3 , b f 4 } , T ( F 1 ) = { a b , a d , b 2 , b c , b d , c d }  

a b   уже готов.

2) Символьный препроцессинг ( L 1 , G , ) :  

F 1 = { f 3 , b f 4 } , T ( F 1 ) = { a b , a d , b 2 , b c , b d , c d }  

a d   сверху сводится к f 4 G  .

3) Символьный препроцессинг ( L 1 , G , ) :  

F 1 = { f 3 , b f 4 , d f 4 } , T ( F 1 ) = { a b , a d , b 2 , b c , b d , c d , d 2 }  

b 2   не сводится к G  .

4) F 1 = { f 3 , b f 4 , d f 4 } .  

Матричное представление полученного F 1  :

A 1 = M ( F 1 ) = ( { a b b 2 b c a d b d c d d 2 } ( d f 4 ) 0 0 0 1 1 1 1 ( f 3 ) 1 0 1 1 0 1 0 ( b f 4 ) 1 1 1 0 1 0 0 )  

Редукция Гаусса полученной матрицы A 1  :

A 1 ~ = ( { a b b 2 b c a d b d c d d 2 } ( d f 4 ) 0 0 0 1 1 1 1 ( f 3 ) 1 0 1 0 1 0 1 ( b f 4 ) 0 1 0 0 2 0 1 )  

По этой матрице получаем:

F 1 ~ = [ f 5 = a d + b d + c d + d 2 , f 6 = a b + b c b d d 2 , f 7 = b 2 + 2 b d + d 2 ]  

А так как a b , a d L T ( F 1 )  , то

F 1 + ~ = [ f 7 ]   и тогда G = { f 4 , f 7 } .  

Для следующего шага мы должны рассмотреть P 2 = { P a i r ( f 2 , f 4 ) }  

Отсюда L 2 = { ( 1 , f 2 ) , ( b c , f 4 ) } и F = { F 1 } .  

В Символьном препроцессинге можно попытаться упростить 1 f 2 и b c f 4   используя предыдущие вычисления:

Например, L T ( b c f 4 ) = a b c = L T ( c f 6 )  и поэтому вместо  b c f 4  можно использовать  c f 6  1) Символьный препроцессинг

F 2 = { f 2 , c f 6 } , T ( F 2 ) = { a b c , b c 2 , a b d , a c d , b c d , c d 2 }  

2) Символьный препроцессинг

F 2 = { f 2 , c f 6 } , T ( F 2 ) = { a b c , b c 2 , a b d , a c d , b c d , c d 2 }  

3) Символьный препроцессинг

F 2 = { f 2 , c f 6 } , T ( F 2 ) = { a b c , b c 2 , a b d , a c d , b c d , c d 2 }   a b d  сводится к  b c f 4  а также к  b f 5  

Опишем упрощениеПравить

Цель: заменить любое произведение m f   на произведение ( u f ) f  , где ( t , f )   - ранее вычисленная строка, а u f   делит моном m  

В первом варианте алгоритма: некоторые строки матрицы никогда не используются (строки в матрице F ~ d F ~ d +  ).

Новая версия алгоритма: мы сохраняем эти строки

m f R o w s ( F ) m f  c  m m  

m f R o w s ( F ) X k f  

SIMPLIFY пытается заменить произведение m f   произведением ( u t ) f  , где

( t , f )  уже вычисленная строка в гауссовой редукции, и u t делит моном m; Если мы нашли такое лучшее произведение, то рекурсивно вызываем функцию SIMPLIFY:

Вход: { t T  моном t K [ X 1 , . . . , X n ]  многочлен F = ( F i ) d = 1 , . . . , ( d 1 ) ,  Где  F k K [ X 1 , . . . , X n ]  

Выход: Результат m f   эквивалентно t f  

for u  список делителей  t   do

if j ( 1 j < d ) : ( u f ) F j  then  

F ~ j Гауссова редукция F j  Относительно <  

! p F ~ j : L T ( p ) = L T ( u f )  

if u t  then  

return S i m p l i f y ( t u , p , F )  

else return 1 p  

return t f  

Algorithm SYMBOLICPREPROCESSING  

Вход: { L , G  конечные подмножества  K [ X 1 , . . . , X n ] F = ( F i ) d = 1 , . . . , ( d 1 ) ,  Где  F k конечное подмножество K [ X 1 , . . . , X n ]  

Выход: конечное подмножество K [ X 1 , . . . , X n ]  .

F := L  

D o n e := L T ( F )  

while T ( F ) D o n e   do

m T ( F ) D o n e  

if m   приводим сверху по модулю G   then

существует g G  И  m T : m = m L T ( g )  

F := F { S i m p l i f y ( m , g , F ) }  

return F  

Теперь возвращаемся к примеру.

4) Символьный препроцессинг

F 2 = { f 2 , c f 6 , b f 5 } , T ( F 2 ) = { a b c , b c 2 , a b d , a c d , b c d , c d 2 , b 2 d , b d 2 }  

И так далее....

5) Символьный препроцессинг

F 2 = [ c f 5 , d f 7 , b f 5 , f 2 , c f 6 ]  

A 2 = M ( F 2 ) = [ 0 0 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0 0 2 0 1 0 0 0 1 1 0 1 0 1 0 0 0 1 0 1 0 1 1 0 0 0 0 0 1 1 0 0 0 1 0 0 1 0 0 ]  

После редукции Гаусса:

A 2 ~ = M ( F 2 ) ~ = [ 0 0 0 0 1 1 1 0 1 0 0 0 0 1 0 0 0 2 0 1 0 0 1 0 0 1 0 1 0 1 1 0 0 0 0 1 1 1 1 1 0 1 0 0 0 0 1 1 0 1 ]  

F 2 ~ = [ f 9 = a c d + b c d + c 2 d + c d 2 , f 10 = b 2 d + 2 b d 2 + d 3 , f 11 = a b d + b c d b d 2 d 3 , f 12 = a b c b c d c 2 d + b d 2 c d 2 + d 3 , f 13 = b c 2 + c 2 d b d 2 d 3 ]  

и G = { f 4 , f 7 , f 13 }  

На следующем шаге имеем:

L 3 = { ( 1 , f 1 ) , ( b c d , f 4 ) , ( c 2 , f 7 ) , ( b , f 13 ) }  

и рекурсивно вызываем упрощение:

S i m p l i f y ( b c d , f 4 ) = S i m p l i f y ( c d , f 6 ) = S i m p l i f y ( d , f 12 ) = ( d , f 12 )  

На следующем шаге имеем:

L 3 = { ( 1 , f 1 ) , ( b c d , f 4 ) , ( c 2 , f 7 ) , ( b , f 13 ) }   и F 3 = [ f 1 , d f 12 , c 2 f 7 , b f 13 , d f 13 , d f 10 ]  

После некоторых вычислений, получается, что ранг M ( F 3 )   составляет 5.

Это означает, что есть бесполезное сведение к нулю.

На следующем шаге имеем:

L 3 = { ( 1 , f 1 ) , ( b c d , f 4 ) , ( c 2 , f 7 ) , ( b , f 13 ) }   и F 3 = [ f 1 , d f 12 , c 2 f 7 , b f 13 ]  

Символьный препроцессинг

F 3 = [ f 1 , d f 12 , c 2 f 5 , b f 13 , d f 13 , d f 10 ]  

F 3 ~ = [ f 15 = c 2 b 2 c 2 d 2 + 2 b d 3 + 2 d 4 , f 16 = a b c d 1 , f 17 = b c d 2 c 2 d 2 b d 3 d 4 + 1 , f 18 = c 2 b d + c 2 d 2 b d 3 d 4 , f 19 = b 2 d 2 + 2 b d 3 + d 4 ]  

СсылкиПравить

  1. https://en.wikipedia.org/wiki/Magma_(computer_algebra_system)

ПримечанияПравить

  1. Jean-Charles Faugere. A new efficient algorithm for computing gr¨obner bases (f4). Journal of Pure and Applied Algebra. — 1999.
  2. Исследование базисов Грёбнера // msu. Архивировано 11 июля 2019 года.
  3. [http://www.broune.com/papers/f4.pdf THE F4 ALGORITHM SPEEDING UP GROBNER BASIS COMPUTATIONS USING LINEAR ALGEBRA] // BJARKE HAMMERSHOLT ROUNE. Архивировано 30 декабря 2019 года.
  4. 1 2 собственная реализация Фожер (англ.). Дата обращения: 1 декабря 2020. Архивировано 15 июня 2021 года.

ЛитератураПравить

  • J.-C. Faug`ere. A new efficient algorithm for computing Gr¨obner bases without reduction to zero (F5).
  • J.-C. Faug`ere A New Efficient Algorithm for Computing Gr¨obner Bases (F4). Journal of Pure and Applied Algebra, 139 (1999), 61–88.
  • Cox D., Little J., O’Shea D., Ideals, Varieties and Algorithms. An Introduction to Computational Algebraic Geometry and Commutative Algebra, New York, NY: Springer, 1998. [Имеется перевод: Кокс Д., Литтл Дж., О’Ши Д., Идеалы, многообразия и алгоритмы, М., Мир, 2000.]