如何解决显示所有可能的向量组合的问题
x ="abcdefghijklmnopqrstuvwxyz"
我会在其中将它自己相乘。我想要这样的解决方案:
"aa","ab","ac",..."za","zb",.."zz"
我可以为每个元素编制索引。
我还想要相同乘法的解决方案,我将得到三个和四个相同 x 向量的结果,即解决方案将是:
"aaa","aab"..."zzz" and "aaaa","aaab",..."zzzz"
如何解决显示所有可能的向量组合的问题
x ="abcdefghijklmnopqrstuvwxyz"
我会在其中将它自己相乘。我想要这样的解决方案:
"aa","ab","ac",..."za","zb",.."zz"
我可以为每个元素编制索引。
我还想要相同乘法的解决方案,我将得到三个和四个相同 x 向量的结果,即解决方案将是:
"aaa","aab"..."zzz" and "aaaa","aaab",..."zzzz"
试试这个功能ndgrid()
。其结果取决于输出参数的数量。这是所有 3 组重复的答案
octave> [x y z] = ndgrid ("abcdef");
octave> allcombs = [x(:) y(:) z(:)];
我没有打印结果,因为它很长。使用函数ndgrid()
,perms()
和nchoosek()
可以很容易地解决这类问题。
对于 n 长度,使用nthargout()
.
octave> cart = nthargout ([1:n], @ndgrid, "abcdef");
octave> combs = cell2mat (cellfun (@(c) c(:), cart, "UniformOutput", false));
如果将字母映射为整数(请参阅 toascii),则可以通过添加以 25 为底的数字来生成所有组合(toascii('z') - toascii('a'))。例如,0 -> 'a'、25 -> 'z'、26 -> 'ba' 等等。
这样您就可以按顺序生成所有组合