Dato A e B
A={{'a','b'},{'c'},{'d','e'}}
B={{'a','b'},{'c','d'},{'e'}}
Possiamo definire una funzione isSubset
, come segue:
isSubset = @(superSet,subSet)isempty(setdiff(subSet, superSet));
e testarlo:
isSubset(B{1}, A{1}) %true
isSubset(B{2}, A{2}) %true
isSubset(B{3}, A{3}) %false
Ora possiamo usare isSubSet
e cellfun
per definire una funzione isSubSetOfAny
, che controlla per vedere se un particolare sottoinsieme è un sottoinsieme di qualsiasi di un insieme di insiemi, in questo modo:
isSubSetOfAny = @(superSetSet, subSet) any(cellfun(@(x)isSubset(x, subSet), superSetSet));
E provarlo:
isSubSetOfAny(B, A{1}) %True
isSubSetOfAny(B, A{2}) %True
isSubSetOfAny(B, A{3}) %True
Ora possiamo usare isSubSetOfAny
più cellfun
(di nuovo) per definire isEachMemberASubsetOfAny
, che esegue l'operazione descritta:
isEachMemberASubsetOfAny = @(superSetSet, subSetSet) all(cellfun(@(x)isSubSetOfAny(superSetSet, x), subSetSet));
e testarlo:
isEachMemberASubsetOfAny(B, A) %Returns false
A_1 = {{'a','b'},{'c'},{'e'}}; %Define a variant of `A`
isEachMemberASubsetOfAny(B, A_1) %Returns false
Breaking the loop più breve tempo possibile dovrebbe portare ad un miglioramento delle prestazioni piuttosto grande nel corso degli approcci basati 'cellfun' (compreso il mio). – Pursuit
funziona come per magia grazie! – Evan