Young tableaux and Gelfand-Tsetlin patterns


young_tableaux gelfand_tsetlin_patterns

One can convert a (semi-standard) Young tableau \(T\) to a Gelfand-Tsetlin pattern \((\lambda^k_j)_{1 \le j \le k}\) in the following way:

\[ \lambda^k_j = \text{number of entries }\le k\text{ in the }j\text{th row of }T. \]

This map is invertible: given GT pattern \((\lambda^k_j)\), one can reconstruct the corresponding tableau by putting \(\lambda^k_j - \lambda^{k - 1}_j\) of \(k\)s and \(\lambda^j_j\) of \(j\)s in the \(j\)th row.

Example.

\[ \begin{array}{ccccc} 1&2&2&3&3\\2&3&4&\\4&&& \end{array} \]

corresponds to

\[ (\lambda^1_1, \lambda^2_1, \lambda^2_2, \lambda^3_1, \lambda^3_2, \lambda^3_3, \lambda^4_1, \lambda^4_2, \lambda^4_3, \lambda^4_4) = (1, 3, 1, 5, 2, 0, 5, 3, 1, 0) \]

\(\square\)

The shape of the Young tableau is thus the bottom row of the Gelfand Tsetlin pattern. In the above example it is \((5, 3, 1)\).

For example here are sample Python codes of the two conversions:

def Tableau2GT(T):
    if T == []:
        return []
    l = max([max(i) for i in T])
    Lambda = [[0] * (k + 1) for k in range(l)]
    for j, row in enumerate(T):
        for i in range(j, l):
            Lambda[i][j] = sum([1 if e <= i + 1 else 0 for e in row])
    return Lambda
    
def GT2Tableau(Lambda):
    T = []
    l = len(Lambda)
    for j in range(l):
        row = [j + 1] * Lambda[j][j]
        for k in range(j + 1, l):
            row += [k + 1] * (Lambda[k][j] - Lambda[k - 1][j])
        T += [row]
    T += [[]]
    return T[:T.index([])]