给出n个实数的任意两个序列,例如(a1,a2,...,an)和(b1,b2,...,bn),如何判断一个序列(也可以看作是向量)是另一个的排列?
我计划开发一种算法并在Matlab上运行该算法。我只能想到一个成本为n的算法!次:只需尝试n中的所有排列。
有更快的算法吗?
答案 0 :(得分:1)
只需对两个序列进行排序并比较排序的结果。
在某些情况下,您可能会从两个序列中找到有用的创建集/地图/词典(如果可能有多个元素,则带有计数器),并检查另一个集合中每个元素的存在。
答案 1 :(得分:1)
首先,为什么要n! ?如果对于每个ai,您在bi中搜索匹配项,您将获得O(n ^ 2)。 无论如何,使用具有O(nlogn)复杂度的排序效率更高。
A=[3,1,2,7];
B=[2,3,1,7];
isPermutated=isequal(sort(A),sort(B))