피폴라치 수열=>다양한 방법의 비교(분치, 귀속, 동적 기획/추이)
4699 단어 수필.
이렇게 하면 피폴라치 수열에는 여러 가지 해법이 있을 수 있다.
우선 반복 사용:
// for
#include
#include
#include
#include
using namespace std;
long long work(int n){
if(n==1||n==2){
return 1;
}
else{
return work(n-1)+work(n-2);
}
}
int main()
{int n;
//freopen("fei.in","r",stdin);
//freopen("fei.out","w",stdout);
scanf("%d",&n);
printf("%lld",work(n));
return 0;
}
일반적인 귀속 방법에는 많은 중복 계산이 존재한다.효율은 자연히 매우 낮다.예를 들어 f(n-1)를 계산할 때 이미 f(n-2)를 계산해 냈지만 귀환은 f(n-2)를 다시 한 번 계산해야 한다.그래서 분치, 한 단락 한 단락의 계산을 채택하여 중복 계산을 줄인다.
2점:
// for
#include
double n;
int k;
long long s,a;
long long sishewuru(double g){
if(g>=(int)g+0.5){
return g+1;
}
else return g;
}
long long er(long long q){
if(q==1||q==2){
return 1;
}
else{
return er(q-1)+er(q-2);
}
}
long long wang(long long p){
if(p==sishewuru(n/2)){
return s;
}
if(p==sishewuru(n/2)-1){
return a;
}
else return wang(p-1)+wang(p-2);
}
int main()
{//freopen("fei.in","r",stdin);
//freopen("fei.out","w",stdout);
scanf("%lf",&n);
s=er(sishewuru(n/2));
a=er(sishewuru(n/2)-1);
long long o=wang(n);
printf("%lld",o);
return 0;
}
2분의 효율도 극히 제한적이다. 일반적인 귀환은 40 정도까지 계산하면 이미 극한이고 2분은 75 정도까지 계산할 수 있다.그래서 문제를 한층 더 나누어 그로 하여금 더욱 적게 반복하게 했다.
3점:
// for
#include
double n;
int k;
long long s,a;
long long f,d;
long long sishewuru(double g){
if(g>=(int)g+0.5){
return g+1;
}
else return g;
}
long long er(long long q){
if(q==1||q==2){
return 1;
}
else{
return er(q-1)+er(q-2);
}
}
long long wang(long long p){
if(p==sishewuru(n/3)){
return s;
}
if(p==sishewuru(n/3)-1){
return a;
}
else return wang(p-1)+wang(p-2);
}
long long ring(long long i){
if(i==sishewuru(2*n/3)){
return f;
}
if(i==sishewuru(2*n/3-1)){
return d;
}
else return ring(i-1)+ring(i-2);
}
int main()
{//freopen("fei.in","r",stdin);
//freopen("fei.out","w",stdout);
scanf("%lf",&n);
s=er(sishewuru(n/3));
a=er(sishewuru(n/3)-1);
f=wang(sishewuru(2*n/3));
d=wang(sishewuru(2*n/3)-1);
long long o=ring(n);
printf("%lld",o);
return 0;
}
3점은 단시간 내에 110항 정도를 계산할 수 있다.다음은 과감한 6점.// for
#include
double n;
int k;
long long s,a;
long long f,d;
long long w,q,e,r,t,y;
long long sishewuru(double g){
if(g>=(int)g+0.5){
return g+1;
}
else return g;
}
long long er(long long q){
if(q==1||q==2){
return 1;
}
else{
return er(q-1)+er(q-2);
}
}
long long wang(long long p){
if(p==sishewuru(n/6)){
return s;
}
if(p==sishewuru(n/6)-1){
return a;
}
else return wang(p-1)+wang(p-2);
}
long long dao(long long x){
if(x==sishewuru(n/3)){
return f;
}
if(x==sishewuru(n/3-1)){
return d;
}
else return dao(x-1)+dao(x-2);
}
long long yu(int v){
if(v==sishewuru(n/2)){
return w;
}
if(v==sishewuru(n/2-1)){
return q;
}
else return yu(v-1)+yu(v-2);
}
long long nb(int m){
if(m==sishewuru(2*n/3)){
return r;
}
if(m==sishewuru(2*n/3-1)){
return e;
}
else return nb(m-1)+nb(m-2);
}
long long ring(long long i){
if(i==sishewuru(5*n/6)){
return y;
}
if(i==sishewuru(5*n/6-1)){
return t;
}
else return ring(i-1)+ring(i-2);
}
int main()
{//freopen("fei.in","r",stdin);
//freopen("fei.out","w",stdout);
scanf("%lf",&n);
s=er(sishewuru(n/6));
a=er(sishewuru(n/6)-1);
f=wang(sishewuru(n/3));
d=wang(sishewuru(n/3)-1);
w=dao(sishewuru(n/2));
q=dao(sishewuru(n/2-1));
r=yu(sishewuru(2*n/3));
e=yu(sishewuru(2*n/3-1));
y=nb(sishewuru(5*n/6));
t=nb(sishewuru(5*n/6-1));
long long o=ring(n);
printf("%lld",o);
return 0;
}
6분 측정에 의하면 단시간 내에 200개 정도를 계산할 수 있고 210개 항목까지 계산할 수 있을 것이다.이를 통해 일반적인 귀속은 40 정도, 2분에서 75 정도, 3분 110 정도, 6분 200 정도까지 갈 수 있음을 알 수 있다. 짧은 시간에 계산할 수 있는 항목수(n)와 그것이 몇 단락(r)으로 나뉘는지 정비례할 수 있다.
대략 40 정도를 계수로 한다.n=k*r.
그러나 이런 방법도 극히 제한되어 있기 때문에 뒤로 계산하려면 끊임없이 단락을 확대해야 하기 때문에 매우 번거롭다.
그래서 점차적인 추측을 직접 이용하여 동태적인 기획으로 계산하면 효율이 크게 강화될 것이다.
// / for
#include
long long a[10000];
int main()
{int n;
//freopen("fei.in","r",stdin);
//freopen("fei.out","w",stdout);
scanf("%d",&n);
a[1]=a[2]=1;
for(int i=3;i<=n;i++){
a[i]=a[i-1]+a[i-2];
}
printf("%lld",a[n]);
return 0;
}
나는 10000개의 정형수조를 정의했는데 이런 방법으로 10000개를 계산하는 것은 조금도 힘들지 않다는 것을 알 수 있다.이렇게 보면 이런 방법은 속도와 효율이 매우 높다.피폴라치의 수열은 다르기 때문에 해법이 아직 매우 많으니, 여기에는 더 이상 열거하지 않겠다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
피폴라치 수열=>다양한 방법의 비교(분치, 귀속, 동적 기획/추이)이렇게 하면 피폴라치 수열에는 여러 가지 해법이 있을 수 있다. 일반적인 귀속 방법에는 많은 중복 계산이 존재한다.효율은 자연히 매우 낮다.예를 들어 f(n-1)를 계산할 때 이미 f(n-2)를 계산해 냈지만 귀환은...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.