***************************************************************************** * www.FindStat.org - The Combinatorial Statistic Finder * * * * Copyright (C) 2019 The FindStatCrew * * * * This information is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * ***************************************************************************** ----------------------------------------------------------------------------- Statistic identifier: St000781 ----------------------------------------------------------------------------- Collection: Integer partitions ----------------------------------------------------------------------------- Description: The number of proper colouring schemes of a Ferrers diagram. A colouring of a Ferrers diagram is proper if no two cells in a row or in a column have the same colour. The minimal number of colours needed is the maximum of the length and the first part of the partition, because we can restrict a latin square to the shape. We can associate to each colouring the integer partition recording how often each colour is used, see [1]. This statistic is the number of distinct such integer partitions that occur. ----------------------------------------------------------------------------- References: [1] Chow, T. Coloring a Ferrers diagram [[MathOverflow:203962]] ----------------------------------------------------------------------------- Code: def Ferrers_graph(mu): """Return the graph with vertices being the cells of the Ferrers diagram, two vertices are connected if the cells are in the same row or column. """ V = mu.cells() G = Graph([V, lambda a,b: a[0] == b[0] or a[1] == b[1]], loops=False, multiedges=False) return G def all_colouring_partitions(mu): from sage.graphs.graph_coloring import all_graph_colorings mu = Partition(mu) res = dict() for c in all_graph_colorings(Ferrers_graph(mu), max(mu[0], len(mu))): la = Partition(sorted((len(v) for v in c.values()), reverse=True)) res[la] = res.get(la, 0) + 1 return res def statistic(mu): return len(all_colouring_partitions(mu)) ----------------------------------------------------------------------------- Statistic values: [1] => 1 [2] => 1 [1,1] => 1 [3] => 1 [2,1] => 1 [1,1,1] => 1 [4] => 1 [3,1] => 1 [2,2] => 1 [2,1,1] => 1 [1,1,1,1] => 1 [5] => 1 [4,1] => 1 [3,2] => 1 [3,1,1] => 1 [2,2,1] => 1 [2,1,1,1] => 1 [1,1,1,1,1] => 1 [6] => 1 [5,1] => 1 [4,2] => 1 [4,1,1] => 1 [3,3] => 1 [3,2,1] => 2 [3,1,1,1] => 1 [2,2,2] => 1 [2,2,1,1] => 1 [2,1,1,1,1] => 1 [1,1,1,1,1,1] => 1 [7] => 1 [6,1] => 1 [5,2] => 1 [5,1,1] => 1 [4,3] => 1 [4,2,1] => 2 [4,1,1,1] => 1 [3,3,1] => 1 [3,2,2] => 1 [3,2,1,1] => 2 [3,1,1,1,1] => 1 [2,2,2,1] => 1 [2,2,1,1,1] => 1 [2,1,1,1,1,1] => 1 [1,1,1,1,1,1,1] => 1 [8] => 1 [7,1] => 1 [6,2] => 1 [6,1,1] => 1 [5,3] => 1 [5,2,1] => 2 [5,1,1,1] => 1 [4,4] => 1 [4,3,1] => 2 [4,2,2] => 3 [4,2,1,1] => 2 [4,1,1,1,1] => 1 [3,3,2] => 1 [3,3,1,1] => 3 [3,2,2,1] => 2 [3,2,1,1,1] => 2 [3,1,1,1,1,1] => 1 [2,2,2,2] => 1 [2,2,2,1,1] => 1 [2,2,1,1,1,1] => 1 [2,1,1,1,1,1,1] => 1 [1,1,1,1,1,1,1,1] => 1 [9] => 1 [8,1] => 1 [7,2] => 1 [7,1,1] => 1 [6,3] => 1 [6,2,1] => 2 [6,1,1,1] => 1 [5,4] => 1 [5,3,1] => 2 [5,2,2] => 3 [5,2,1,1] => 2 [5,1,1,1,1] => 1 [4,4,1] => 1 [4,3,2] => 2 [4,3,1,1] => 2 [4,2,2,1] => 2 [4,2,1,1,1] => 2 [4,1,1,1,1,1] => 1 [3,3,3] => 1 [3,3,2,1] => 2 [3,3,1,1,1] => 3 [3,2,2,2] => 1 [3,2,2,1,1] => 2 [3,2,1,1,1,1] => 2 [3,1,1,1,1,1,1] => 1 [2,2,2,2,1] => 1 [2,2,2,1,1,1] => 1 [2,2,1,1,1,1,1] => 1 [2,1,1,1,1,1,1,1] => 1 [1,1,1,1,1,1,1,1,1] => 1 [10] => 1 [9,1] => 1 [8,2] => 1 [8,1,1] => 1 [7,3] => 1 [7,2,1] => 2 [7,1,1,1] => 1 [6,4] => 1 [6,3,1] => 2 [6,2,2] => 3 [6,2,1,1] => 2 [6,1,1,1,1] => 1 [5,5] => 1 [5,4,1] => 2 [5,3,2] => 3 [5,3,1,1] => 3 [5,2,2,1] => 3 [5,2,1,1,1] => 2 [5,1,1,1,1,1] => 1 [4,4,2] => 1 [4,4,1,1] => 1 [4,3,3] => 2 [4,3,2,1] => 4 [4,3,1,1,1] => 3 [4,2,2,2] => 1 [4,2,2,1,1] => 3 [4,2,1,1,1,1] => 2 [4,1,1,1,1,1,1] => 1 [3,3,3,1] => 2 [3,3,2,2] => 1 [3,3,2,1,1] => 3 [3,3,1,1,1,1] => 3 [3,2,2,2,1] => 2 [3,2,2,1,1,1] => 2 [3,2,1,1,1,1,1] => 2 [3,1,1,1,1,1,1,1] => 1 [2,2,2,2,2] => 1 [2,2,2,2,1,1] => 1 [2,2,2,1,1,1,1] => 1 [2,2,1,1,1,1,1,1] => 1 [2,1,1,1,1,1,1,1,1] => 1 [1,1,1,1,1,1,1,1,1,1] => 1 [5,4,2] => 2 [5,4,1,1] => 2 [5,3,3] => 3 [5,3,2,1] => 5 [5,3,1,1,1] => 2 [5,2,2,2] => 3 [5,2,2,1,1] => 2 [4,4,3] => 1 [4,4,2,1] => 2 [4,4,1,1,1] => 3 [4,3,3,1] => 3 [4,3,2,2] => 2 [4,3,2,1,1] => 5 [4,2,2,2,1] => 2 [3,3,3,2] => 1 [3,3,3,1,1] => 3 [3,3,2,2,1] => 2 [6,4,2] => 3 [5,4,3] => 2 [5,4,2,1] => 4 [5,4,1,1,1] => 2 [5,3,3,1] => 5 [5,3,2,2] => 5 [5,3,2,1,1] => 4 [5,2,2,2,1] => 2 [4,4,3,1] => 2 [4,4,2,2] => 3 [4,4,2,1,1] => 5 [4,3,3,2] => 2 [4,3,3,1,1] => 5 [4,3,2,2,1] => 4 [3,3,3,2,1] => 2 [3,3,2,2,1,1] => 3 [5,4,3,1] => 4 [5,4,2,2] => 5 [5,4,2,1,1] => 4 [5,3,3,2] => 6 [5,3,3,1,1] => 5 [5,3,2,2,1] => 4 [4,4,3,2] => 2 [4,4,3,1,1] => 6 [4,4,2,2,1] => 5 [4,3,3,2,1] => 4 [5,4,3,2] => 5 [5,4,3,1,1] => 5 [5,4,2,2,1] => 5 [5,3,3,2,1] => 5 [4,4,3,2,1] => 5 [5,4,3,2,1] => 9 ----------------------------------------------------------------------------- Created: Apr 18, 2017 at 13:23 by Martin Rubey ----------------------------------------------------------------------------- Last Updated: Apr 23, 2018 at 07:20 by Martin Rubey