생각 효율성 피보나치 수 계산에 대해 트리거

피보나치 수 피보나치 시퀀스 알고리즘은 다음과 같다 :

int FibonacciFunc(int val)
{
	if(0 == val)
		return 0;
	else if(1 == val)
		return 1;
	
	return FibonacciFunc(val - 1) + FibonacciFunc(val - 2);
}

 알고리즘은 재귀입니다, 복잡하지 않습니다. 그러나 통화 자체가 재귀 스택 및 스택 판매의 건설을 포함 것이다,하고, 비용은 지속적으로 할 필요가 자원 소비, 시간이 사용될 때, 어떻게이 재귀 적 계산을 호출 무시되지 않습니다 특히, 중대하다 . 갑자기 나는이 문제를 참조 이러한 오버 헤드를 감소하는 방법에 대한 생각을 시작합니다. 물론,이 사고는 숨겨진 매트릭스 생각 번호의 피보나치 프로그램과는 아무 상관이 없습니다. 우리는 문제의 가능성을 고려한다. 실제 상황과 일반 거래는 발생 몇 가지 가능성이있을 것, 많은 양의 데이터가 중복되어있을 것입니다, 우리는 그 시점에서 시작합니다.

1, 낮은 및 더 많은 자원이 충분히 전제를 배포 할 수 있습니다 :

      목록은 최선의 선택

typedef struct _FIBONACCI_VAL_MAP
{
	int item ;      //项
	int val;        //值
	struct _FIBONACCI_VAL_MAP *next;
}FIBONACCI_VAL_MAP;

히트리스트 데이터가있을 경우 각 계산하기 전에 알아보십시오. 당신은 계산 된 데이터에 명중하고 목록의 시작 부분에 삽입하지 마십시오.

프로그램이 다음 거의 실제 상황의 값이 목록에서 찾을 수 있습니다, 충분히 소모 될 때까지 기다립니다. 이 성능에서 병목 목록 조회에 나타납니다. 예를 들어, 트리 찾는 방법은? 또한 그것을 최적화? 나무는 확인 조회 후 목록을 조회 최적화되어 있는지 여부를 확인합니다. 재귀 스택 핀 스택의 구성을 더 할당 된 레지스터 값에 소비 찾기 목록에서 이전보다 소비된다. 이 크기의 순서보다 많이 소모 시간

 

2, 적은 자원 :

   또한, 고정 된 크기 어레이의 배열 될

typedef struct _FIBONACCI_VAL_MAP
{
	int item ;
	int val;
}FIBONACCI_VAL_MAP;

FIBONACCI_VAL_MAP Target_Map[10];

교환의 구성원의 첫 번째 히트와 함께, 이전과 같이 찾기 위해 프로그램의 목록을 찾을 수 있습니다. 자동으로 전환 후 데이터 전에 첫째를 그리워 마지막 (가장 낮은 명중률을) 폐기에 추가.

3, 다른 최적화 프로그램은 기대하지 않았다. 빈 장갑 화이트 울프의 전임자. 수동 재미 .JPG

게시 22 개 원래 기사 · 원의 찬양 9 · 전망 8830

추천

출처blog.csdn.net/ljm_c_bok/article/details/82981100