我有个问题.我有个算法
procedure summation(A[1...n])
s=0
for i= 1 to n do
j=min{max{i,A[i],n^3}
s= s + j
return s
我想用渐近表示法θ在这个算法中求出最小和最大输出。对怎么做有什么想法吗?我要看什么算法才能理解它的复杂性?
给定一个数组。如何在固定时间内求出索引区间(i, j)中元素的和?你可以使用额外的空间。
示例:
答:3 2 4 7 1 -2 8 0 -4 2 1 5 6 -1
长度= 14
int getsum(int* arr, int i, int j, int len);
// suppose int array "arr" is initialized here
int sum = getsum(arr, 2, 5, 14);
在固定时间内,sum应为10。
对称差分有两个定义在数学上是等价的,我有三个函数可以构成对称差分,但当我试图用这两个定义求出总复杂度时,我得到了两个不同的表达式。
这些是功能的运行时:
int minus(int a[], int b[]) //O(alogb)//here a and b denotes the size of the arrays
int union(int a[], int b[]) //O(a+b)
int intersect(int a[], int b[])//O(alogb)//a is the smaller array WLOG
使用对称差分的第一个定义(联合b)-(相交b):
这可能是已涵盖的理由,但我尚未找到我能够理解的解释。我可能很快就会感到尴尬。
例如,我试图使用以下大O表示法求出数量级:
count = 0;
for (i = 1; i <= N; i++)
count++;
我从哪里开始发现什么定义了震级?我的数学能力相对较差,尽管我尝试了一些资源,但还没有找到能解释一段代码如何转化为代数方程的东西。坦率地说,我甚至无法猜测,关于这个循环的大O效率是什么。
我有一个问题,找到算法所需的内存的大O顺序意味着什么?
比如,这和大o操作有什么区别?
E.g
给出以下伪代码,并使用初始化的二维数组A,两维大小均为n:
for i <- 1 to n do
for j <- 1 to n-i do
A[i][j]= i + j
内存的大o符号不就是n^2,计算也是n^2吗?
考虑到这段Java代码:
import java.util.Scanner;
class BreakWhileLoop {
public static void main(String[] args) {
int n;
Scanner input = new Scanner(System.in);
while (true) {
System.out.println("Input an integer");
n = input.nextInt();
if (n == 0) {
break;