Тест ассоциативности — проверка бинарной операции на ассоциативность. Наивная процедура проверки, заключающаяся в переборе всех возможных троек аргументов операции, требует 
  
    
      
        O
        (
        
          n
          
            3
          
        
        )
      
    
    {\displaystyle O(n^{3})}
  
 времени, где 
  
    
      
        n
      
    
    {\displaystyle n}
  
 — размер множества, над которым определена операция. Ранние тесты ассоциативности не давали асимптотических улучшений по сравнению с наивным алгоритмом, однако позволяли улучшить время работы в некоторых частных случаях. Например, Роберт Тарьян в 1972 году обнаружил, что предложенный в 1949 году тест Лайта позволяет выполнить проверку за 
  
    
      
        O
        (
        
          n
          
            2
          
        
        log
        ⁡
        n
        )
      
    
    {\displaystyle O(n^{2}\log n)}
  
, если исследуемая бинарная операция обратима (задаёт квазигруппу). Первый вероятностный тест, улучшающий время работы с 
  
    
      
        O
        (
        
          n
          
            3
          
        
        )
      
    
    {\displaystyle O(n^{3})}
  
 до 
  
    
      
        O
        (
        
          n
          
            2
          
        
        log
        ⁡
        
          δ
          
            −
            1
          
        
        )
      
    
    {\textstyle O(n^{2}\log \delta ^{-1})}
  
, был предложен в 1996 году Шридхаром Раджагопаланом и Леонардом Шульманом. В 2015 году был предложен квантовый алгоритм, проверяющий операцию на ассоциативность за время 
  
    
      
        O
        (
        
          n
          
            10
            
              /
            
            7
          
        
        )
      
    
    {\textstyle O(n^{10/7})}
  
, что является улучшением по сравнению с поиском Гровера, работающим за 
  
    
      
        O
        (
        
          n
          
            3
            
              /
            
            2
          
        
        )
      
    
    {\textstyle O(n^{3/2})}
  
.
 Дана таблица размера 
  
    
      
        n
        ×
        n
      
    
    {\displaystyle n\times n}
  
, описывающая замкнутую операцию 
  
    
      
        ⋅
        :
        G
        ×
        G
        ↦
        G
      
    
    {\displaystyle \cdot :G\times G\mapsto G}
  
 на множестве 
  
    
      
        G
      
    
    {\displaystyle G}
  
 размера 
  
    
      
        n
      
    
    {\displaystyle n}
  
, то есть операция 
  
    
      
        ⋅
      
    
    {\displaystyle \cdot }
  
 задана своей таблицей Кэли, а 
  
    
      
        G
      
    
    {\displaystyle G}
  
 вместе с данной операцией образует магму. Необходимо проверить, что для любых 
  
    
      
        a
        ,
        b
        ,
        c
        ∈
        G
      
    
    {\displaystyle a,b,c\in G}
  
 выполнено 
  
    
      
        a
        ⋅
        (
        b
        ⋅
        c
        )
        =
        (
        a
        ⋅
        b
        )
        ⋅
        c
      
    
    {\displaystyle a\cdot (b\cdot c)=(a\cdot b)\cdot c}
  
 (другими словами, операция ассоциативна). Любой детерминированный алгоритм, решающий данную задачу, потребует не менее 
  
    
      
        O
        (
        
          n
          
            2
          
        
        )
      
    
    {\displaystyle O(n^{2})}
  
 времени, так как каждая ячейка таблицы Кэли должна быть считана хотя бы раз. Полный перебор всех троек 
  
    
      
        a
        ,
        b
        ,
        c
      
    
    {\displaystyle a,b,c}
  
 с проверкой того, что равенство выполняется для каждой тройки, требует 
  
    
      
        O
        (
        
          n
          
            3
          
        
        )
      
    
    {\displaystyle O(n^{3})}
  
 времени.
 Проверка ассоциативности — одна из естественных задач, возникающих при работе с таблицами Кэли различных операций. В частности, такая проверка реализована в системах компьютерной алгебры GAP и Maple. В наиболее общем случае, существуют операции, для которых все тройки, кроме одной, являются ассоциативными — примером такой операции на 
  
    
      
        n
        ≥
        3
      
    
    {\displaystyle n\geq 3}
  
 элементах служит операция 
  
    
      
        ⋅
      
    
    {\displaystyle \cdot }
  
, такая что 
  
    
      
        1
        ⋅
        2
        =
        2
      
    
    {\displaystyle 1\cdot 2=2}
  
, а для всех остальных элементов 
  
    
      
        a
        ⋅
        b
        =
        3
      
    
    {\displaystyle a\cdot b=3}
  
. Её единственной неассоциативной тройкой является 
  
    
      
        1
        ,
        1
        ,
        2
      
    
    {\displaystyle 1,1,2}
  
, так как 
  
    
      
        1
        ⋅
        (
        1
        ⋅
        2
        )
        =
        1
        ⋅
        2
        =
        2
        ≠
        3
        =
        3
        ⋅
        2
        =
        (
        1
        ⋅
        1
        )
        ⋅
        2
      
    
    {\displaystyle 1\cdot (1\cdot 2)=1\cdot 2=2\neq 3=3\cdot 2=(1\cdot 1)\cdot 2}
  
. Из-за существования таких операций может сложиться впечатление, что проверка ассоциативности потребует обработки всех возможных троек и потому асимптотическое улучшение времени работы алгоритма невозможно. По этой же причине наивный вероятностный алгоритм, проверяющий ассоциативность случайным образом выбранных троек, потребует 
  
    
      
        O
        (
        
          n
          
            3
          
        
        )
      
    
    {\displaystyle O(n^{3})}
  
 проверок, чтобы гарантировать достаточно низкую вероятность ошибки. Однако предложенный Раджагопаланом и Шульманом алгоритм показывает, что эта оценка может быть улучшена, и служит наглядным примером того, как вероятностные алгоритмы могут справляться с задачами, которые выглядят трудными для детерминированных алгоритмов — по состоянию на 2020 год детерминированные алгоритмы, решающие данную задачу за субкубическое время, неизвестны.
 В 1961 году Альфред Клиффорд и Гордон Престон опубликовали в книге «Алгебраическая теория полугрупп» тест ассоциативности, сообщённый одному из авторов доктором Лайтом в 1949 году. Алгоритм заключается в рассмотрении для каждого 
  
    
      
        g
        ∈
        G
      
    
    {\displaystyle g\in G}
  
 операций 
  
    
      
        x
        
          ⋆
          
            g
          
        
        y
        =
        x
        ⋅
        (
        g
        ⋅
        y
        )
      
    
    {\displaystyle x\star _{g}y=x\cdot (g\cdot y)}
  
 и 
  
    
      
        x
        
          ∘
          
            g
          
        
        y
        =
        (
        x
        ⋅
        g
        )
        ⋅
        y
      
    
    {\displaystyle x\circ _{g}y=(x\cdot g)\cdot y}
  
. По определению, операция 
  
    
      
        ⋅
      
    
    {\displaystyle \cdot }
  
 ассоциативна если и только если 
  
    
      
        
          ⋆
          
            g
          
        
        =
        
          ∘
          
            g
          
        
      
    
    {\displaystyle \star _{g}=\circ _{g}}
  
 (таблицы Кэли операций совпадают) для всех 
  
    
      
        g
        ∈
        G
      
    
    {\displaystyle g\in G}
  
. Лайт обратил внимание, что если 
  
    
      
        G
        =
        ⟨
        S
        ⟩
      
    
    {\displaystyle G=\langle S\rangle }
  
, то есть у 
  
    
      
        G
      
    
    {\displaystyle G}
  
 есть порождающее множество 
  
    
      
        S
      
    
    {\displaystyle S}
  
, то проверку достаточно произвести лишь для 
  
    
      
        g
        ∈
        S
      
    
    {\displaystyle g\in S}
  
.
 Если в определениях выше 
  
    
      
        
          ⋆
          
            a
          
        
        =
        
          ∘
          
            a
          
        
      
    
    {\displaystyle \star _{a}=\circ _{a}}
  
 и 
  
    
      
        
          ⋆
          
            b
          
        
        =
        
          ∘
          
            b
          
        
      
    
    {\displaystyle \star _{b}=\circ _{b}}
  
, то 
  
    
      
        
          ⋆
          
            a
            ⋅
            b
          
        
        =
        
          ∘
          
            a
            ⋅
            b
          
        
      
    
    {\displaystyle \star _{a\cdot b}=\circ _{a\cdot b}}
  
.
 Пусть 
  
    
      
        (
        x
        ⋅
        a
        )
        ⋅
        y
        =
        x
        ⋅
        (
        a
        ⋅
        y
        )
      
    
    {\displaystyle (x\cdot a)\cdot y=x\cdot (a\cdot y)}
  
 и 
  
    
      
        (
        x
        ⋅
        b
        )
        ⋅
        y
        =
        x
        ⋅
        (
        b
        ⋅
        y
        )
      
    
    {\displaystyle (x\cdot b)\cdot y=x\cdot (b\cdot y)}
  
 для всех 
  
    
      
        x
        ,
        y
        ∈
        G
      
    
    {\displaystyle x,y\in G}
  
. Тогда 
  
    
      
        x
        ⋅
        (
        (
        a
        ⋅
        b
        )
        ⋅
        y
        )
        =
        x
        ⋅
        (
        a
        ⋅
        (
        b
        ⋅
        y
        )
        )
        =
        (
        x
        ⋅
        a
        )
        ⋅
        (
        b
        ⋅
        y
        )
        =
        (
        (
        x
        ⋅
        a
        )
        ⋅
        b
        )
        ⋅
        y
        =
        (
        x
        ⋅
        (
        a
        ⋅
        b
        )
        )
        ⋅
        y
      
    
    {\displaystyle x\cdot ((a\cdot b)\cdot y)=x\cdot (a\cdot (b\cdot y))=(x\cdot a)\cdot (b\cdot y)=((x\cdot a)\cdot b)\cdot y=(x\cdot (a\cdot b))\cdot y}
  
. ■
 В худшем случае (например, для операции максимума) наименьшее порождающее множества магмы может состоять из 
  
    
      
        n
      
    
    {\textstyle n}
  
 элементов, потому тест придётся провести для всех элементов 
  
    
      
        G
      
    
    {\textstyle G}
  
, что займёт 
  
    
      
        O
        (
        
          n
          
            3
          
        
        )
      
    
    {\textstyle O(n^{3})}
  
 времени. В 1972 Роберт Тарьян обратил внимание на то, что тест Лайта может быть эффективен для проверки того, задаёт ли заданная операция группу. Это связано с тем, что для некоторых особых типов операций, в том числе операций, удовлетворяющих групповой аксиоме наличия обратного элемента, всегда можно выделить порождающее множество небольшого размера.
 Пусть в 
  
    
      
        G
      
    
    {\displaystyle G}
  
 любое уравнение вида 
  
    
      
        a
        =
        b
        ⋅
        x
      
    
    {\displaystyle a=b\cdot x}
  
 имеет единственное решение 
  
    
      
        x
      
    
    {\displaystyle x}
  
 (то есть 
  
    
      
        G
      
    
    {\displaystyle G}
  
 — квазигруппа). Тогда в 
  
    
      
        G
      
    
    {\displaystyle G}
  
 можно выделить порождающее множество 
  
    
      
        S
      
    
    {\displaystyle S}
  
 размером не больше 
  
    
      
        ⌊
        
          log
          
            2
          
        
        ⁡
        n
        ⌋
        +
        1
      
    
    {\displaystyle \lfloor \log _{2}n\rfloor +1}
  
.
 Пусть 
  
    
      
        T
        ⊂
        G
      
    
    {\displaystyle T\subset G}
  
 — некоторое подмножество 
  
    
      
        G
      
    
    {\displaystyle G}
  
, такое что 
  
    
      
        G
        ≠
        ⟨
        T
        ⟩
      
    
    {\displaystyle G\neq \langle T\rangle }
  
 и 
  
    
      
        b
        ∈
        G
        ∖
        ⟨
        T
        ⟩
      
    
    {\displaystyle b\in G\setminus \langle T\rangle }
  
. Тогда, в силу того, что 
  
    
      
        (
        G
        ,
        ⋅
        )
      
    
    {\displaystyle (G,\cdot )}
  
 квазигруппа, 
  
    
      
        |
        ⟨
        T
        ∪
        {
        b
        }
        ⟩
        |
        ≥
        2
        |
        ⟨
        T
        ⟩
        |
      
    
    {\displaystyle \vert \langle T\cup \{b\}\rangle \vert \geq 2\vert \langle T\rangle \vert }
  
, так как все элементы вида 
  
    
      
        t
        ⋅
        b
      
    
    {\displaystyle t\cdot b}
  
 для 
  
    
      
        t
        ∈
        ⟨
        T
        ⟩
      
    
    {\displaystyle t\in \langle T\rangle }
  
 различны и не содержатся в 
  
    
      
        ⟨
        T
        ⟩
      
    
    {\displaystyle \langle T\rangle }
  
. Таким образом, последовательное добавление в 
  
    
      
        T
        ≠
        ∅
      
    
    {\displaystyle T\neq \varnothing }
  
 элементов вида 
  
    
      
        b
        ∈
        G
        ∖
        ⟨
        T
        ⟩
      
    
    {\displaystyle b\in G\setminus \langle T\rangle }
  
 может быть произведено не более 
  
    
      
        
          log
          
            2
          
        
        ⁡
        |
        G
        |
      
    
    {\displaystyle \log _{2}\vert G\vert }
  
 раз. ■
 По определению, 
  
    
      
        G
      
    
    {\displaystyle G}
  
 является квазигруппой если и только если её таблица Кэли представляет собой латинский квадрат, что может быть проверено за время 
  
    
      
        O
        (
        
          n
          
            2
          
        
        )
      
    
    {\textstyle O(n^{2})}
  
. Применение к квазигруппе описанной выше процедуры позволяет в свою очередь детерминированно проверить, является ли 
  
    
      
        G
      
    
    {\displaystyle G}
  
 группой, за 
  
    
      
        O
        (
        
          n
          
            2
          
        
        log
        ⁡
        n
        )
      
    
    {\displaystyle O(n^{2}\log n)}
  
.
 Первым субкубическим тестом стал алгоритм типа Монте-Карло, предложенный в 1996 году Шридхаром Раджагопаланом из Принстонского университета и Леонардом Шульманом из Технологического института Джорджии. Предложенная ими процедура требует 
  
    
      
        O
        (
        
          n
          
            2
          
        
        log
        ⁡
        
          δ
          
            −
            1
          
        
        )
      
    
    {\displaystyle O(n^{2}\log \delta ^{-1})}
  
 времени, где 
  
    
      
        δ
      
    
    {\displaystyle \delta }
  
 — наибольшая допустимая вероятность ошибки.
 Алгоритм использует группоидную алгебру 
  
    
      
        
          
            Z
          
          
            2
          
        
        [
        G
        ]
      
    
    {\displaystyle \mathbb {Z} _{2}[G]}
  
 — линейное пространство (алгебру) над двухэлементным полем 
  
    
      
        
          
            Z
          
          
            2
          
        
      
    
    {\displaystyle \mathbb {Z} _{2}}
  
 размерности 
  
    
      
        n
      
    
    {\displaystyle n}
  
, базисные векторы 
  
    
      
        
          v
          
            
              g
              
                1
              
            
          
        
        ,
        …
        ,
        
          v
          
            
              g
              
                n
              
            
          
        
      
    
    {\displaystyle v_{g_{1}},\dots ,v_{g_{n}}}
  
 которого соответствуют всем различным элементам магмы 
  
    
      
        
          g
          
            1
          
        
        ,
        …
        ,
        
          g
          
            n
          
        
      
    
    {\displaystyle g_{1},\dots ,g_{n}}
  
. Векторы такого пространства имеют вид
 Для них определена операция суммы
 а также операция произведения
 Произведение векторов в такой алгебре становится более интуитивным, если считать, что для любой пары базисных векторов оно определено как 
  
    
      
        
          v
          
            x
          
        
        ⋅
        
          v
          
            y
          
        
        =
        
          v
          
            x
            ⋅
            y
          
        
      
    
    {\displaystyle v_{x}\cdot v_{y}=v_{x\cdot y}}
  
, а произведение любой другой пары векторов получается «раскрытием скобок» и перегруппировкой слагаемых. Например, для 
  
    
      
        G
        =
        {
        p
        ,
        q
        ,
        r
        }
      
    
    {\displaystyle G=\{p,q,r\}}
  
 произведение имеет вид
 а при подстановке 
  
    
      
        
          v
          
            x
          
        
        ⋅
        
          v
          
            y
          
        
        =
        
          v
          
            x
            ⋅
            y
          
        
      
    
    {\displaystyle v_{x}\cdot v_{y}=v_{x\cdot y}}
  
 получается выражение, соответствующее общему определению. Для определённой таким образом алгебры имеет место следующая лемма:
 Операция исходной магмы ассоциативна если и только если 
  
    
      
        A
        ⋅
        (
        B
        ⋅
        C
        )
        =
        (
        A
        ⋅
        B
        )
        ⋅
        C
      
    
    {\displaystyle A\cdot (B\cdot C)=(A\cdot B)\cdot C}
  
 для любых 
  
    
      
        A
        ,
        B
        ,
        C
        ∈
        
          
            Z
          
          
            2
          
        
        [
        G
        ]
      
    
    {\displaystyle A,B,C\in \mathbb {Z} _{2}[G]}
  
. Если операция не ассоциативна, то вероятность того, что указанное равенство будет выполнено для случайной равномерно выбранной тройки 
  
    
      
        a
        ,
        b
        ,
        c
      
    
    {\displaystyle a,b,c}
  
, не превосходит 
  
    
      
        
          
            7
            8
          
        
      
    
    {\textstyle {\frac {7}{8}}}
  
.
 Для проверки ассоциативности выбираются случайные 
  
    
      
        A
        ,
        B
        ,
        C
        ∈
        
          
            Z
          
          
            2
          
        
        [
        G
        ]
      
    
    {\displaystyle A,B,C\in \mathbb {Z} _{2}[G]}
  
, для которых проверяется 
  
    
      
        A
        ⋅
        (
        B
        ⋅
        C
        )
        =
        (
        A
        ⋅
        B
        )
        ⋅
        C
      
    
    {\displaystyle A\cdot (B\cdot C)=(A\cdot B)\cdot C}
  
. Такая проверка может быть осуществлена за время 
  
    
      
        O
        (
        
          n
          
            2
          
        
        )
      
    
    {\displaystyle O(n^{2})}
  
, а для достижения вероятности ошибки, не превосходящей 
  
    
      
        δ
      
    
    {\displaystyle \delta }
  
, достаточно сделать 
  
    
      
        
          log
          
            8
            
              /
            
            7
          
        
        ⁡
        
          δ
          
            −
            1
          
        
      
    
    {\displaystyle \log _{8/7}\delta ^{-1}}
  
 проверок, что даёт общее время работы 
  
    
      
        O
        
          (
          
            
              n
              
                2
              
            
            log
            ⁡
            
              δ
              
                −
                1
              
            
          
          )
        
      
    
    {\textstyle O\left(n^{2}\log \delta ^{-1}\right)}
  
.
 Подход Раджагопалана и Шульмана может быть обобщён для проверки тождеств общего вида при условии, что каждая переменная встречается ровно один раз в левой и правой части тождества.
 Для примера можно рассмотреть множество 
  
    
      
        G
      
    
    {\displaystyle G}
  
, на элементах которого заданы три операции: «объединение» 
  
    
      
        a
        ∪
        b
      
    
    {\displaystyle a\cup b}
  
, «пересечение» 
  
    
      
        a
        ∩
        b
      
    
    {\displaystyle a\cap b}
  
 и «дополнение» 
  
    
      
        
          
            
              a
              ¯
            
          
        
      
    
    {\displaystyle {\bar {a}}}
  
. Необходимо проверить, что 
  
    
      
        
          
            
              a
              ∩
              (
              b
              ∪
              c
              )
            
            ¯
          
        
        =
        
          
            a
            ¯
          
        
        ∪
        (
        
          
            b
            ¯
          
        
        ∩
        
          
            c
            ¯
          
        
        )
      
    
    {\displaystyle {\overline {a\cap (b\cup c)}}={\overline {a}}\cup ({\overline {b}}\cap {\overline {c}})}
  
. Для этого можно рассмотреть индуцированные на 
  
    
      
        
          
            Z
          
          
            2
          
        
        [
        G
        ]
      
    
    {\displaystyle \mathbb {Z} _{2}[G]}
  
 операции
 и проверить, что для этих операций в 
  
    
      
        
          
            Z
          
          
            2
          
        
        [
        G
        ]
      
    
    {\displaystyle \mathbb {Z} _{2}[G]}
  
 верно 
  
    
      
        
          
            
              A
              ∩
              (
              B
              ∪
              C
              )
            
            ¯
          
        
        =
        
          
            A
            ¯
          
        
        ∪
        (
        
          
            B
            ¯
          
        
        ∩
        
          
            C
            ¯
          
        
        )
      
    
    {\displaystyle {\overline {A\cap (B\cup C)}}={\overline {A}}\cup ({\overline {B}}\cap {\overline {C}})}
  
. В наиболее общем виде процедура может быть охарактеризована следующей теоремой:
 Пусть 
  
    
      
        
          D
          
            1
          
        
        ,
        …
        ,
        
          D
          
            k
          
        
      
    
    {\displaystyle D_{1},\dots ,D_{k}}
  
 — конечные множества, а 
  
    
      
        
          ∘
          
            1
          
        
        ,
        …
        ,
        
          ∘
          
            m
          
        
      
    
    {\displaystyle \circ _{1},\dots ,\circ _{m}}
  
 — набор операций, определённых над конечными декартовыми произведениями этих множеств, таких что операция 
  
    
      
        
          ∘
          
            j
          
        
      
    
    {\displaystyle \circ _{j}}
  
 определена на множестве 
  
    
      
        
          D
          
            σ
            (
            j
            ,
            1
            )
          
        
        ×
        ⋯
        ×
        
          D
          
            σ
            (
            j
            ,
            
              c
              
                j
              
            
            )
          
        
      
    
    {\displaystyle D_{\sigma (j,1)}\times \dots \times D_{\sigma (j,c_{j})}}
  
, где 
  
    
      
        
          c
          
            j
          
        
      
    
    {\displaystyle c_{j}}
  
 — арность операции 
  
    
      
        
          ∘
          
            j
          
        
      
    
    {\displaystyle \circ _{j}}
  
. Тогда проверка на истинность составленного из этих операций тождества, такого что каждая переменная встречается в левой и правой его частях ровно один раз, может быть выполнена за время 
  
    
      
        O
        (
        
          2
          
            k
          
        
        l
        M
        log
        ⁡
        
          δ
          
            −
            1
          
        
        )
      
    
    {\displaystyle O(2^{k}lM\log \delta ^{-1})}
  
, где 
  
    
      
        M
        =
        
          max
          
            j
          
        
        
          (
          
            |
            
              D
              
                σ
                (
                j
                ,
                1
                )
              
            
            |
            ⋅
            …
            ⋅
            |
            
              D
              
                σ
                (
                j
                ,
                
                  c
                  
                    j
                  
                
                )
              
            
            |
          
          )
        
      
    
    {\textstyle M=\max _{j}\left(\vert D_{\sigma (j,1)}\vert \cdot \ldots \cdot \vert D_{\sigma (j,c_{j})}\vert \right)}
  
 — наибольший возможный размер области определения 
  
    
      
        
          ∘
          
            j
          
        
      
    
    {\displaystyle \circ _{j}}
  
, 
  
    
      
        l
      
    
    {\displaystyle l}
  
 — суммарное число использованных в тождестве операций, 
  
    
      
        k
      
    
    {\displaystyle k}
  
 — суммарное число переменных, 
  
    
      
        δ
      
    
    {\displaystyle \delta }
  
 — наибольшая допустимая вероятность ошибки.
 В случае 
  
    
      
        
          |
        
        
          D
          
            1
          
        
        
          |
        
        =
        ⋯
        =
        
          |
        
        
          D
          
            k
          
        
        
          |
        
        =
        n
      
    
    {\displaystyle |D_{1}|=\dots =|D_{k}|=n}
  
 операция 
  
    
      
        
          ∘
          
            j
          
        
      
    
    {\displaystyle \circ _{j}}
  
 имеет область определения размера 
  
    
      
        
          n
          
            
              c
              
                j
              
            
          
        
      
    
    {\displaystyle n^{c_{j}}}
  
, в связи с чем 
  
    
      
        M
        =
        
          n
          
            max
            
              c
              
                j
              
            
          
        
      
    
    {\displaystyle M=n^{\max c_{j}}}
  
 и вычислительная сложность процедуры приобретает вид 
  
    
      
        O
        (
        
          2
          
            k
          
        
        l
        
          n
          
            max
            
              c
              
                j
              
            
          
        
        log
        ⁡
        
          δ
          
            −
            1
          
        
        )
      
    
    {\displaystyle O(2^{k}ln^{\max c_{j}}\log \delta ^{-1})}
  
, в то время как наивная проверка потребовала бы 
  
    
      
        O
        (
        l
        
          n
          
            k
          
        
        )
      
    
    {\displaystyle O(ln^{k})}
  
 операций.
 Данный результат может быть улучшен, если вместо 
  
    
      
        
          
            Z
          
          
            2
          
        
        [
        G
        ]
      
    
    {\displaystyle \mathbb {Z} _{2}[G]}
  
 рассматривать алгебру 
  
    
      
        
          
            Z
          
          
            p
          
        
        [
        G
        ]
      
    
    {\displaystyle \mathbb {Z} _{p}[G]}
  
 для простого числа 
  
    
      
        p
        >
        k
      
    
    {\displaystyle p>k}
  
. В таком случае, по лемме Шварца — Зиппеля, вероятность опровержения неверного тождества за одну итерацию может быть улучшена с 
  
    
      
        
          
            1
            
              2
              
                k
              
            
          
        
      
    
    {\textstyle {\frac {1}{2^{k}}}}
  
 до 
  
    
      
        1
        −
        
          
            k
            p
          
        
      
    
    {\textstyle 1-{\frac {k}{p}}}
  
, что при 
  
    
      
        p
        ∼
        (
        1
        +
        ε
        )
        k
      
    
    {\displaystyle p\sim (1+\varepsilon )k}
  
 соответствует константной вероятности 
  
    
      
        
          
            ε
            
              1
              +
              ε
            
          
        
      
    
    {\textstyle {\frac {\varepsilon }{1+\varepsilon }}}
  
 и позволяет улучшить время работы до 
  
    
      
        O
        (
        l
        M
        log
        ⁡
        
          δ
          
            −
            1
          
        
        )
      
    
    {\displaystyle O(lM\log \delta ^{-1})}
  
.
 Алгоритм может быть модифицирован для нахождения конкретного набора переменных, на которых тождество не выполняется. Для примера, можно рассмотреть поиск неассоциативной тройки 
  
    
      
        (
        a
        ,
        b
        ,
        c
        )
      
    
    {\textstyle (a,b,c)}
  
 за время 
  
    
      
        O
        
          (
          
            
              n
              
                2
              
            
            log
            ⁡
            n
            log
            ⁡
            
              δ
              
                −
                1
              
            
          
          )
        
      
    
    {\textstyle O\left(n^{2}\log n\log \delta ^{-1}\right)}
  
. Пусть для некоторых 
  
    
      
        A
        ,
        B
        ,
        C
        ∈
        
          
            Z
          
          
            2
          
        
        [
        G
        ]
      
    
    {\displaystyle A,B,C\in \mathbb {Z} _{2}[G]}
  
 известно, что 
  
    
      
        A
        ⋅
        (
        B
        ⋅
        C
        )
        ≠
        (
        A
        ⋅
        B
        )
        ⋅
        C
      
    
    {\displaystyle A\cdot (B\cdot C)\neq (A\cdot B)\cdot C}
  
. Данным элементам можно сопоставить тройку 
  
    
      
        
          A
          ′
        
        ,
        
          B
          ′
        
        ,
        
          C
          ′
        
      
    
    {\displaystyle A',B',C'}
  
, такую что если 
  
    
      
        
          a
          
            i
          
        
        =
        0
      
    
    {\displaystyle a_{i}=0}
  
, то 
  
    
      
        
          a
          
            i
          
          ′
        
      
    
    {\displaystyle a_{i}'}
  
 также равно 
  
    
      
        0
      
    
    {\displaystyle 0}
  
, а если 
  
    
      
        
          a
          
            i
          
        
        =
        1
      
    
    {\displaystyle a_{i}=1}
  
, то 
  
    
      
        
          a
          
            i
          
          ′
        
      
    
    {\displaystyle a_{i}'}
  
 выбирается случайным образом между 
  
    
      
        0
      
    
    {\displaystyle 0}
  
 и 
  
    
      
        1
      
    
    {\displaystyle 1}
  
 (аналогично для 
  
    
      
        
          b
          
            i
          
          ′
        
      
    
    {\displaystyle b_{i}'}
  
 и 
  
    
      
        
          c
          
            i
          
          ′
        
      
    
    {\displaystyle c_{i}'}
  
). Для вероятности того, что 
  
    
      
        
          A
          ′
        
        ⋅
        (
        
          B
          ′
        
        ⋅
        
          C
          ′
        
        )
        ≠
        (
        
          A
          ′
        
        ⋅
        
          B
          ′
        
        )
        ⋅
        
          C
          ′
        
      
    
    {\displaystyle A'\cdot (B'\cdot C')\neq (A'\cdot B')\cdot C'}
  
, будет всё ещё верна оценка снизу 
  
    
      
        
          
            1
            8
          
        
      
    
    {\textstyle {\frac {1}{8}}}
  
, потому процедуру можно повторять до тех пор, пока каждый из элементов 
  
    
      
        
          A
          ′
        
        ,
        
          B
          ′
        
        ,
        
          C
          ′
        
      
    
    {\displaystyle A',B',C'}
  
 не будет иметь единицу лишь в одной из позиций, что будет соответствовать искомой неассоциативной тройке в 
  
    
      
        G
      
    
    {\displaystyle G}
  
.