В теории групп, алгоритм Тодда — Коксетера, найденный Дж. А. Тоддом и Г. Коксетером в 1936 году, является алгоритмом для решения проблемы перечисления смежных классов. Для конкретных задания группы 
  
    
      
        G
      
    
    {\displaystyle G}
  
 и подгруппы 
  
    
      
        H
      
    
    {\displaystyle H}
  
 в 
  
    
      
        G
      
    
    {\displaystyle G}
  
, алгоритм перечисляет смежные классы 
  
    
      
        G
      
    
    {\displaystyle G}
  
 по 
  
    
      
        H
      
    
    {\displaystyle H}
  
 и описывает представление перестановками 
  
    
      
        G
      
    
    {\displaystyle G}
  
 на пространстве смежных классов.
 Если порядок группы 
  
    
      
        G
      
    
    {\displaystyle G}
  
 является относительно небольшим, и подгруппа 
  
    
      
        H
      
    
    {\displaystyle H}
  
 является несложной (например, циклическая группа), то алгоритм может быть выполнен вручную и дает удобное описание группы 
  
    
      
        G
      
    
    {\displaystyle G}
  
. Используя свой алгоритм, Коксетер и Тодд показали, что конкретные системы соотношений между порождающими элементами некоторых известных групп полны, то есть составляют систему определяющих соотношений.
 Алгоритм Тодда-Коксетера может быть применен к бесконечным группам и завершается после конечного числа шагов при условии, что индекс 
  
    
      
        H
      
    
    {\displaystyle H}
  
 в 
  
    
      
        G
      
    
    {\displaystyle G}
  
 конечен. С другой стороны, в общем случае для пары, состоящей из задания группы и подгруппы, количество его шагов не ограничено никакой вычислимой функцией индекса подгруппы и размера данных.
 Выполнение алгоритма проходит следующим образом. Предположим это 
  
    
      
        G
        =
        ⟨
        X
        ∣
        R
        ⟩
      
    
    {\displaystyle G=\langle X\mid R\rangle }
  
, где 
  
    
      
        X
      
    
    {\displaystyle X}
  
 — множество образующих, 
  
    
      
        R
      
    
    {\displaystyle R}
  
 — множество соотношений. Множество образующих 
  
    
      
        X
      
    
    {\displaystyle X}
  
 и их инверсий обозначим 
  
    
      
        
          X
          
            ′
          
        
      
    
    {\displaystyle X^{\prime }}
  
. Пусть 
  
    
      
        H
        =
        ⟨
        
          h
          
            1
          
        
        ,
        
          h
          
            2
          
        
        ,
        
          h
          
            3
          
        
        ,
        .
        .
        .
        ,
        
          h
          
            s
          
        
        ⟩
      
    
    {\displaystyle H=\langle h_{1},h_{2},h_{3},...,h_{s}\rangle }
  
 где 
  
    
      
        
          h
          
            i
          
        
      
    
    {\displaystyle h_{i}}
  
 — элементы 
  
    
      
        
          X
          
            ′
          
        
      
    
    {\displaystyle X^{\prime }}
  
. Есть три типа матриц, которые будут использоваться: смежный класс матриц, матрицы соотношения для каждого соотношения в 
  
    
      
        R
      
    
    {\displaystyle R}
  
, и матрицы подгруппы для каждого множества образующих 
  
    
      
        
          h
          
            i
          
        
      
    
    {\displaystyle h_{i}}
  
 от 
  
    
      
        H
      
    
    {\displaystyle H}
  
. Информация постепенно добавляется к этим матрицам, и как только они будут заполнены, все смежные классы будут перечислены, и алгоритм закончится.
Смежный класс матриц используется, чтобы хранить соотношения между известными смежными классами при умножении множеством образующих. Это имеет ряды, представляющие смежные классы 
  
    
      
        H
      
    
    {\displaystyle H}
  
 и колонки для каждого элемента 
  
    
      
        
          X
          
            ′
          
        
      
    
    {\displaystyle X^{\prime }}
  
. Пусть 
  
    
      
        
          C
          
            i
          
        
      
    
    {\displaystyle C_{i}}
  
 обозначает смежные классы 
  
    
      
        i
      
    
    {\displaystyle i}
  
-го ряда смежных классов матриц, и пусть 
  
    
      
        
          g
          
            i
          
        
        O
        
          X
          
            ′
          
        
      
    
    {\displaystyle g_{i}OX^{\prime }}
  
 обозначает множество образующих 
  
    
      
        j
      
    
    {\displaystyle j}
  
-й колонки. Ввод смежных классов матриц последователен, 
  
    
      
        i
      
    
    {\displaystyle i}
  
 и 
  
    
      
        j
      
    
    {\displaystyle j}
  
 определены так, чтобы было (если известно) 
  
    
      
        k
      
    
    {\displaystyle k}
  
, где 
  
    
      
        k
      
    
    {\displaystyle k}
  
 — такое, что 
  
    
      
        
          C
          
            k
          
        
        =
        
          C
          
            i
          
        
        
          g
          
            j
          
        
      
    
    {\displaystyle C_{k}=C_{i}g_{j}}
  
.
Соотношения матриц используются, чтобы обнаружить, когда некоторые из смежных классов, которые мы нашли, фактически эквивалентны. Выполняется: одно соотношение матриц для каждого соотношения в 
  
    
      
        R
      
    
    {\displaystyle R}
  
. Пусть 
  
    
      
        1
        =
        g
        n
        1
        ,
        g
        n
        2
        ,
        .
        .
        .
        ,
        g
        n
        t
      
    
    {\displaystyle 1=gn1,gn2,...,gnt}
  
 — соотношение в 
  
    
      
        R
      
    
    {\displaystyle R}
  
, где gni ОX' . матриц соотношения имеет ряды, представляющие смежных классов H, как в смежных классов матриц. Это имеет 
  
    
      
        t
      
    
    {\displaystyle t}
  
 колонки, и ввод в 
  
    
      
        i
      
    
    {\displaystyle i}
  
-м ряду и 
  
    
      
        j
      
    
    {\displaystyle j}
  
-й колонке определен, чтобы быть (если известно) 
  
    
      
        k
      
    
    {\displaystyle k}
  
, где Ck=Cig1g2…gj. В частности i-й вход — первоначально i, пока 
  
    
      
        g
        n
        1
        g
        n
        2...
        g
        n
        t
        =
        1
      
    
    {\displaystyle gn1gn2...gnt=1}
  
. Наконец, матрицы подгруппы подобны матрицам соотношения, за исключением того, что они держат след возможных соотношений множества образующих H. Для каждого множества образующих hn=gn1gn2…gnt из H, с gniOH', мы создаем матрицу подгруппы. Это имеет только один ряд, соответствуя смежным классам H непосредственно. Это имеет t колонки, и вход в j-й колонке определен (если известно), чтобы быть k, где 
  
    
      
        C
        k
        =
        H
        C
        i
        g
        1
        g
        2...
        g
        j
      
    
    {\displaystyle Ck=HCig1g2...gj}
  
 . Когда ряд соотношения или матриц подгруппы закончен, новая информация 
  
    
      
        C
        i
        =
        C
        j
        g
        ,
        g
        O
        
          H
          
            ′
          
        
      
    
    {\displaystyle Ci=Cjg,gOH^{\prime }}
  
 найдена. Это известно как вычитание. От вычитания, мы можем быть в состоянии заполнить в дополнительных записях соотношения и матриц подгруппы, приводя к возможному дополнительному вычитанию. Мы можем заполниться в записях смежных классах матриц, соответствующего уравнениям 
  
    
      
        C
        i
        =
        C
        j
        g
      
    
    {\displaystyle Ci=Cjg}
  
 и 
  
    
      
        C
        j
        =
        C
        i
        g
        −
        1
      
    
    {\displaystyle Cj=Cig-1}
  
. Однако, заполняясь в смежных классах матриц, возможно, что мы можем уже иметь ввод для уравнения, но ввод имеет различную ценность. В этом случае, мы обнаружили, что два из наших смежных классов — фактически то же самое, известные как совпадение. Предположим 
  
    
      
        C
        i
        =
        C
        j
      
    
    {\displaystyle Ci=Cj}
  
, с 
  
    
      
        i
        <
        j
      
    
    {\displaystyle i<j}
  
 . Мы заменяем все случаи j в матриц с i. Тогда, мы заполняем во всех возможных записях матриц, возможно приводя к большему количеству вычитания и совпадений. Если есть пустые записи в матрице после всего вычитания, и о совпадениях заботились, добавляем новый смежный класс к матрице и повторяем процесс. Мы удостоверяемся, что, добавляя смежный класс, если Hx — известный смежный класс, то Hxg будет добавлен в некоторый момент для всех 
  
    
      
        g
        ∈
        
          H
          
            ′
          
        
      
    
    {\displaystyle g\in H^{\prime }}
  
 . (Это необходимо, чтобы гарантировать, что алгоритм закончится обеспеченный 
  
    
      
        
          |
        
        G
        :
        H
        
          |
        
      
    
    {\displaystyle |G:H|}
  
 конечен.) Когда все матрицы заполнены, алгоритм заканчивается. Мы получили всю информацию о действии G на смежные классы H.