데이터 구조의 알고리즘 분석
대수 성장 이 매우 느리다 는 것 을 나타 낸다.
연산 시간 계산
i、 i<=N, i 。
2. 일반 법칙
1 - for for for ( )
2 - for , for
3 - , O(N) + O(N^2) O(N^2)
4 - if/else if/else S1 S2 。
예 를 들 어 가장 큰 하위 서열 과 네 가지 해법 에 관 한 시간 연산
제 1 종
public static int maxSubSum1(int [] a)
{
int maxSum = 0; // O(1)
// For O(1)
for(int i = 0; i < a.length; i++) // N
{
for(int j = i; j < a.length; j++) // N - i, N,
{
int thisSum = 0;
for(int k = i; k <= j; k++) // j - i + 1, N
thisSum += a[k];
// O(1 * N * N * N) = O(N3)
if(thisSum > maxSum)
maxSum = thisSum; // + O(N2)
}
}
return maxSum;
}
알고리즘 실행 시간 은 \ (O (N ^ 3) \)
두 번 째
public static int maxSubSum2(int [] a)
{
int maxSum = 0; // O(1)
// 2 for ,T = O(1 * N * N) = O(N2)
for(int i = 0; i < a.length; i++)
{
int thisSum = 0;
for(int j = i; j < a.length; j++)
{
thisSum += a[j];
if(thisSum > maxSum) // O(N2)
maxSum = thisSum;
}
}
return maxSum;
}
알고리즘 실행 시간 \ (O (N ^ 2) \)
제3 종
나 누 어 다스리다
private static int maxSumRec(int [] a, int left, int right)
{
if(left == right) // Base case
if(a[left] > 0)
return a[left]
else
return 0;
int center = (left + right) / 2;
// N / 2 ( N )
// T(N / 2) , 2T(N/2)
int maxLeftSum = maxSumRec(a, left, center);
int maxRightSum = maxSumRec(a, center + 1, right);
// For ,
// O(1) * 4 + O(N) * 2 ≈ O(N)
int maxLeftBorderSum = 0, leftBorderSum = 0;
for(int i = center; i >= left; i--)
{
leftBorderSum += a[i];
if(leftBorderSum > maxLeftBorderSum)
maxLeftBorderSum = leftBorderSum;
}
int maxRightBorderSum = 0, rightBorderSum = 0;
for(int i = center + 1; i <= right; i++)
{
rightBorderSum += a[i];
if(rightBorderSum > maxRightBorderSum)
maxRightBorderSum = rightBorderSum
}
return max3(maxLeftSum, maxRightSum, maxLeftBorderSum + maxRightBorderSum); //
}
public static int maxSubSum3(int []a)
{
return maxSumRc(a, 0, a.length - 1);
}
알고리즘 실행 시간 2T (N / 2) + O (N)
네 번 째
public static int maxSubSum4(int [] a)
{
int maxSum = 0, thisSum = 0;
for(int j = 0; j < a.length; j++) // O(N)
{
thisSum += a[j];
if(thisSum > maxSum) // O(logN)
maxSum = thisSum;
else if(thisSum < 0)
thisSum = 0;
}
return maxSum;
}
알고리즘 실행 시간 O (Nlog N)
실행 시간의 로그
일반 법칙
(O(1)) ( 1 / 2), O(log N)。 , ( 1), O(N) 。
그 특징 을 지 닌 세 가지 예
public sttatic>
int binarySearch(AnyType [] a, AnyType x)
{
int low = 0, high = a.length - 1;
while(low <= high)
{
int mid = (low + high) / 2;
// a[mid] < x
if(a[mid].compareTo(x) < 0)
low = mid + 1;
else if (a[mid].compareTo(x) > 0)
high = mid - 1;
else
return mid; // found
}
return NOT_FOUND; // NOT_FOUND IS defined as -1;
}
public static long gcd(long m, long n)
{
while(n != 0)
{
long rem = m % n;
m = n;
n = rem;
}
return m;
}
두 정수 의 최대 공약수 (gcd) 는 두 자 를 동시에 제거 하 는 최대 정수 이다.
public static long pow(long x, int n)
{
if(n == 0)
return 1;
if(n == 1)
return x;
if(isEven(n))
return pow(x * x, n / 2);
else
return pow(x * x, n / 2) * x;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.