集合与多集合
这取决于您是否要将多次出现的相同数字视为单个项目(多集合方法)或不(集合方法):
[1, 2, 3] 和 [1, 2, 3, 3] 是否相同(集合方法)或不同(多集合方法)?
设置方法
根据 reverse_engineer 的建议:
f_xor = @(x, y) isempty(setxor(x, y))
H. Muster 方法的集合变体:
f_sortu = @(x, y) isequal(sort(unique(x(:))), sort(unique(y(:))))
多组方法
按照 H.Muster 的建议:
f_sort = @(x, y) isequal(sort(x(:)), sort(y(:)))
时间
这里是各个变体的时间。
>> A = rand(1, 1000);
>> B = A; B(end) = B(end) - 1; % Make vectors almost equal
>> N = 10000;
>> tic; for i = 1 : N; f_sort(A, B); end; toc/N
ans =
1.6892e-04
>> tic; for i = 1 : N; f_sortu(A, B); end; toc/N
ans =
3.5647e-04
>> tic; for i = 1 : N; f_xor(A, B); end; toc/N
ans =
5.4098e-04
set 方法较慢,因为它们需要删除重复项。有趣的是,setxor 比使用 sort + unique 慢。