공부중
[알고리즘]자기 구성 순차 탐색(Self-Organizing Sequential Search) – 전진이동법(Move To Front) 본문
[알고리즘]자기 구성 순차 탐색(Self-Organizing Sequential Search) – 전진이동법(Move To Front)
곤란 2013. 2. 7. 16:35
전진 이동법은 주변 프로그램에서 살펴 볼 수 있는 것은 다음과 같을 것이다.
이러한 최근 기록 부분일 것이다.
전진 이동법은 한번 탐색 되고나면 그 항목을 해당 집합의 맨 앞으로 위치시키는 방법이다.
5 | 1 | 8 | 9 | 2 | 4 | 3 | 6 | 10 | 7 |
다음과 같은 데이터 집합에서 2를 찾는다고 하면 …
↓ | |||||||||
5 | 1 | 8 | 9 | 2 | 4 | 3 | 6 | 10 | 7 |
2를 찾았다.
2 | 5 | 1 | 8 | 9 | 4 | 3 | 6 | 10 | 7 |
그리고 다음부터는 2를 맨 앞에서 찾을 수 있다.
main.cpp |
#include <iostream>
static const int ARRAY_MIN = 0; static const int ARRAY_MAX = 10;
int MoveToFrontMethod(int *DataBank, const int nSerchVal);
int main( ) { int nArray[ARRAY_MAX] = { 8,6,4,7,5,1,3,9,2,0 };
int nSerchVal = 0;
while(true) { std::cout<<"찾고자 하는 숫자를 입력해주세요"<<std::endl; std::cout<<"배열안의 숫자는 0 ~ 9까지 입니다."<<std::endl; std::cout<<"음수를 입력하면 종료됩니다."<<std::endl; std::cin>>nSerchVal;
if( 0 > nSerchVal ) { break; } else { std::cout<<"찾는 숫자는"<< MoveToFrontMethod( nArray , nSerchVal ) <<"번째에 있습니다."<<std::endl;
} }
}
int MoveToFrontMethod(int *DataBank, const int nSerchVal) {//전진이동법 for( int nCount = ARRAY_MIN ; ARRAY_MAX > nCount ; ++nCount ) { if( nSerchVal == DataBank[nCount] ) { const int nIndexTemp = nCount; const int nTemp = DataBank[nCount]; int nSortIndex = nIndexTemp; //******************************// for( ; ARRAY_MIN < nSortIndex ; --nSortIndex ) { DataBank[nSortIndex] = DataBank[nSortIndex-1]; } DataBank[ARRAY_MIN] = nTemp; //******************************// return nIndexTemp; } } std::cout<<"찾고자 하는 데이터가 없습니다."<<std::endl; return false; } |
출력 결과
'Programing > 알고리즘' 카테고리의 다른 글
[알고리즘]달팽이 알고리즘 (0) | 2015.11.06 |
---|---|
[알고리즘]자기 구성 순차 탐색(Self-Organizing Sequential Search) – 전위법(Transpose method) (0) | 2013.02.07 |
[알고리즘] 순차 탐색(Sequential Serch) (0) | 2013.02.07 |
[알고리즘] 퀵 정렬 (Quick Sort) (0) | 2013.01.29 |
[알고리즘] 삽입정렬 (Insertion Sort) (3) | 2013.01.17 |