我不完全确定这个大O的复杂性
I'm not entirely sure the Big O complexity of this
这将在未排序的数组中找到第 n 个元素,就好像它是排序的一样,我希望它在 n log n 时间以下运行,但我不完全确定它的运行时间,它会是 O(n^2)?
int nthElement(std::vector<int> vec, int n)
{
n--;
int smallest = vec[0];
int index = 0;
for(int i = 0; i < vec.size(); i++)
{
if (vec[i] < smallest)
{
smallest = vec[i];
index = i;
}
}
vec.erase(vec.begin() + index);
if( n == 0)
{
std::cout << "Do I get here?" << std::endl;
return smallest;
}
return nthElement(vec, n);
}
问问自己与vec.size()
相比n
什么。假设n
在0
和vec.size()-1
之间是随机的,则以下情况成立:
- 在最好的情况下,n = 0
.
- 在最坏的情况下,n = vec.size()
.
- 在平均情况下,n ~ vec.size()
(~
表示比例)。
所以一般来说,时间复杂度确实是O(n^2) = O(vec.size()^2) = O(n*vec.size())
.
相关文章:
- 自制的上衣:看起来一样,但不完全相同
- 我不完全确定此代码的行为.有人可以向我解释一下吗?
- 系统包括在分布之间不完全一致
- 我不完全确定这个大O的复杂性
- 两个不完全相同的函数指针是否兼容
- 气泡排序不完全有效
- 作用域在两个类实现之间不完全独立
- C++单例 — 不完全C++ 11 标准
- 不完全理解这部分代码
- BOOST_STRONG_TYPEDEF几乎但不完全像它的基础
- 提升async_read_some不完全异步
- glDrawPixels输出一些像素,其RGB值不完全达到预期
- 交换两个阵列而不完全分配第三个 (C++)
- 添加和删除文件片段以不完全重写它的最有效方法是什么
- 不完全为整型的结构和枚举
- 为什么BOOST_FOREACH不完全等同于手动编码
- 变量的不完全类型-尽管我认为我已经正确地向前声明了
- 不完全确定如何使用多继承c#的接口
- 反不完全贝塔函数在C++中的快速实现
- 使用shared_ptr处理不完全类型的Pimpl习语