String 在matlab中以所有可能的组合和顺序组合每个字符串组中的一个

String 在matlab中以所有可能的组合和顺序组合每个字符串组中的一个,string,matlab,combinations,permutation,String,Matlab,Combinations,Permutation,所以我忘记了一个字符串,知道其中有三个子字符串,我知道每个字符串都有一些可能性。所以我需要做的就是检查所有可能的组合和顺序,直到找到我忘记的那个。但是,由于人类在他们的身体里只能持有四种物品(这对我来说绝对是一个上限),我无法记录我检查过的物品 假设我有n组m个字符串,如何得到所有长度为n个子字符串的字符串,这些子字符串由每个集合中的一个字符串按任意顺序组成 我看到了一个如何在嵌套循环中执行此操作的示例,但是我必须指定顺序。该示例适用于具有不同m`s的n=3。不确定如何使其更通用: first

所以我忘记了一个字符串,知道其中有三个子字符串,我知道每个字符串都有一些可能性。所以我需要做的就是检查所有可能的组合和顺序,直到找到我忘记的那个。但是,由于人类在他们的身体里只能持有四种物品(这对我来说绝对是一个上限),我无法记录我检查过的物品

假设我有n组m个字符串,如何得到所有长度为n个子字符串的字符串,这些子字符串由每个集合中的一个字符串按任意顺序组成

我看到了一个如何在嵌套循环中执行此操作的示例,但是我必须指定顺序。该示例适用于具有不同m`s的n=3。不确定如何使其更通用:

first = {'Hoi','Hi','Hallo'}; 
second = {'Jij','You','Du'};
third = {'Daar','There','Da','LengthIsDifferent'}; 

for iF = 1:length(first) 
    for iS = 1:length(second)
        for iT = 1:length(third)
            [first{iF}, second{iS}, third{iT}] 
        end
    end 
end

关于问题:它没有解决这个问题,因为它假定要选择的集合的顺序是已知的。

这将使用
ndgrid
生成索引的笛卡尔乘积。 然后使用一些
cellfun
-magic获得所有字符串。之后,它只是在所有排列中循环并附加这些排列

first = {'Hoi','Hi','Hallo'}; 
second = {'Jij','You','Du'};
third = {'Daar','There','Da','LengthIsDifferent'}; 
Vs = {first, second, third};
%% Create cartesian product
Indices = cellfun(@(X) 1:numel(X), Vs, 'uni', 0);
[cartesianProductInd{1:numel(Vs)}] = ndgrid(Indices{:});
AllStringCombinations = cellfun(@(A,I) A(I(:)), Vs, cartesianProductInd,'uni',0);
AllStringCombinations = cat(1, AllStringCombinations{:}).';%.'
%% Permute what we got
AllStringCombinationsPermuted = [];
permutations = perms(1:numel(Vs));
for i = 1:size(permutations,1)
    AllStringCombinationsPermuted = [AllStringCombinationsPermuted; ...
                                     AllStringCombinations(:,permutations(i,:));];
end

您可以使用
perms
获取原始循环返回的每个向量的所有可能排列,这将为您提供所有必需的向量。非常感谢。我没有确定我想做的第二个置换操作。此外,您的cellfun嵌套集方法使其非常通用。