在MatLab中仅显示两组排列之间的交叉点

时间:2013-08-09 01:54:01

标签: matlab probability set intersect

提供两个字符串'goosegun''goslingnun',我将找到每个字符串的选择3的每个排列,然后仅显示 两者之间的交叉点。目前我在不使用intersect(comboPerm1,comboPerm2,'rows')的情况下这样做,但我想知道如何使用它。我想我的主要问题是弄清楚如何显示文字。

对于我在代码中使用的变量,这里是他们如何找到的。

r = 3;
numPerms = factorial(r);

elements1 = 'goosegun';
n1 = numel(elements1);
numCombos1 = factorial(n1) / (factorial(n1-r)*factorial(r));
letterCombos1 = nchoosek(elements1,r);

elements2 = 'goslingnun';
n2 = numel(elements2);
numCombos2 = factorial(n2) / (factorial(n2-r)*factorial(r));
letterCombos2 = nchoosek(elements2,r);

counter = -1;

这是我的代码(我认为)。

% Goes through each combination
for i = 1 : numCombos1
    comboPerm1 = perms(letterCombos1(i,:));

    % Goes through each permutation of the combination
    for j = 1 : numPerms
        for k = 1 : numCombos2
            comboPerm2 = perms(letterCombos2(k,:));

            for p = 1 : numPerms
                if (comboPerm1(j,:) == comboPerm2(p,:))
                    counter = counter + 1;

                if (mod(counter,numPerms) == 0)
                    fprintf('\n\t');
                end

                fprintf('%s ',comboPerm2(p,:));
                end
            end 
        end
    end
end

这是我尝试使用相交的代码。

for i = 1 : numCombos1
    comboPerm1 = perms(letterCombos1(i,:));
    for j = 1 : numPerms
        for k = 1 : numCombos2
                comboPerm2 = perms(letterCombos2(k,:));            
            for p = 1 : numPerms
                a = intersect(comboPerm1,comboPerm2,'rows');

                if (exist(a, 'var') == 0)
                    fprintf('%s ',a);
                end        
            end
        end
    end
end

希望我能很好地解释自己,因为这是我在这个网站上的第一个问题。谢谢你的帮助。

0 个答案:

没有答案