스크롤 그룹 기초
스크롤 배열의 간단한 예:
int i, d[100];
d[0] = 1;
d[1] = 1;
for (i = 2; i < 100; i++)
d[i] = d[i - 1] + d[i - 2];
printf("%d", d[99]);
위의 이 순환 d[i]는 앞의 두 데이터 d[i-1]와 d[i-2]에만 의존한다.
공간을 절약하기 위해 스크롤 그룹을 사용하는 방법:
int d[3];
d[0] = 1;
d[1] = 1;
for (i = 2; i < 100; i++)
d[i % 3] = d[(i - 1) % 3] + d[(i - 2) % 3];
printf("%d", d[99 % 3]);
위의 잉여 연산을 주의하십시오. 우리는 필요한 마지막 세 개의 해만 성공적으로 보존했습니다. 수조는 '스크롤' 과 같아서 스크롤 수조라고 합니다.
//DP는 2D에서도 사용할 수 있습니다(코드가 정확하고 완벽하지 않을 수 있지만 예는 이해할 수 있습니다).
int i,j,d[100][100];
for(i=1;i<100;i++)
for(j=0;j<100;j++)
d[i][j]=d[i-1][j]+d[i][j-1];
위의 d[i][j]는 d[i-1][j], d[i][j-1]에만 의존한다.
스크롤 그룹 사용하기
int i,,j,d[2][100];
for(i=1;i<100;i++)
for(j=0;j<100;j++)
d[i%2][j]=d[(i-1)%2][j]+d[i%2][j-1];
동수조는 실제적으로 공간을 절약하는 방법으로 시간적으로 우세가 없다. 주로 DP에 사용된다.
예:
DP 1개, 일반적으로 1000 필요×1000 공간, DP의 비후효성에 따라 2×1000, 그리고 스크롤, 획득 및 1000×1000 같은 효과.스크롤 그룹은 DP에 많이 사용된다. DP 과정에서 우리가 한 상태에서 다른 상태로 전환할 때 이전에 저장된 일부 상태 정보가 무용지물일 가능성이 높다. 예를 들어 01배낭 문제에서 이해의 측면에서 볼 때 우리는 DP[i][j]의 2차원 그룹을 열어야 한다. 1차원에서 우리는 몇 개의 물품, 즉 단계, 2차원 저장 용량을 저장해야 한다. 그러나 우리는 DP[i]를 얻고 DP[i-1]의 정보를 사용하기만 하면 된다.DP[i-k], k>1은 모두 쓸모없는 공간이 되었기 때문에 우리는 수조를 1차원으로 열면 된다. 수조의 내용을 교체하고 수조를 굴리는 것도 이 원리이다. 목적도 마찬가지다. 그러나 이때의 문제는 1차원으로 축소할 수 없다. 예를 들어 하나의 DP[i][j]는 DP[i-1][k], DP[i-2][k]로 결정해야 한다. i
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.