-3

假设N是我想要存储在矩阵中的元素数量。我不知道这个矩阵有多大。我想轻松找到矩阵所需的最小大小,以使其包含N数字。

作为一项要求,我希望矩阵尽可能紧凑,以便:

1 2 3
4 5 6
7

更喜欢:

1 2 3 4 5 6
7

有什么建议么?

谢谢你。

4

2 回答 2

4

您应该指定您的优化标准,即您对“方形”与“空虚”的权重。

作为此类标准的示例,以下代码在行数和列数大于 1 的情况下最小化空虚;如果有多个最小化尺寸,则选择更像方形的选项:

mm = ceil(sqrt(N)):-1:2; %//possible numbers of rows. Reverse order. Do not consider 1
nn = ceil(N./mm); %//corresponding numbers of columns
excess = mm.*nn-N; %//number of empty cells
[val ind] = min(excess);
m = mm(ind)
n = nn(ind)

请注意,mm在代码中以相反的顺序定义,因此如果有多个,min则会找到最后一个最小化值(更像正方形)。

例如,N=113给出解m=6, n=19,得到1空单元格 (=6*19-113)。此解决方案优于m=57,n=2m=38, n=3(也留下 1 个空单元格),因为它更像方形。

于 2013-10-23T10:02:16.680 回答
0

从您的示例中,我认为“最小尺寸”可能意味着最小化max(size).

在这种情况下,解决方案非常简单,假设您有L元素:

在一个维度中,您有:

m = ceil(sqrt(L))

在另一个维度,你有:

n = ceil(L/m)

现在,大小为 mxn 或 nxm 的矩阵将是具有(给定该大小)最少数量的空元素的最小大小矩阵。

于 2013-10-23T11:15:28.620 回答