我刚接触过Java,我的问题是关于大O复杂性的。
对于a),它显然是嵌套循环的O(n^2)。
for ( int i = 0; i < n; i++)
for ( int j=0; j < n; j++ )
但是,对于b),随着sum++操作的结束,以及嵌套循环的复杂性,这是否改变了它的大O复杂度呢?
int sum = 0;
for ( int i = 1; i <= n; i++)
for ( int j = n; j > 0; j /= 2)
sum++;
我得到了以下代码,并被告知func函数的Big O是Big O (n^ 2)。我相信它是大O( n),因为它应该是大O(n +n),我错了吗?
what is Big O of following func?
nums = list(range(1, 11))
K = 4
def func(nums: list, K:int):
i, end = 0, len(nums)
res = []
x = []
while i < end:
res.a
请让我看看下面这段代码的大O时间复杂度:
for (int i = 0; i < array.length - 1; i++) {
for (int j = i + 1; j < array.length; j++) {
// do something
}
}
不可能是O(n^2),因为j = i + 1?谢谢!
对于下面的伪码,最糟糕的时间复杂度大O表示法是什么?(假设函数调用是O(1)),我对大O表示法非常陌生,所以我不确定答案,但我认为O(log(n))是因为while循环参数每次乘以2,还是仅仅是O(loglog(n))?还是我在这两方面都错了?任何输入/帮助都是值得赞赏的,我正试图掌握最糟糕的时间复杂度的大O表示法的概念,我刚刚开始学习。谢谢!
i ← 1
while(i<n)
doSomething(...)
i ← i * 2
done
所以我在循环中嵌入了一个循环:
int a,b,n;
for (a = 1; a <=n; a++) {
for (b = 0; b < n; b+=a)
cout << "hey" << endl;
}
N是2的幂
我试着去理解如何计算时间复杂度,但是我很难弄清楚这其中的大θ符号。
我知道外部循环在O(n)时间内运行,但是由于b+=a的原因,我不确定内环,我知道如果我有两个循环的时间,我可以把它们乘以得到函数的大θ时间,但是我不知道内环运行在什么位置。
当我插入样本n's时。2,4,8,16),然后内环分别环
我的印象是,为了找到嵌套的for循环的大O,一个循环将每个forloop的大O与下一个for循环相乘。大O会不会代表:
for i in range(n):
for j in range(5):
print(i*j)
是O(5n)?如果是这样的话,大O表示:
for i in range(12345):
for j in range(i**i**i)
for y in range (j*i):
print(i,j,y)
成为O(12345*(i**i**i)*(j*i)?或
考虑以下循环:
def func1(xs, ys, zs):
for x in xs:
for y in ys:
pass
for z in zs:
pass
运行时间应该采用size of xs * (size of ys + size of zs),它可以用大o符号编写为O(X) * (O(Y) + O(Z))。
def func2(xs, ys, zs):
for y in ys:
for x in xs:
pass
for z in zs:
我试图找到以下代码的时间复杂性,但我不确定它是否正确。有人能帮我找到以下代码的时间复杂度吗?代码语言是JAVA。
代码:
// importing the necessary header files for the program
// header files are imported using the keyword import
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
//creating a class c
我正在为我的java应用程序做一些性能优化,我对使用tmp变量来删除循环终止中的方法调用感到困惑。以下是我的情况:
Vector myVector = new Vector();
// some code
for (int i=0;i<myVector.size();i++){
//some code here;
}
我想用
int tmp = myVector.size();
for(int i=0;i<tmp;i++){
//some code here
}
What would be negative impact of using second scenario ?,我的应
public static LinkedList third(int[] array){
LinkedList retval = null;
for (int i = 0; i < 999 && i < array.length; i = i + 1) {
retval = new LinkedList(array[i], retval);
}
return retval;
}
为什么这段代码给出了大-O= O(1)?
是大的哦(Log )吗?我怎样才能用求和来证明呢?
//Input: A positive decimal integer n
//Output: The number of binary digits in n’s binary representation
count ← 1
while n > 1 do
count ← count + 1
n ← ⌊n/2⌋
return count
我的答案是O(D + R)。这是正确的吗?
我想找出这个代码的大O。我正在做一门关于数据结构和算法的独立课程。
这段代码摘自L Groiner女士的“JavaScript中的数据结构和算法”(Data Structure and Algorithms in PacktPub )一书,我现在正在学习这本书。
请见下文:
function baseConverter(decNumber, base) {
var remStack = new Stack(), //instantiate class, define variable, O(1)
rem, // define var, O
下面是伪代码:
for i=1 to n
for j=1 to n
for k=1 to j
x = x+1
我必须计算这两件事(i)精确地计算它(ii)找到大O
在(i)中,我的最终答案是n^4+2n^3+5n^2+4n+2。在(ii)中,因为有三个循环,所以它是O(n^3);
似乎(i)或(ii)肯定有误差,因为(i)是4的幂,而大O只是3。
下面是我在计算迭代次数时的步骤:
for(i=1; i <=n; i++)
计算为1+(n+1)+n,即(2n+2)。
最后得到的是n^4(参见最后一项,(2n+2)+n(2n+2)+n(4+6+8+...+2n+
在一个大学项目的背景下,我们希望使用DJI Mobile SDK (4.11)开发一个Android应用程序(Java)来控制DJI Mavic 2。
我们创建/下载的应用程序,如大疆,在将它们构建为APK后可以在手机上运行,但我们没有完成在Android Studio (3.5.1)中模拟它们。我已经读到这是不可能的,但开发一个应用程序而不在IDE中测试它对我们来说是不可行的……
有什么选择吗?提前谢谢。
我发现了以下算法,给定数组的长度n和要选择的索引的k数,生成k索引的所有可能组合。我已在此实施:
def combinations(n, k):
combinations = []
combination = [None]*k
for i in range(k):
combination[i] = i
while combination[k - 1] < n:
combinations.append(combination.copy())
t = k - 1
while t != 0 a
我正在尝试找出下面两个算法的大O符号,但遇到了问题。
第一个是:
public static int fragment3 (int n){
int sum = 0;
for (int i = 1; i <= n*n; i *= 4)
for (int j = 0; j < i*i; j++)
sum++;
return sum;
} //end fragment 3
答案应该是O(n^4)。当我自己尝试这样做时,我得到的结果是:我看了第一个for循环,并认为它运行了n^2 logn次。然后对于内部for循环,它运行n次+外部循环的运行时间,即n^3 logn次。我知道
我正在努力寻找这个问题的大O,并且我对第三个嵌套循环有困难。这是代码
for (int i = 1 to n)
for (int j = i to n)
for (int k = j*j to n)
//some constant operation
I循环明显是O(n)。
J+ n-1 + n-2 +.+2+1= (n- 1) n/2 = O (n ^2)。
但我不知道如何考虑k的循环。我知道,对于j (1到n)的一个全循环,求和是(n + n-4 + n-6 +.)= sum_{k=1}^n (n ^2),但我不确定从那里到哪里。
任何关于如何进行的建议都将是很棒的
我很难理解而循环是如何影响大O时间复杂性的。
例如,如何计算下面代码的时间复杂度?由于它有一个遍历数组中每个元素的for循环和两个嵌套的while循环,所以我最初的想法是时间复杂度为O(n^3),但我认为这是不对的。
HashMap<Integer,Boolean> ht = new HashMap<>();
for(int j : array){
if(ht.get(j)) continue;
int left = j-1;
//check if hashtable contains number
while(ht.
对于下面的算法,如何用n来描述增长函数?
什么是边界函数(大-O)?是O(n^3)吗?
for(i = 0 to n - 1)
{
c = i + 1
for(j = c to n)
{
arr[j] += arr[i];
for(k = c to 0 step -1) // what does the keyword "step" mean?
{
arr[k] *= arr[j];
}
}
}
对于以下每一种算法,使用Big标识并声明运行时间。
//i for (int i = 0; Math.sqrt(i) < n; i++)
cout << i << endl;
//ii for (int i = 0; i < n; i++){
cout << i << endl;
int k = n;
while (k > 0)
{
k /= 2;
cout << k << endl;
} // while
}
//iii
int k = 1;
当计算算法每一次运算的代价为1时,当while循环依赖于多个变量时,就会引起混淆。这个伪代码将一个元素插入到堆的正确位置。
input: H[k] // An array of size k, storing a heap
e // an element to insert
s // last element in array (s < k - 1)
output: Array H, e is inserted into H in the right place
s = s+1 [2]
H[s] = e
我目前正试图确定以下递归算法的大Theta复杂性。复杂度至少为n^2 (由于嵌套的for-循环)是合理的。然而,递归方面使我难以确定其精确的大Theta复杂性。
我猜它必须是n^3,因为函数递归地调用自己并执行自己。但我很难找到证据。有人能告诉我递归算法的复杂性和如何确定它吗?
function F(n)
if n < 1:
return 1
t = 0
for i <- 0 to n:
for j <- i to n:
t = t + j
return t + F(n-1)
这是我的代码,注释总结了程序应该做的事情。
// This program will read in from a file a number that tells how many
// wages and hours worked the file contain. And then calculates the
// salary
import java.util.*;
import java.text.*;
public class Lab10
{
public static void main(String[] args)
{
/