【发布时间】:2017-01-18 14:13:04
【问题描述】:
我有一组 和 元素,可能的相邻组合是:
所以可能的组合总数为 c=11,可以使用以下公式计算:
我可以使用 对其进行建模,如下所示,其元素可以表示为 a(n,c) 是:
我曾尝试在 MATLAB 中实现这一点,但由于我对上述数学进行了硬编码,因此我的代码对于 n > 4:
n=4;
c=((n^2)/2)+(n/2)+1;
A=zeros(n,c);
for i=1:n
A(i,i+1)=1;
end
for i=1:n-1
A(i,n+i+1)=1;
A(i+1,n+i+1)=1;
end
for i=1:n-2
A(i,n+i+4)=1;
A(i+1,n+i+4)=1;
A(i+2,n+i+4)=1;
end
for i=1:n-3
A(i,n+i+6)=1;
A(i+1,n+i+6)=1;
A(i+2,n+i+6)=1;
A(i+3,n+i+6)=1;
end
按照我上面的数学公式,在 MATLAB 中有 n 个元素集合 N 的元素,是否有相对较低复杂度的方法来转换这个问题?
【问题讨论】:
-
您的实际问题是什么?看起来您已经有了解决方案,不是吗?
-
你是在问这将如何扩展到其他任意集合?
-
是的,我已经有了解决方案,但我是 MATLAB 新手,我想在 MATLAB 中将它作为算法编程。我该如何编程?
-
您首先需要弄清楚如何将其扩展到其他任意集合(无需 Matlab)。我想我知道这将如何概括,但并不完全清楚(尤其是可能的相邻组合的排序)。
-
在上面的例子和下面的 MATLAB 代码中,我在 n=4 的情况下完成了它。但我想对任何 n 个元素都这样做。我的代码不适用于 n 个元素。如果您建议我如何对任何数字 n 执行此操作,您将不胜感激。MATLAB 代码:clc n=4; c=((n^2)/2)+(n/2)+1; A=零(n,c);对于 i=1:n A(i,i+1)=1;结束 i=1:n-1 A(i,n+i+1)=1; A(i+1,n+i+1)=1;结束 i=1:n-2 A(i,n+i+4)=1; A(i+1,n+i+4)=1; A(i+2,n+i+4)=1;结束 i=1:n-3 A(i,n+i+6)=1; A(i+1,n+i+6)=1; A(i+2,n+i+6)=1; A(i+3,n+i+6)=1;结束
标签: algorithm matlab math combinatorics