Просеивание решеток - Lattice sieving

Просеивание решеток это метод нахождения гладкий; плавный значения двумерного полинома над большим регионом. Он почти исключительно используется вместе с числовое поле сито. Первоначальная идея решетчатого сита пришла из Джон Поллард.[1]

Алгоритм неявно включает идеальный структура числовое поле полинома; он использует теорему о том, что любой главный идеал над некоторым рациональным простым числом п можно записать как . Затем выбирается много простых чисел q подходящего размера, обычно чуть выше факторная база лимит, и продолжается

Для каждого q, перечислите основные идеалы выше q факторизуя многочлен f (a, b) по
Для каждого из этих простых идеалов, которые называются `` особыми '' s, построить сокращенная база для решетки L, порожденной ; установить двумерный массив, называемый область сита до нуля.
Для каждого основного идеала в факторной базе построить редуцированный базис для подрешетки L, порожденной
Для каждого элемента этой подрешетки, лежащего в пределах достаточно большой области сита, добавьте к этой записи.
Считайте все записи в области сита с достаточно большим значением

Для применения сита числового поля необходимо, чтобы два полинома имели гладкие значения; это обрабатывается путем выполнения внутреннего цикла над обоими многочленами, в то время как special-q может быть взят с любой стороны.

Процедуры внутренней петли

Существует несколько умных подходов к реализации самого внутреннего цикла, поскольку эффективное перечисление элементов решетки в прямоугольной области само по себе является нетривиальной проблемой, а эффективное группирование обновлений в решетчатой ​​области для использования преимуществ структур кеша. это еще одна нетривиальная проблема. Обычное решение первого - упорядочить точки решетки, заданные парой генераторов, выбранных таким образом, чтобы правило принятия решения, которое переводит вас от одной точки решетки к другой, было простым; обычное решение второго - собрать серию списков обновлений для подобластей массива, меньших, чем размер кэша уровня 2, причем количество списков примерно равно количеству строк в кэше L1, чтобы добавление записи в список обычно является попаданием в кэш, а затем применение списков обновлений по одному, при этом каждое приложение будет попаданием в кэш второго уровня. Чтобы это было эффективно, вам необходимо иметь возможность хранить количество обновлений, по крайней мере, сопоставимое с размером массива сит, поэтому это может быть довольно расточительным в использовании памяти.

использованная литература

  1. ^ Арьен К. Ленстра и Х. В. Ленстра младший (ред.). «Развитие сита числового поля». Конспект лекций по математике. (1993) 1554. Springer-Verlag.