Data structures 以下情况的复杂性是什么?

Data structures 以下情况的复杂性是什么?,data-structures,time-complexity,Data Structures,Time Complexity,假设我们有一个while循环,它根据真-假条件进行迭代,让我们假设一个队列是否为空,并且它内部有一个for循环,如: while(!queue.isEmpty()) { // some lines of code for(int i = 0; i < n; i++) { // some code } } 在这种情况下,复杂性取决于n和队列的大小。因此,您的复杂性将在*queue.size上 假设可以忽略其他隐含的代码行 为了确定一个有用的复杂度类,

假设我们有一个while循环,它根据真-假条件进行迭代,让我们假设一个队列是否为空,并且它内部有一个for循环,如:

while(!queue.isEmpty()) {
    // some lines of code
    for(int i = 0; i < n; i++) {
        // some code
    }
}

在这种情况下,复杂性取决于n和队列的大小。因此,您的复杂性将在*queue.size上

假设可以忽略其他隐含的代码行

为了确定一个有用的复杂度类,您需要包括所有可以改变您必须经历的迭代次数的参数

另外,由于您从不弹出队列,在最坏的情况下,您将有一个发散的函数,但我猜这意味着您在循环之前或之后弹出队列

***********编码后编辑****

所以你有一个n个值的数组。并希望构造一个包含n个节点的树

For each node you add: (meaning n times)
    You linearly search your array of values (worst case: you always need to search the entire array, also meaning n times)
所以你的复杂性在^2上


如果你不能做出上面的假设,你会得到另一种复杂性,因为“如果值不在队列中怎么办”或“如果我的队列比数组大得多怎么办”

你不是在对布尔值进行迭代。你问这个问题是因为你的函数正在发散,运行在一个无休止的循环中吗?不,我只是在分析。我已经找到了问题的解决方案,但我正在看它是否开启。你想做什么?您正在构建二叉搜索树吗?我正在从队列中弹出二叉树的节点。然后我在数组中搜索该节点的值。如果我找到这个值,我就把它设为左边的子元素并添加到队列中,如果我再次找到它,我就把它设为右边的子元素并添加到队列中,并打破for循环,因为子元素不能超过两个。假设队列中有4个元素,那么复杂性将是O4n。因为我们使用的是大O,所以它相当于On。我说的对吗@user2887596是的,如果您的队列大小不变,那么正如您所说的,您就加入了。但是,如果你不能假设你的队列有一个恒定的大小,或者至少有一个上限,那么你必须考虑队列的大小。在我的例子中,它在增长,也在减少……我想更好地了解这类情况的复杂性。你能用我编辑的代码解释一下吗?是的,但是,最后,你的树中的每个节点都会在队列中只出现一次,导致一次迭代。这就是为什么,最终您的队列将导致n次迭代
For each node you add: (meaning n times)
    You linearly search your array of values (worst case: you always need to search the entire array, also meaning n times)