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

Combination of one of every string group in all possible combinations and orders in matlab

所以我忘记了一个字符串并且知道那里有三个子字符串并且我知道每个字符串的几种可能性。所以我需要做的就是检查所有可能的组合和订单,直到找到我忘记的那个。但是由于人类只能在他们的 working memory 中容纳四件物品(对我来说绝对是一个上限),我无法密切关注我检查了哪些物品。

假设我有 nm 字符串,我如何获得所有长度为 [=22= 的字符串]n 个子字符串,每组中的一个字符串以任意顺序组成?

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

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

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

这会使用 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