Given subsets R' ⊆ R and C' ⊆ C, we define a bicluster B(R', C') to be the sub-matrix of D spanned by the rows in R' and the columns in C'. This simple definition is sufficient for this paper. An algorithm that computes biclusters in gene expression data will use a more complex definition relevant to the patterns to be detected. A bicluster B(R', C') is contiguous in a layout L(ℛ, C) if and only if the elements of R' (respectively, C') appear consecutively at least once in ℛ (respectively, L). We say that the layout L(ℛ, C) is valid with respect to a set of biclusters S if every bicluster B ∈ S is contiguous in L(ℛ, C). For example, the layout in Figure 1(b) is valid with respect to the bicluster ({7/04/2004, 7/03/2004, 7/02/2004}, {> 60F, Daylight > l0 h, Cloudy, Rainy}) since the bicluster spans rows four to six and columns two to five in the layout. We now formally define the bicluster layout problem: Given a matrix D and a set S of biclusters in D, find a layout L of D such that L is valid with respect to S and L has the smallest size among all valid layouts of D.