Algorithm 大O表示法-包括数据结构成本?
就我的问题而言,我将包括一个示例问题 假设我们需要遍历一个由N个元素组成的向量并删除重复项。所以,我们可能会用一套,对吗?(让我们使用一个C++集,那是一棵树) O(N)遍历每个元素的成本-然后插入到集合数据结构中Algorithm 大O表示法-包括数据结构成本?,algorithm,big-o,Algorithm,Big O,就我的问题而言,我将包括一个示例问题 假设我们需要遍历一个由N个元素组成的向量并删除重复项。所以,我们可能会用一套,对吗?(让我们使用一个C++集,那是一棵树) O(N)遍历每个元素的成本-然后插入到集合数据结构中 我的问题是,我们插入N次,这个算法是O(N logn)还是简单的O(N)?我和一位教授讨论过这件事,我不确定。Leetcode/SO/online社区似乎忽略了数据结构成本,但从学术角度来看,N插入到红色/黑色树中,并记录N最坏情况-这是记录N,N乘以否 为了澄清-是的,使用无序集更
我的问题是,我们插入N次,这个算法是O(N logn)还是简单的O(N)?我和一位教授讨论过这件事,我不确定。Leetcode/SO/online社区似乎忽略了数据结构成本,但从学术角度来看,N插入到红色/黑色树中,并记录N最坏情况-这是记录N,N乘以否 为了澄清-是的,使用无序集更有意义,但这并不能使我的问题有效。是的,它是
O(n*log(n))
。如果你有这样的方法
public void foo(int n) {
for (int i = 0; i < n; i++) {
// Call a method that is in O(log n)
someLogNMethod();
}
}
显然,您不会将此中值方法称为θ(1)
,尽管它在恒定时间中运行(不包括排序方法)
但是,问题取决于排序方法。在O(1)
中,找一般数组的中值问题是无法解决的。您需要在分析中包含排序
。因此,该方法实际上在Theta(n logn+1)
中运行,即Theta(n logn)
请注意,这个问题实际上可以在θ(n)
中解决(请参阅)。复杂性表示一些参考操作的计数
例如,您可以很好地计算某些黑盒结构中的插入,并枚举O(N)个插入
但是,如果您关注比较,并且您知道插入平均要花费logn个比较,那么比较的总数是O(N logn)
现在,如果您正在比较对数N个字符的字符串,您将计算O(N Log²N)个字符的比较…Hem,median,not mean。获取排序数组的中值绝对是Θ(1)。[顺便说一下,未排序数组的中值可以在Θ(N)运算中找到。]@YvesDaoust Uff,median
当然。谢谢,更正。@Yvesdao当然是的,但我没有声明数组已排序。实现需要先对其进行排序。我指的是计算数组的中值的一般问题。我指的是你的“除了调用排序”。[如上所述,排序不是强制性的。]@YvesDaoust我不太确定我是否理解你的意思。我又编辑了一遍,也许这消除了混淆。“Leetcode/SO/在线社区似乎忽视了数据结构成本”[需要引用]你确定,无论发生什么情况,他们都不是指哈希集吗?SET并不意味着二进制搜索树,因为C++中就是这样的
public int median(int[] values) {
int[] sortedValues = sort(values);
// Let's ignore special cases (even, empty, ...) for simplicity
int indexOfMedian = values.length / 2;
return sortedValues[indexOfMedian];
}