【发布时间】:2021-06-12 21:28:39
【问题描述】:
C++ 文档说is_permutation 的最坏情况时间复杂度是 O(N^2):
最多 O(N^2) 次应用谓词,或者如果序列已经相等,则恰好 N 次,其中 N=std::distance(first1, last1)。但是,如果 ForwardIt1 和 ForwardIt2 满足 LegacyRandomAccessIterator 和 std::distance(first1, last1) != std::distance(first2, last2) 的要求,则不会应用谓词。
但是,IMO 在最坏的情况下应该是 O(NlogN) - 我们不能只对O(NlogN) 中的两个序列进行排序然后比较它们吗?我错过了什么?
【问题讨论】:
-
使用 operator== 比较元素:后面的类型不必定义运算符
<
。 -
如果您进行了排序,那么您将修改数据,这可能很糟糕。也有可能是数据集无法排序。
-
@molbdnilo 我不认为元素的可复制性是必需的。也可以使用元素的索引。
标签: c++ algorithm permutation