假设N
是我想要存储在矩阵中的元素数量。我不知道这个矩阵有多大。我想轻松找到矩阵所需的最小大小,以使其包含N
数字。
作为一项要求,我希望矩阵尽可能紧凑,以便:
1 2 3
4 5 6
7
更喜欢:
1 2 3 4 5 6
7
有什么建议么?
谢谢你。
您应该指定您的优化标准,即您对“方形”与“空虚”的权重。
作为此类标准的示例,以下代码在行数和列数大于 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=2
或m=38
, n=3
(也留下 1 个空单元格),因为它更像方形。
从您的示例中,我认为“最小尺寸”可能意味着最小化max(size)
.
在这种情况下,解决方案非常简单,假设您有L
元素:
在一个维度中,您有:
m = ceil(sqrt(L))
在另一个维度,你有:
n = ceil(L/m)
现在,大小为 mxn 或 nxm 的矩阵将是具有(给定该大小)最少数量的空元素的最小大小矩阵。