메뉴 바로가기 검색 및 카테고리 바로가기

한빛미디어

뇌를 자극하는 알고리즘

뇌를 자극하는 알고리즘 질의응답 게시판입니다.

7장 P.Q 및 HEAP 코드에서 궁금한거 있습니다.

2011-05-18

|

by bogunbabo1

2411

void      HEAP_DeleteMin( Heap* H, HeapNode* Root )
{
    int ParentPosition = 0;
    int LeftPosition   = 0;    
    int RightPosition  = 0;    
    
    memcpy(Root, &H->Nodes[0], sizeof(HeapNode));
    memset(&H->Nodes[0], 0, sizeof(HeapNode));

    H->UsedSize--;
    HEAP_SwapNodes( H, 0, H->UsedSize );

    LeftPosition  = HEAP_GetLeftChild( 0 );
    RightPosition = LeftPosition + 1;

    while ( 1 )
    {
        int SelectedChild = 0;

        if ( LeftPosition >= H->UsedSize )
            break;

        if ( RightPosition >= H->UsedSize )
        {
            SelectedChild = LeftPosition;
        }
        else {
            if ( H->Nodes[LeftPosition].Data > H->Nodes[RightPosition].Data)
                SelectedChild = RightPosition;
            else
                SelectedChild = LeftPosition;                
        }

        if ( H->Nodes[SelectedChild].Data < H->Nodes[ParentPosition].Data )
        {
            HEAP_SwapNodes(H, ParentPosition, SelectedChild);
            ParentPosition = SelectedChild;
        }
        else
            break;

        LeftPosition  = HEAP_GetLeftChild(ParentPosition);
        RightPosition = LeftPosition + 1;
    }

    if ( H->UsedSize < ( H->Capacity / 2 ) )
    {
        H->Capacity /= 2;
        H->Nodes =
            (HeapNode*) realloc( H->Nodes, sizeof( HeapNode ) * H->Capacity );
    }
}

아 참고로 전.. 공과대도 안나왔으며.. 적지 않은 29이라는 나이에 프로그래밍 공부를 시작한 사람입니다.
아직 한달도 안됬고요...ㅎㅎ;;
그래서 제질문이 요상괴상 망측에.. 프로그래머로서 이해가 안되실수도 있지만.. 그래도 궁금하기에 올립니다.

위의 예제는 HEAP의 예제 내용중.. 최소값 제거.. 즉 루트/최소값을 제거하고 정리하는 함수입니다.

함수 호출시 입력되는 매개변수 Root 와..사용용도가 궁금해서요..
3번째 줄에 사라질 최소값.. 즉 사라질 루트값을 저장하는것 빼고는.. 사용하는게 없는거 같습니다..;;;

만약 용도가 사라질 최소값을 저장하는 기능이라면.. 이것이 프로그래밍 할때 어떤 이점이 있는지도 궁금합니다.^^;;
댓글 입력