Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 大O表示法-包括数据结构成本?_Algorithm_Big O - Fatal编程技术网

Algorithm 大O表示法-包括数据结构成本?

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个元素组成的向量并删除重复项。所以,我们可能会用一套,对吗?(让我们使用一个C++集,那是一棵树)

O(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];
}