Алгоритм Ленстра-Ленстра-Ловаса (ЛЛЛ) - алгоритм сокращения базиса решетки [англ.] , изобретенный Арьеном Ленстра , Хендриком Ленстра и Ласло Ловасом в 1982 году.[1] Алгоритм является основой проведения манипуляций с базисами на решетках в евклидовом пространстве .
Имея на входе базис целочисленных n -мерных векторов
B
=
{
b
1
,
b
2
,
…
,
b
d
}
{\displaystyle \mathbf {B} =\{\mathbf {b} _{1},\mathbf {b} _{2},\dots ,\mathbf {b} _{d}\}}
, алгоритм, заданный на решетке (подгруппе R n ) с
d
≤
n
{\displaystyle \ d\leq n}
, экспоненциально приближает кратчайший ортогональный базис на решётке за полиномиальное время
O
(
d
5
n
log
3
B
)
{\displaystyle O(d^{5}n\log ^{3}B)\,}
где
B
{\displaystyle B}
- максимальная длина
b
i
{\displaystyle \mathbf {b} _{i}}
по Евклидовой норме , то есть
B
=
m
a
x
(
|
|
b
1
|
|
2
,
|
|
b
2
|
|
2
,
.
.
.
,
|
|
b
d
|
|
2
)
{\displaystyle B=max\left(||\mathbf {b} _{1}||_{2},||\mathbf {b} _{2}||_{2},...,||\mathbf {b} _{d}||_{2}\right)}
.[2]
Изначально, алгоритм ЛЛЛ, работая за полиномиальное время, использовался для факторизации многочленов с целыми коэффициентами , для одновременного приближения действительных чисел рациональными , и для решения задачи целочисленного линейного программирования в пространстве фиксированной размерности.
Базис, сокращенный методом ЛЛЛ
Описание исходных данных и работы ЛЛЛ следующее: Пусть дан базис
B
=
{
b
0
,
b
1
,
…
,
b
n
}
,
{\displaystyle \mathbf {B} =\{\mathbf {b} _{0},\mathbf {b} _{1},\dots ,\mathbf {b} _{n}\},}
преобразованный с помощью процесса Грамма-Шмидта в ортогональный базис
B
∗
=
{
b
0
∗
,
b
1
∗
,
…
,
b
n
∗
}
,
{\displaystyle \mathbf {B} ^{*}=\{\mathbf {b} _{0}^{*},\mathbf {b} _{1}^{*},\dots ,\mathbf {b} _{n}^{*}\},}
с коэффициентами Грамма-Шмидта, определяемыми следующим образом
μ
i
,
j
=
⟨
b
i
,
b
j
∗
⟩
⟨
b
j
∗
,
b
j
∗
⟩
{\displaystyle \mu _{i,j}={\frac {\langle \mathbf {b} _{i},\mathbf {b} _{j}^{*}\rangle }{\langle \mathbf {b} _{j}^{*},\mathbf {b} _{j}^{*}\rangle }}}
, для всех
j
,
i
{\displaystyle j,i}
таких, что
1
≤
j
<
i
≤
n
{\displaystyle 1\leq j<i\leq n}
.
Таким образом (упорядоченный) базис
B
{\displaystyle B}
называется сокращенным по методу ЛЛЛ базисом, если существует параметр
δ
{\displaystyle \delta }
из промежутка (0.25,1] такой, что выполняются условия:[2]
(Условие сокращения размера) Для всех
i
,
j
{\displaystyle i,j}
таких, что
1
≤
j
<
i
≤
n
:
|
μ
i
,
j
|
≤
0.5
{\displaystyle 1\leq j<i\leq n\colon \left|\mu _{i,j}\right|\leq 0.5}
. По определению это свойство гарантирует сокращение длины векторов упорядоченного базиса.
(Условие Ловаса) For k = 1,2,..,n
:
δ
‖
b
k
−
1
∗
‖
2
≤
‖
b
k
∗
‖
2
+
μ
k
,
k
−
1
2
‖
b
k
−
1
∗
‖
2
{\displaystyle \colon \delta \Vert \mathbf {b} _{k-1}^{*}\Vert ^{2}\leq \Vert \mathbf {b} _{k}^{*}\Vert ^{2}+\mu _{k,k-1}^{2}\Vert \mathbf {b} _{k-1}^{*}\Vert ^{2}}
.
Оценив значение параметра
δ
{\displaystyle \delta }
, можно сказать насколько хорошо базис сокращен. Если значение параметра
δ
{\displaystyle \delta }
большое (но лежит в промежутке (0.25,1]), то базис сокращен достаточно.
Изначально А. Ленстра, Х. Ленстра и Л. Ловас в своей статье продемонстрировали работу ЛЛЛ алгоритма для параметра
δ
=
3
4
{\displaystyle \delta ={\frac {3}{4}}}
.
Несмотря на то что алгоритм ЛЛЛ остается корректным и для
δ
=
1
{\displaystyle \delta =1}
, его работа за полиномиальное время гарантируется только для
δ
{\displaystyle \delta }
в промежутке
(
0.25
,
1
)
{\displaystyle (0.25,1)}
.
Не существует алгоритма, который бы вычислял почти ортогональный базис с векторами наименьшей длины из возможных для базиса на решётке с размерностью более 4 за полиномиальное время.[3] В то же время, базис, преобразованный методом ЛЛЛ, почти самый короткий из всех возможных, в том смысле, что существуют абсолютные границы
c
i
>
1
{\displaystyle c_{i}>1}
такие, что первый базисный вектор не боле чем в
c
1
{\displaystyle c_{1}}
раз длиннее чем самый короткий вектор решётки,
аналогично, второй вектор базиса не более чем в
c
2
{\displaystyle c_{2}}
раз превосходит второй кратчайший вектор решетки, и так далее.
Алгоритм ЛЛЛ
Следующее описание основано на (Hoffstein, Pipher & Silverman 2008 , Теорема 6.68).[4]
ВВОД:
▹
{\displaystyle \triangleright }
базис решетки
b
0
,
b
1
,
…
,
b
n
∈
Z
m
{\displaystyle b_{0},b_{1},\dots ,b_{n}\in Z^{m}}
,
▹
{\displaystyle \triangleright }
параметр
δ
{\displaystyle \delta }
c
1
4
<
δ
<
1
{\displaystyle {\frac {1}{4}}<\delta <1}
, чаще всего
δ
=
3
4
{\displaystyle \delta ={\frac {3}{4}}}
ПРОЦЕСС:
Выполнить процесса Грамма-Шмидта без нормировки:
o
r
t
h
o
:=
g
r
a
m
S
c
h
m
i
d
t
(
{
b
0
,
…
,
b
n
}
)
=
{
b
0
∗
,
…
,
b
n
∗
}
{\displaystyle ortho:=\mathrm {gramSchmidt} (\{b_{0},\dots ,b_{n}\})=\{b_{0}^{*},\dots ,b_{n}^{*}\}}
Define
μ
i
,
j
:=
⟨
b
i
,
b
j
∗
⟩
⟨
b
j
∗
,
b
j
∗
⟩
{\displaystyle \scriptstyle \mu _{i,j}:={\frac {\langle b_{i},b_{j}^{*}\rangle }{\langle b_{j}^{*},b_{j}^{*}\rangle }}}
, который должен всегда использовать самые последние значения
b
i
,
b
j
∗
{\displaystyle \scriptstyle b_{i},b_{j}^{*}}
.
Let
k
=
1
{\displaystyle k=1}
while
k
≤
n
{\displaystyle k\leq n}
do
for j from
k
−
1
{\displaystyle k-1}
to 0 do
if
|
μ
k
,
j
|
>
1
2
{\displaystyle |\mu _{k,j}|>{\frac {1}{2}}}
do
b
k
=
b
k
−
⌊
μ
k
,
j
⌉
b
j
{\displaystyle b_{k}=b_{k}-\lfloor \mu _{k,j}\rceil b_{j}}
Обновить входные данные для ortho и все данные, зависящие от
μ
i
,
j
{\displaystyle \scriptstyle \mu _{i,j}}
, если необходимо.
(Простой метод это пересчет
o
r
t
h
o
:=
g
r
a
m
S
c
h
m
i
d
t
(
{
b
0
,
…
,
b
n
}
)
=
{
b
0
∗
,
…
,
b
n
∗
}
{\displaystyle \scriptstyle ortho:=\mathrm {gramSchmidt} (\{b_{0},\dots ,b_{n}\})=\{b_{0}^{*},\dots ,b_{n}^{*}\}}
если
b
i
{\displaystyle \scriptstyle b_{i}}
меняется. )
end if
end for
if
⟨
b
k
∗
,
b
k
∗
⟩
≥
(
δ
−
(
μ
k
,
k
−
1
)
2
)
⟨
b
k
−
1
∗
,
b
k
−
1
∗
⟩
{\displaystyle \langle b_{k}^{*},b_{k}^{*}\rangle \geq (\delta -(\mu _{k,k-1})^{2})\langle b_{k-1}^{*},b_{k-1}^{*}\rangle }
then
k
=
k
+
1
{\displaystyle k=k+1}
else
Поменять
b
k
{\displaystyle \scriptstyle b_{k}}
и
b
k
−
1
{\displaystyle \scriptstyle b_{k-1}}
.
Обновить входные данные для ortho и все данные, зависящие от
μ
i
,
j
{\displaystyle \scriptstyle \mu _{i,j}}
, если необходимо. (См. выше комментарий. )
k
=
max
(
k
−
1
,
1
)
{\displaystyle k=\max(k-1,1)}
end if
end while
ВЫВОД: Сокращенный методом ЛЛЛ базис:
b
0
,
b
1
,
…
,
b
n
{\displaystyle b_{0},b_{1},\dots ,b_{n}}
Свойства уменьшенного базиса
Пусть
B
=
{
b
1
,
b
2
,
…
,
b
n
}
{\displaystyle \mathbf {B} =\{\mathbf {b} _{1},\mathbf {b} _{2},\dots ,\mathbf {b} _{n}\}}
- сокращенный по алгоритму ЛЛЛ с параметром
δ
{\displaystyle \delta }
базис на решётке
L
{\displaystyle {\mathcal {L}}}
. Из определения такого базиса можно получить несколько свойств
B
{\displaystyle \mathbf {B} }
.
Первый вектор базиса не может быть сильно больше кратчайшего ненулевого вектора :
|
|
b
1
|
|
≤
(
2
/
(
4
δ
−
1
)
)
n
−
1
⋅
λ
1
(
L
)
{\displaystyle ||\mathbf {b} _{1}||\leq (2/({\sqrt {4\delta -1}}))^{n-1}\cdot \lambda _{1}({\mathcal {L}})}
. В частности, для
δ
=
3
/
4
{\displaystyle \delta =3/4}
получается
|
|
b
1
|
|
≤
2
(
n
−
1
)
/
2
⋅
λ
1
(
L
)
{\displaystyle ||\mathbf {b} _{1}||\leq 2^{(n-1)/2}\cdot \lambda _{1}({\mathcal {L}})}
.[5]
Первый вектор базиса ограничен определителем решетки :
|
|
b
1
|
|
≤
(
2
/
(
4
δ
−
1
)
)
(
n
−
1
)
/
2
⋅
(
det
(
L
)
)
1
/
n
{\displaystyle ||\mathbf {b} _{1}||\leq (2/({\sqrt {4\delta -1}}))^{(n-1)/2}\cdot (\det({\mathcal {L}}))^{1/n}}
. В частности, для
δ
=
3
/
4
{\displaystyle \delta =3/4}
получается
|
|
b
1
|
|
≤
2
(
n
−
1
)
/
4
⋅
(
det
(
L
)
)
1
/
n
{\displaystyle ||\mathbf {b} _{1}||\leq 2^{(n-1)/4}\cdot (\det({\mathcal {L}}))^{1/n}}
.[2]
Произведение норм векторов не может быть сильно больше определителя решетки: положим
δ
=
3
/
4
{\displaystyle \delta =3/4}
, тогда
∏
i
=
1
n
|
|
b
i
|
|
≤
2
n
(
n
−
1
)
/
4
⋅
det
(
L
)
{\displaystyle \prod _{i=1}^{n}||\mathbf {b} _{i}||\leq 2^{n(n-1)/4}\cdot \det({\mathcal {L}})}
.[2]
Пример
Следующий пример основывается на тексте Босма В.[6]
ВВОД:
Пусть базис решетки
b
1
,
b
2
,
b
3
∈
Z
3
{\displaystyle \mathbf {b} _{1},\mathbf {b} _{2},\mathbf {b} _{3}\in Z^{3}}
, задан столбцами матрицы:
[
1
−
1
3
1
0
5
1
2
6
]
{\displaystyle {\begin{bmatrix}1&-1&3\\1&0&5\\1&2&6\end{bmatrix}}}
По ходу алгоритма ЛЛЛ получается следующее:
b
1
∗
=
b
1
=
[
1
1
1
]
,
B
1
=
⟨
b
1
∗
,
b
1
∗
⟩
=
[
1
1
1
]
[
1
1
1
]
=
3
{\displaystyle b_{1}^{*}=b_{1}={\begin{bmatrix}1\\1\\1\end{bmatrix}},B_{1}=\langle b_{1}^{*},b_{1}^{*}\rangle ={\begin{bmatrix}1\\1\\1\end{bmatrix}}{\begin{bmatrix}1\\1\\1\end{bmatrix}}=3}
For
i
=
2
{\displaystyle i=2}
DO:
For
j
=
1
{\displaystyle j=1}
присвоить
μ
2
,
1
=
⟨
b
2
,
b
1
∗
⟩
B
1
=
[
−
1
0
2
]
[
1
1
1
]
3
=
1
3
(
<
1
2
)
{\displaystyle \mu _{2,1}={\frac {\langle b_{2},b_{1}^{*}\rangle }{B_{1}}}={\frac {{\begin{bmatrix}-1\\0\\2\end{bmatrix}}{\begin{bmatrix}1\\1\\1\end{bmatrix}}}{3}}={\frac {1}{3}}\left(<{\frac {1}{2}}\right)}
и
b
2
∗
=
b
2
−
μ
2
,
1
b
1
∗
=
[
−
1
0
2
]
−
1
3
[
1
1
1
]
=
[
−
4
3
−
1
3
5
3
]
.
{\displaystyle b_{2}^{*}=b_{2}-\mu _{2,1}b_{1}^{*}={\begin{bmatrix}-1\\0\\2\end{bmatrix}}-{\frac {1}{3}}{\begin{bmatrix}1\\1\\1\end{bmatrix}}={\begin{bmatrix}{\frac {-4}{3}}\\{\frac {-1}{3}}\\{\frac {5}{3}}\end{bmatrix}}.}
B
2
=
⟨
b
2
∗
,
b
2
∗
⟩
=
[
−
4
3
−
1
3
5
3
]
[
−
4
3
−
1
3
5
3
]
=
14
3
.
{\displaystyle B_{2}=\langle b_{2}^{*},b_{2}^{*}\rangle ={\begin{bmatrix}{\frac {-4}{3}}\\{\frac {-1}{3}}\\{\frac {5}{3}}\end{bmatrix}}{\begin{bmatrix}{\frac {-4}{3}}\\{\frac {-1}{3}}\\{\frac {5}{3}}\end{bmatrix}}={\frac {14}{3}}.}
k
:=
2
{\displaystyle \mathbf {k} :=2}
Здесь 4 шаг алгоритма ЛЛЛ пропущен так как
μ
2
,
1
{\displaystyle \mu _{2,1}}
соответствует условию уменьшения размера For
i
=
3
{\displaystyle i=3}
и For
j
=
1
,
2
{\displaystyle j=1,2}
вычислить
μ
i
,
j
{\displaystyle \mu _{i,j}}
и
B
i
{\displaystyle B_{i}}
:
μ
3
,
1
=
⟨
b
3
,
b
1
∗
⟩
B
1
=
[
3
5
6
]
[
1
1
1
]
3
=
14
3
(
>
1
2
)
{\displaystyle \mu _{3,1}={\frac {\langle b_{3},b_{1}^{*}\rangle }{B_{1}}}={\frac {{\begin{bmatrix}3\\5\\6\end{bmatrix}}{\begin{bmatrix}1\\1\\1\end{bmatrix}}}{3}}={\frac {14}{3}}(>{\frac {1}{2}})}
поэтому
b
3
∗
=
b
3
−
μ
3
,
1
b
1
∗
=
[
3
5
6
]
−
14
3
[
1
1
1
]
=
[
−
5
3
1
3
4
3
]
{\displaystyle b_{3}^{*}=b_{3}-\mu _{3,1}b_{1}^{*}={\begin{bmatrix}3\\5\\6\end{bmatrix}}-{\frac {14}{3}}{\begin{bmatrix}1\\1\\1\end{bmatrix}}={\begin{bmatrix}{\frac {-5}{3}}\\{\frac {1}{3}}\\{\frac {4}{3}}\end{bmatrix}}}
и
μ
3
,
2
=
⟨
b
3
,
b
2
∗
⟩
B
2
=
[
3
5
6
]
[
−
4
3
−
1
3
5
3
]
14
3
=
13
14
(
>
1
2
)
{\displaystyle \mu _{3,2}={\frac {\langle b_{3},b_{2}^{*}\rangle }{B_{2}}}={\frac {{\begin{bmatrix}3\\5\\6\end{bmatrix}}{\begin{bmatrix}{\frac {-4}{3}}\\{\frac {-1}{3}}\\{\frac {5}{3}}\end{bmatrix}}}{\frac {14}{3}}}={\frac {13}{14}}\left(>{\frac {1}{2}}\right)}
поэтому
b
3
∗
=
b
3
∗
−
μ
3
,
2
b
2
∗
=
[
−
5
3
1
3
4
3
]
−
13
14
[
−
4
3
−
1
3
5
3
]
=
[
−
18
42
27
42
−
9
42
]
=
[
−
6
14
9
14
−
3
14
]
{\displaystyle b_{3}^{*}=b_{3}^{*}-\mu _{3,2}b_{2}^{*}={\begin{bmatrix}{\frac {-5}{3}}\\{\frac {1}{3}}\\{\frac {4}{3}}\end{bmatrix}}-{\frac {13}{14}}{\begin{bmatrix}{\frac {-4}{3}}\\{\frac {-1}{3}}\\{\frac {5}{3}}\end{bmatrix}}={\begin{bmatrix}{\frac {-18}{42}}\\{\frac {27}{42}}\\{\frac {-9}{42}}\end{bmatrix}}={\begin{bmatrix}{\frac {-6}{14}}\\{\frac {9}{14}}\\{\frac {-3}{14}}\end{bmatrix}}}
и
B
3
=
⟨
b
3
∗
,
b
3
∗
⟩
=
[
−
6
14
9
14
−
3
14
]
[
−
6
14
9
14
−
3
14
]
=
126
196
=
9
14
{\displaystyle B_{3}=\langle b_{3}^{*},b_{3}^{*}\rangle ={\begin{bmatrix}{\frac {-6}{14}}\\{\frac {9}{14}}\\{\frac {-3}{14}}\end{bmatrix}}{\begin{bmatrix}{\frac {-6}{14}}\\{\frac {9}{14}}\\{\frac {-3}{14}}\end{bmatrix}}={\frac {126}{196}}={\frac {9}{14}}}
While
k
≤
3
{\displaystyle k\leq 3}
DO
Сократить размер
b
3
{\displaystyle b_{3}}
и скорректировать
μ
3
,
1
{\displaystyle \mu _{3,1}}
и
μ
3
,
2
{\displaystyle \mu _{3,2}}
в соответствии с процедурой сокращения в 4 шаге:
Для
∣
μ
3
,
1
∣>
1
2
{\displaystyle \mid \mu _{3,1}\mid >{\frac {1}{2}}}
выполнить подпрограмму сокращения для (3,1):
r
=
⌊
0.5
+
μ
3
,
l
⌋
=
5
{\displaystyle r=\lfloor 0.5+\mu _{3,l}\rfloor =5}
и
b
3
=
b
3
−
5
b
1
=
[
3
5
6
]
−
[
5
5
5
]
=
[
−
2
0
1
]
{\displaystyle b_{3}=b_{3}-5b_{1}={\begin{bmatrix}3\\5\\6\end{bmatrix}}-{\begin{bmatrix}5\\5\\5\end{bmatrix}}={\begin{bmatrix}-2\\0\\1\end{bmatrix}}}
μ
3
,
1
=
μ
3
,
l
−
r
μ
1
,
1
=
−
1
3
(
<
1
2
)
{\displaystyle \mu _{3,1}=\mu _{3,l}-r\mu _{1,1}={\frac {-1}{3}}\left(<{\frac {1}{2}}\right)}
Присвоить
μ
3
,
1
=
μ
3
,
1
−
r
=
14
3
−
5
=
−
1
3
{\displaystyle \mu _{3,1}=\mu _{3,1}-r={\frac {14}{3}}-5={\frac {-1}{3}}}
For
∣
μ
3
,
2
∣>
1
2
{\displaystyle \mid \mu _{3,2}\mid >{\frac {1}{2}}}
выполнить подпрограмму сокращения для (3,2):
r
=
⌊
0.5
+
μ
3
,
2
⌋
=
1
{\displaystyle r=\lfloor 0.5+\mu _{3,2}\rfloor =1}
и
b
3
=
b
3
−
b
2
=
[
3
5
6
]
−
[
−
1
0
2
]
=
[
4
5
4
]
{\displaystyle b_{3}=b_{3}-b_{2}={\begin{bmatrix}3\\5\\6\end{bmatrix}}-{\begin{bmatrix}-1\\0\\2\end{bmatrix}}={\begin{bmatrix}4\\5\\4\end{bmatrix}}}
Присвоить
μ
3
,
2
=
μ
3
,
2
−
r
μ
2
,
2
=
13
14
−
1
=
−
1
14
{\displaystyle \mu _{3,2}=\mu _{3,2}-r\mu _{2,2}={\frac {13}{14}}-1={\frac {-1}{14}}}
μ
3
,
2
=
μ
3
,
2
−
1
=
−
1
14
(
<
1
2
)
{\displaystyle \mu _{3,2}=\mu _{3,2}-1={\frac {-1}{14}}\left(<{\frac {1}{2}}\right)}
Так как
B
3
<
(
3
4
−
μ
3
,
2
2
)
B
2
{\displaystyle B_{3}<\left({\frac {3}{4}}-\mu _{3,2}^{2}\right)B_{2}}
, следовательно:
Поменять местами
b
3
{\displaystyle b_{3}}
и
b
2
{\displaystyle b_{2}}
k
:=
2
{\displaystyle k:=2}
Применить замену, продолжить исполнение алгоритма с базисом решетки, который задан следующим образом
[
1
4
−
1
1
5
0
1
4
2
]
{\displaystyle {\begin{bmatrix}1&4&-1\\1&5&0\\1&4&2\end{bmatrix}}}
Повторить шаги алгоритма.
b
1
∗
=
b
1
=
[
1
1
1
]
,
B
1
=
3
{\displaystyle b_{1}^{*}=b_{1}={\begin{bmatrix}1\\1\\1\end{bmatrix}},B_{1}=3}
μ
2
,
1
=
⟨
b
2
,
b
1
∗
⟩
B
1
=
[
4
5
4
]
[
1
1
1
]
3
=
13
3
(
>
1
2
)
{\displaystyle \mu _{2,1}={\frac {\langle b_{2},b_{1}^{*}\rangle }{B_{1}}}={\frac {{\begin{bmatrix}4\\5\\4\end{bmatrix}}{\begin{bmatrix}1\\1\\1\end{bmatrix}}}{3}}={\frac {13}{3}}\left(>{\frac {1}{2}}\right)}
b
2
∗
=
b
2
−
μ
2
,
1
b
1
∗
=
[
4
5
4
]
−
13
3
[
1
1
1
]
=
[
−
1
3
2
3
−
1
3
]
{\displaystyle b_{2}^{*}=b_{2}-\mu _{2,1}b_{1}^{*}={\begin{bmatrix}4\\5\\4\end{bmatrix}}-{\frac {13}{3}}{\begin{bmatrix}1\\1\\1\end{bmatrix}}={\begin{bmatrix}{\frac {-1}{3}}\\{\frac {2}{3}}\\{\frac {-1}{3}}\end{bmatrix}}}
.
B
2
=
⟨
b
2
∗
,
b
2
∗
⟩
=
2
3
{\displaystyle B_{2}=\langle b_{2}^{*},b_{2}^{*}\rangle ={\frac {2}{3}}}
.For
∣
μ
2
,
1
∣>
1
2
{\displaystyle \mid \mu _{2,1}\mid >{\frac {1}{2}}}
выполнить подпрограмму сокращения для (2,1):
r
=
⌊
0.5
+
μ
2
,
l
⌋
=
4
{\displaystyle r=\lfloor 0.5+\mu _{2,l}\rfloor =4}
и
b
2
=
b
2
−
4
b
1
=
[
4
5
4
]
−
[
4
4
4
]
=
[
0
1
0
]
{\displaystyle b_{2}=b_{2}-4b_{1}={\begin{bmatrix}4\\5\\4\end{bmatrix}}-{\begin{bmatrix}4\\4\\4\end{bmatrix}}={\begin{bmatrix}0\\1\\0\end{bmatrix}}}
Set
μ
2
,
1
=
μ
2
,
1
−
4
μ
1
,
1
=
13
3
−
4
=
1
3
(
<
1
2
)
{\displaystyle \mu _{2,1}=\mu _{2,1}-4\mu _{1,1}={\frac {13}{3}}-4={\frac {1}{3}}\left(<{\frac {1}{2}}\right)}
Так как
B
2
<
(
3
4
−
μ
2
,
1
2
)
B
1
{\displaystyle B_{2}<\left({\frac {3}{4}}-\mu _{2,1}^{2}\right)B_{1}}
, следовательно: Поменять местами
b
2
{\displaystyle b_{2}}
и
b
1
{\displaystyle b_{1}}
ВЫВОД: базис, сокращенный методом ЛЛЛ
[
0
1
−
1
1
0
0
0
1
2
]
{\displaystyle {\begin{bmatrix}0&1&-1\\1&0&0\\0&1&2\end{bmatrix}}}
Применение алгоритма
ЛЛЛ часто применяется в алгоритмах обнаружения MIMO [7] и криптосистемах с открытым ключем : криптосистемах, основанных на задаче о ранце [англ.] , RSA с конкретными настройками, NTRUEncrypt , и так далее. Алгоритм может быть использован для нахождения целочисленных решений в разных задачах.[8]
В частности, алгоритм ЛЛЛ формирует ядро алгоритмов поиска целочисленных решений . К примеру, зная, что r = 1.618034 это (округленный) корень полинома,
неизвестное квадратное уравнение с целыми коэффициентами получить с помощью алгоритма ЛЛЛ уменьшения базиса решетки в
R
4
{\displaystyle R^{4}}
, порожденной векторами
[
1
,
0
,
0
,
10000
r
2
]
,
[
0
,
1
,
0
,
10000
r
]
,
{\displaystyle [1,0,0,10000r^{2}],[0,1,0,10000r],}
and
[
0
,
0
,
1
,
10000
]
{\displaystyle [0,0,1,10000]}
. Первый вектор в уменьшенном базисе будет целочисленной линейной комбинацией трех данных, поэтому будет обязательно представим в виде
[
a
,
b
,
c
,
10000
(
a
r
2
+
b
r
+
c
)
]
{\displaystyle [a,b,c,10000(ar^{2}+br+c)]}
; но такой вектор будет коротким, только если a , b , c достаточно маленькие и
a
r
2
+
b
r
+
c
{\displaystyle ar^{2}+br+c}
еще меньше. Поэтому первые три координаты полученного короткого вектора с большой вероятностью будут коэффициентами целочисленного квадратного полинома , у которого один из корней - r . В этом примере алгоритм ЛЛЛ в качестве результата выводит вектор [1, -1, -1, 0.00025], и, действительно, у
x
2
−
x
−
1
{\displaystyle x^{2}-x-1}
есть корень, равный золотому сечению , 1.6180339887....
Реализации алгоритма
ЛЛЛ реализован в следующих функциях и методах:
См. также
Примечания
↑ Ленстра А., Ленстра Х., Ловас Л. Factoring polynomials with rational coefficients // Mathematische Annalen . — 1982. — С. 515–534 . — ISSN 4 . — doi :10.1007/BF01457454 .
↑ 1 2 3 4 Galbraith, Steven. Часть 17 // Mathematics of Public Key Cryptography (англ.) . — 2012.
↑ Nguyen, Phong Q., Stehlé, Damien. Low-dimensional lattice basis reduction revisited (англ.) // ACM Transactions on Algorithms. — P. 1–48. — doi :10.1145/1597036.1597050 .
↑ Silverman,Joseph. Introduction to Mathematical Cryptography Errata .
↑ Regev, Oded. Lattices in Computer Science: LLL Algorithm // New York University.
↑ Bosma, Wieb. 4. LLL .
↑ Shahabuddin, Shahriar et al., "A Customized Lattice Reduction Multiprocessor for MIMO Detection", in Arxiv preprint, Январь 2015.
↑ D. Simon. Selected applications of LLL in number theory // LLL+25 Conference дата=2007. — Caen, France.
Литература
Huguette, Napias. A generalization of the LLL algorithm over euclidean rings or orders // J. The. Nombr. Bordeaux. — 1996. — doi :10.5802/jtnb.176 .
Cohen, Henri. A course in computational algebraic number theory. — Springer, 2000. — Vol. 138. — ISBN 3-540-55640-0 .
Borwein, Peter. Computational Excursions in Analysis and Number Theory. — 2002. — ISBN 0-387-95444-9 .
Luk, Franklin T.; Qiao, Sanzheng (2011). "A pivoted LLL algorithm". Lin. Alg. Appl . 434 (11): 2296—2307. doi :10.1016/j.laa.2010.04.003 .
Hoffstein, Jeffrey. An Introduction to Mathematical Cryptography / Jeffrey Hoffstein, Jill Pipher, J.H. Silverman. — Springer, 2008. — ISBN 978-0-387-77993-5 .