AP计算机科学A:比较运行时间

AP计算机科学A的学习概念,示例问题和解释

大学导师应用商店 大学导师安卓商店

例子问题

例子问题2:算法分析

考虑下面的代码:

O_log_n__

代码的运行时是什么(用大o符号?)

可能的答案:

正确答案:

解释

运行时的最佳分析方法是逐行分解代码。迭代sum值的行在常数时间内执行,或O(1)。控制这个常量时间操作的“for”循环在i = 1时初始化,i通过乘以2迭代,直到它等于或大于n。因此,这个循环将运行次数,运行时间为O(log(n))

示例问题21:程序分析

考虑下面的代码:


O_2n_

代码的运行时间是多少(用大o表示法?)

可能的答案:

正确答案:

解释

这段代码的运行时间最好通过插入数字进行分析。以bar(2)的值为例。Bar(2)会导致对Bar(1)的两次调用,而Bar(1)又会导致对Bar(0)的四次调用。对bar(4)的调用将导致对bar(3)的两次调用,对bar(2)的4次调用,对bar(1)的8次调用,以及对bar(0)的16次调用。因此,可以表明调用的数量与2^n成正比,并且运行时间为O(2^n)。

例子问题1:比较运行时间

考虑下面的代码:

O_n_

代码的预期运行时是多少(用大o符号?)

可能的答案:

正确答案:

解释

运行时的最佳分析方法是逐行分解代码。迭代sum值的行在常数时间内执行,或O(1)。这个常数时间操作在for循环中执行n次,导致运行时间与n成正比,或O(n)。

例子问题1:比较运行时间

考虑下面的代码:

O_n2_

代码的预期运行时间是多少(用大o表示法?)

可能的答案:

正确答案:

解释

运行时的最佳分析方法是逐行分解代码。迭代sum值的行在常数时间内执行,或O(1)。这个常数时间操作在内部的for循环中执行n次,在外部的for循环中执行n次。因此,运行时间为

例子问题1:比较运行时间

考虑下面的代码:

O_n3_

代码的运行时间是多少(用大o表示法)?

可能的答案:

正确答案:

解释

运行时的最佳分析方法是逐行分解代码。迭代sum值的行在常数时间内执行,或O(1)。执行这个常数时间操作在内部的“for”循环中,和外部循环中的Times。因此,总体运行时间为

例子问题2:算法分析

下面这个函数的BigO是多少?

bigO(int[][] m)
If (m.length > 2)
For (int I = 0;I < m.length - 1;我+ +)
For (int j = 0;J < m[i].length;j + +)
System.out.println (m[我][j]);
其他的
For (int j = 0;J < m[0].length;j + +)
System.out.println (m [0] [j]);
可能的答案:

O (n)

O (1)

O (log (n))

O (n2

O (n * log (n)

正确答案:

O (n2

解释

函数是O(n2),因为它有一个大小为2的嵌套循环,没有额外的附加内容可能会添加到log(n)中。一个好的经验法则是:如果有嵌套循环,那么BigO通常是O(n)),其中m为最长部分的循环级别。

例子问题1:比较运行时间

哪个更有效(即更低的大O)?

1)

Arr = [1,2,3,4,5,6,7,8]

arr2 =[[1、2],[3,4],[5,6],[7,8],[9 10],[10 11]]

For (int I = 0;I < arrr .length;我+ +){

For (int j = i;J < arr2.length;j + +) {

Arr [i][j] = 0;

2)

Arr = [1,2,3,4,5,6,7,8]

arr2 =[[1、2],[3,4],[5,6],[7,8],[9 10],[10 11]]

For (int I = 0;I < arrr .length;我+ +){

For (int j = 0;J < arr2.length;j + +) {

Arr [j] = 0;

可能的答案:

大O是等价的

2

1

无关紧要的

正确答案:

2

解释

代码示例#1依赖于第二个循环中的i,其中int j = i。由于代码依赖于第二个循环中的i,因此顺序从O(N)到O(N)2

代码示例#2有两个互不依赖的独立循环。第一个for循环遍历数组arr,第二个for循环遍历数组arr2。因为两个循环是互斥的,所以顺序是O(N)

例子问题1:比较运行时间

哪个编译时间更快,O(N) O(N2), O (N3.),或O(NlogN)?

可能的答案:

O (N3.

O (N)

O (NlogN)

O (N2

正确答案:

O (N)

解释

O(NlogN) = O(N) * O(logN)大于O(N)单独。

O (N2)为O(N*N),大于O(N)。

O (N3.)为O(N*N*N),大于O(N)。

O(N)是最小的,因此是最快的编译。因此,O(N)是正确答案。

例子问题1:比较运行时间

哪个更有效率?

一)

Arr = [0,1,2,3]

For (int I = 0;I < arrr .length;我+ +){

Int j = 0;

If (j == arr[i]) {

+ +;

b)

ArrayList arL = new ArrayList();

arL.add (0);

arL.add (1);

arL.add (2);

arL.add (3);

For (int I = 0;i < arL.size();我+ +){

Int k = 0;

if (k == arL.get(i)) {

k + +;

可能的答案:

b)

一)

数组比数组列表更有效

A)和b)具有相同的效率

正确答案:

A)和b)具有相同的效率

解释

这两个代码段具有相同的效率。两者都在O(N)时间内运行。数组列表使用数组作为其底层数据结构,因此对数据的访问也是相同的。

例子问题1:比较运行时间

对或错。

代码段A的运行时间比代码段B更有效。

(一)

For (int I = 0;I < 25;我+ +){

For (int j = i;J < 25;j + +) {

(B)

For (int I = 0;I < 25;我+ + {

For (int j = 0;J < 25;j + +) {

可能的答案:

真正的

正确答案:

解释

代码段A的运行时间为O(N2).代码段B的运行时间为O(N)。虽然这两个代码段可能看起来相同,但代码段A中的第二个for循环设置j=i。因为j依赖于i,所以它将第一个for循环的运行时间乘以第二个for循环的运行时间。得到O(N*N)或者O(N2).

大学导师的学习工具