'std::p artition()' 的时间复杂度
Time complexity of `std::partition()`
根据cpp偏好:
复杂性
正好std::distance(first,last)
谓词的应用,最多std::distance(first,last)
交换。如果 Forward它最多满足双向迭代器的要求std::distance(first,last)/2
交换已完成。
我查看了底部的示例实现:
template<class ForwardIt, class UnaryPredicate>
ForwardIt partition(ForwardIt first, ForwardIt last, UnaryPredicate p)
{
if (first == last) return first;
ForwardIt part(first++);
if (first == last) return p(*part) ? first : part;
while (first != last) {
if (p(*part))
++part;
else if (p(*first)) {
iter_swap(part, first);
++part;
}
++first;
}
return part;
}
我认为它最多执行std::distance(first,last)/2
交换而不是std::distance(first,last)
.不?
这似乎是非双向迭代器的实现,仅向前推进。仅通过 n 个项目的序列向前推进,至少需要 n-1 次交换才能将单个非 p 项目从头到尾移动。使用双向迭代器,可以从两端向内工作。
相关文章:
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- while循环中while循环的时间复杂度是多少
- 我可以创建一个包含两个变量的 for 循环,但时间复杂度仍然为 O(n) 吗?
- 函数的时间复杂度是多少?
- 如何检查两个 std::向量在小于 O(n) 的时间复杂度内是否相等
- 时间复杂度 当具有复合数据类型(如元组或对)时?
- 如何计算此排序函数的时间复杂度?
- 计算两个代码块的时间复杂度
- C++ 中具有 O(1) 搜索时间复杂度的数据结构
- 具有嵌套 if-else 的循环的时间复杂度
- C++ - 最坏情况和平均情况插入时间复杂度在 std::unordered_map <int,int>?
- std::regex 是否保证了最坏情况下的时间复杂度?
- std::map的时间复杂度是多少
- 一个清晰的函数的时间复杂度是多少,根据大 O,是 std::map
- 在这种情况下比较 std::vector 或 std::set 以获得时间复杂度 - 更有效率
- 'std::p artition()' 的时间复杂度
- std::vector::erase的时间复杂度
- std::deque::erase函数的时间复杂度是多少
- 当一个std::vector对象在堆栈中而另一个在堆中时,vector的交换函数的时间复杂度为O(1)或O(n)
- 时间复杂度和插入std::list