假设N
是我想要存储在矩阵中的元素数。我不知道这个矩阵有多大。我想轻松找到矩阵的最小所需大小,以使其包含N
个数字。
作为一项要求,我希望矩阵尽可能紧凑,以便:
1 2 3
4 5 6
7
优先于:
1 2 3 4 5 6
7
有什么建议吗?
谢谢。
答案 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=6
,n=19
,导致1
空单元格(= 6 * 19-113)。此解决方案优先于m=57
,n=2
或m=38
,n=3
(也会留下1个空单元格),因为它更像是方形。
答案 1 :(得分:0)
从您的示例中,我认为“最小尺寸”可能意味着最小化max(size)
的解决方案。
在这种情况下,假设您有L
元素,解决方案非常简单:
在一个方面,你有:
m = ceil(sqrt(L))
在另一个方面,你有:
n = ceil(L/m)
现在,大小为mxn或nxm的矩阵将是最小尺寸的矩阵,其中(给定大小)空元素的数量最少。