如何判断两个序列是否因排列不同?
how to tell if two sequences differ by a permutation?
给定任意两个 n 个实数序列,比如 (a1,a2,...,an) 和 (b1,b2,...,bn),如何判断一个序列(也可以是视为向量)是另一个的排列?
我计划开发一种算法并 运行 在 Matlab 上使用它来完成这项工作。我只能想到一个算法,花费n!次:尝试 n 中的所有排列。
有没有更快的算法?
只需对两个序列进行排序并比较排序结果。
在某些情况下,您可能会发现从两个序列中创建 sets/map/dictionary(如果可能有多个元素,则使用计数器)很有用,并检查另一个集合中的每个元素是否存在。
首先,为什么n! ?如果对于每个 ai,你在 bi 中搜索一个匹配项,你将得到 O(n^2)。
无论如何,使用复杂度为 O(nlogn) 的排序更有效。
A=[3,1,2,7];
B=[2,3,1,7];
isPermutated=isequal(sort(A),sort(B))
给定任意两个 n 个实数序列,比如 (a1,a2,...,an) 和 (b1,b2,...,bn),如何判断一个序列(也可以是视为向量)是另一个的排列?
我计划开发一种算法并 运行 在 Matlab 上使用它来完成这项工作。我只能想到一个算法,花费n!次:尝试 n 中的所有排列。
有没有更快的算法?
只需对两个序列进行排序并比较排序结果。
在某些情况下,您可能会发现从两个序列中创建 sets/map/dictionary(如果可能有多个元素,则使用计数器)很有用,并检查另一个集合中的每个元素是否存在。
首先,为什么n! ?如果对于每个 ai,你在 bi 中搜索一个匹配项,你将得到 O(n^2)。 无论如何,使用复杂度为 O(nlogn) 的排序更有效。
A=[3,1,2,7];
B=[2,3,1,7];
isPermutated=isequal(sort(A),sort(B))