알고리즘 분석 - 복잡 도 잡담
본문 기호 해석
흔히 볼 수 있 는 복잡 도 는
알고리즘 분석 첫 번 째 해결 해 야 할 문제 - What to analysis
알고리즘 을 평가 하 는 중요 한 기준 은 바로 runtime 이다. runtime 에 영향 을 주 는 요소 가 매우 많다. 예 를 들 어 사용 하 는 컴 파일 러, 컴퓨터 자체 의 액세스 속도 읽 기와 쓰기 속도 등 이 있 기 때문에 반드시 다른 계량 화 된 것 이 있 고 외부 로부터 방 해 를 받 지 않 는 기준 으로 알고리즘 의 좋 고 나 쁨 을 다각도로 평가 해 야 한다.
입력 데이터 의 크기 는 main consideration 입 니 다.
두 함수 Tavg (N) Tworst (N) 를 일반 입력 조건 과 최 악의 입력 조건 으로 미리 정의 하 는 runtime
뚜렷 한 것 은 Tavg (N) ≤ Tworst (N) 가 한 조 씩 출력 할 때마다 이 두 함수 가 한 가지 더 많은 상황 에 대해 토론 해 야 합 니 다.
우리 가 일반적으로 필요 로 하 는 것 은 worst - case 의 runtime 으로 알고리즘 의 좋 고 나 쁨 을 평가 하 는 것 이다.
밤 을 들 어 달 래 요.
Given a sequence of K integers {N1,N2,...Nk}. A continuous subsequence is defined to be {Ni,Ni+1,...Nj} where 1≤i≤j≤K. The Maximum Subsequence is the continuous subsequence which has the largest sum of its elements. For example, given sequence { -2, 11, -4, 13, -5, -2 }, its maximum subsequence is { 11, -4, 13 } with the largest sum being 20.
Now you are supposed to find the largest sum, together with the first and the last numbers of the maximum subsequence.
천 서 를 먼저 번역 하 다
대 의 는 당신 에 게 서열 을 주 고 이 서열 의 가장 큰 하위 서열 과 다음 과 같은 형식 으로 결 과 를 인쇄 하 는 것 입 니 다.
최대 하위 서열 과 최대 하위 서열 중 첫 번 째 수, 최대 하위 서열 중 마지막 수
이 문 제 를 해결 하 는 알고리즘 은 여기 서 구체 적 으로 열거 하지 않 은 것 이 많다.
다음은 그것들의 복잡 도 | 알고리즘 | 1 | 2 | 3 | 4 | | | -------------------------------------------------------------------------------------------------------------| | 입력 규모 N = 10 | 0.00103 | 0.00045 | 0.00066 | 0.00034 | | | N = 100 | 0.47015 | 0.011112 | 0.00486 | 0.00063 | | | | N = 1000 | 448.77 | 1.1233 | 0.05843 | 0.00333 | | | N = 100000 | NA | 111.13 | 0.68631 | 0.03042 | N = 100000 | NA | NA | 8.0113 | 0.29832 | 이 데 이 터 는 Mingw - w64 컴 파일 러 환경 에서 측정 되 었 습 니 다.
이 문 제 는 내 가 생각 하기에 가장 좋 은 산법 문제 풀이 이다.
#include
using namespace std;
int main()
{
int N;
cin >> N;
int a[N];
// sum、 tempsum、 tempindex、 start、 end
int sum = -1,tempsum = 0,tempindex = 0, start = 0, end = N-1;
for(int i = 0; i < N; i++)
{
cin >> a[i];
tempsum += a[i];
if(tempsum < 0)
{
tempsum = 0;
tempindex = i+1;
}
else if(tempsum > sum)
{
sum = tempsum;
start = tempindex;
end = i;
}
}
if(sum == -1)
{
sum = 0;
}
cout << sum << " " << a[start] << " " << a[end];
return 0;
}
runtime 의 추산
밤 을 들 어 입방 의 합 을 계산 하 다.³+2³+3³+···+n³ 가장 쉬 운 건 다 들 아 시 잖 아 요.
int Sum(int n)
{
int i,PatialSum;
PartialSum = 0;//**1**
for(i=1;i<=n;i++);//**2**
PartialSum +=i*i*i;//**3**
return PartialSum;//**4**
}
분석 은 간단 하 다.
3. 한 번 실행 할 때마다 네 번 연산 (두 번)✖,한 번➕,또 한 번 assignment) N 회 실행, 4N 회 연산
그 중 2 곳 은 숨겨 진 시간 소모 가 있 는데 i 와 N 의 크기 관 계 를 판단 해 야 하기 때문에 모든 판단 이 복잡 도 를 N + 1 로 계산한다.
매번 i 에 대한 집행 이 증가 할 때마다 복잡 도 는 1 대 총 화 를 더 하고 복잡 도 는 N 으로 기록한다.
그러면 총 복잡 도 는 6N + 4 (함수 리 셋 무시)
그래서 우 리 는 결론 을 내 렸 다. 이 알고리즘 의 복잡 도 는 O (N) 이다.
Rules for analyze
for(i=0;i
O (n) 에 이 어 O (N)²) 그러면 총 복잡 도 는 O (N).²)
1, 29 먼저 왔 습 니 다. 물고 기 를 만 지 러 가 야 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.