공부중

[알고리즘]자기 구성 순차 탐색(Self-Organizing Sequential Search) – 전진이동법(Move To Front) 본문

Programing/알고리즘

[알고리즘]자기 구성 순차 탐색(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;

}

 

출력 결과

 

반응형