查找矩阵维度以包含数字

时间:2013-10-23 09:57:17

标签: algorithm matlab matrix dimension

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

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

1 2 3
4 5 6
7

优先于:

1 2 3 4 5 6
7

有什么建议吗?

谢谢。

2 个答案:

答案 0 :(得分: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找到 last 最小化值(如果有多个,则更像方形)

例如,N=113提供解m=6n=19,导致1空单元格(= 6 * 19-113)。此解决方案优先于m=57n=2m=38n=3(也会留下1个空单元格),因为它更像是方形。

答案 1 :(得分:0)

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

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

在一个方面,你有:

m = ceil(sqrt(L))

在另一个方面,你有:

n = ceil(L/m)

现在,大小为mxn或nxm的矩阵将是最小尺寸的矩阵,其中(给定大小)空元素的数量最少。