삽입정렬과 버블정렬 구분하기. 어렵습니다.
글쓴이: lokee / 작성시간: 금, 2006/08/25 - 3:28오후
저희대학 컴공과 교수님이 C문제를 내주셨습니다.
실행파일만 주셧습니다. C코드는안보이구요.
C프로그램을 시키고나서 알파벳 input 을 넣는대요,
무작위input
정렬된input
역정렬된 input 을 넣었는데
이게 도무지 버블정렬인지 삽입정렬인지 알수가업네요.
참고로 time 명령을 실행해본결과는 두정렬모두 걸리는시간이 너무비슷하다는겁니다.
100,000 input 을 입력하면
랜덤 / 오름차순정렬 / 내림차순정렬
삽입정렬 250 / 140 / 360
버블정렬 270 / 150 / 370
이렇게 나오는데 어떤 input 을 넣어봐야 주어진프로그램이 버블정렬인지 삽입정렬인지 알수가있을까요?
(제가넣어본건 이 세가지 종류의 input 뿐입니다.)
이문제 정말어렵다고 소문난문제입니다.
움...누구 아이디어 없으세요? 좀 도와주시죠.
Forums:
프로그램 동작을
프로그램 동작을 보고 프로그램이 어떤 정렬알고리즘을 쓰는지 맞추는 것인가요 ???
재미있는 문제로군요.(푸는 입장에서는 괴롭겠습니다만...)
한번 같은 입력을 넣어보는 건 어떨까요 ??? (1 을 100,000 개 넣는다던가...)
해결책이 될것 같지는 않습니다만...
정 방법이 없으면 디컴파일을 해보심이...
값들이 옆에 있는
값들이 옆에 있는 것들끼리 교체가 일어나면 버블소트
그게 아니면 삽입소트
테스트 입력으로 특정 값을 쓰는게 좋을 듯 한데요.
삽입 정렬은 정렬된 데이터에 작은 값이 들어가면 느려진다는 점을 이용해보면 어떨까 합니다.
예를들어
n개의 데이터가 있다면
2, 3, 4, ... n, 1
이런식으로 입력하는거죠.
이렇게 하면 삽입정렬의 비교 횟수는 2*n회 정도 될 겁니다. 데이터 교환 횟수는 2*n회 정도가 될거고요.
(자기 자리에 다시 집어넣는 경우 포함)
반면 버블 소트라면 비교 횟수는 n^2회에 데이터 교환 횟수는 n회 정도 되겠죠.
n이 아주 큰 수면 두 알고리즘간에 시간 차이가 나타나지 않을까 합니다.
댓글 달기