Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[2405] Re:Re:Re: 버그로군요. 좋은 지적 감사합니다. ^^
김백일.cedar [cedar] 1247 읽음    2003-04-15 13:00
버그 맞습니다.
multiset을 사용한 코드에서는 삽입전에 대소 비교 루틴을 넣었는데,
heap 버전에서는 그걸 빼먹었습니다.
고쳐서 다시 올립니다.

//---------------------------------------------------------------------------
#include <iostream>
#pragma hdrstop
#include <algorithm>
#include <iterator>

//---------------------------------------------------------------------------
using namespace std;

#pragma argsused
int main(int argc, char* argv[])
{
    const int heap_size = 10;
    int input, heap[heap_size];
    ostream_iterator<int> out(cout, " ");   // 출력 반복자 정의

    cout << "Enter 10 numbers: ";
    // heap[0..9]까지 입력받음
    for (int i = 0; i < heap_size; ++i) {
           cin >> input;
        heap[i] = input;
    }

    // heap[0..9]를 힙으로 만듦: O(N) 복잡도
    make_heap(&heap[0], &heap[heap_size]);
    #ifdef _DEBUG // 디버그 모드에서는 힙의 내용 출력
    cout << "After make_heap : ";
    copy(&heap[0], &heap[heap_size], out); cout.put('\n');
    #endif

    cout << "Enter more numbers. Press [Ctrl+Z] and Enter to quit.\n";
    while (cin >> input) {          // ctrl+z 로 입력 정지
        if (input < heap[0]) {
            pop_heap( &heap[0], &heap[heap_size]); // 힙에서 가장 큰 값을 pop: O(log N)
            #ifdef _DEBUG
            cout << "After  pop_heap : ";
            copy(&heap[0], &heap[heap_size], out); cout.put('\n');
            #endif
            heap[heap_size - 1] = input;    // push할 원소를 마지막에 놓음
            push_heap(&heap[0], &heap[heap_size]); // 힙에 push: O(log N)
            #ifdef _DEBUG
            cout << "After push_heap : ";
            copy(&heap[0], &heap[heap_size], out); cout.put('\n');
            #endif
        }
    }

    // 힙 전용 정렬 알고리듬: sort보다 상수배 만큼 빠릅니다. 그러므로 O(N log N)
    sort_heap(&heap[0], &heap[heap_size]);
    cout << "After sort_heap : "; // 당연히 sort_heap 후에는 더이상 힙이 아닙니다.
    copy(&heap[0], &heap[heap_size], out); cout.put('\n');

    return 0 ;
}
//---------------------------------------------------------------------------

+ -

관련 글 리스트
2364 숫자를 입력받아서 크기 순으로 작은 수 10개를 출력하는 프로그램인데요..짧거든요.. 한번만..봐주세요.. 김지혜 1309 2003/04/11
2397     [답변] 대충 답변 드려서 최송....ㅋㅋ...컴파일 해보구 다시 올립니다.. 정성훈.해미 1295 2003/04/14
2388     Re:[중급자용 해답]가장 짧고 빠르게 푸는 방법: 힙(heap)을 써야 합니다. 김백일.cedar 1267 2003/04/14
2404         Re:Re:[중급자용 해답]가장 짧고 빠르게 푸는 방법: 힙(heap)을 써야 합니다. 임문환 1169 2003/04/15
2405             Re:Re:Re: 버그로군요. 좋은 지적 감사합니다. ^^ 김백일.cedar 1247 2003/04/15
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.