자료 구조와 알고리즘

GPU 같은 병렬 처리 장치에서 정렬을 수행할 때, 바이토닉 정렬처럼 비교·교환 절차가 정해져 있는 정렬(정렬 네트워크)이 쓰이는 경우가 있다. 그 이유로 올바른 것은?

  1. A비교 횟수가 O(n)으로, 비교에 의한 정렬의 하한 O(n log n)보다 적기 때문
  2. B안정적인 정렬로, 같은 키를 가진 원소의 순서가 유지되기 때문
  3. C어느 원소 쌍을 비교·교환할지가 데이터 값과 관계없이 미리 정해져 있으므로, 많은 스레드가 같은 절차로 동시에 처리할 수 있고 처리의 분기도 일치하기 때문
정답과 해설 보기

정답: C. 어느 원소 쌍을 비교·교환할지가 데이터 값과 관계없이 미리 정해져 있으므로, 많은 스레드가 같은 절차로 동시에 처리할 수 있고 처리의 분기도 일치하기 때문

바이토닉 정렬에서는 각 단에서 비교하는 원소 쌍이 첨자만으로 정해지며, 한 단 안의 비교·교환은 모두 동시에 수행할 수 있습니다. n = 2ᵏ개의 데이터는 k(k+1)/2단으로 정렬되며, 16개면 10단에 합계 80회, 1,024개면 55단에 합계 28,160회의 비교를 수행합니다. 비교의 총수는 O(n log² n)으로 퀵 정렬 등보다 많지만, 데이터에 따라 절차가 바뀌지 않으므로 GPU처럼 많은 스레드가 같은 명령을 실행하는 장치에서는 분기의 어긋남이 일어나지 않아 효율적으로 동작합니다. 비교만으로 정렬하는 방법은 O(n log n)보다 적은 비교로는 끝나지 않으며, 바이토닉 정렬은 일반적으로 안정적이지도 않습니다.

이 분야 연습하기 분야로 돌아가기

자료 구조와 알고리즘의 다른 문제

  1. 원소 수가 n인 배열에서 서로 다른 두 원소의 쌍을 모두 한 번씩 비교하는 처리(i번째 원소를 그보다 뒤에 있는 모든 원소와 비교하는 것을, i를 하나씩 늘려 가며 반복하는 이중 루프)의 시간 복잡도는?
  2. 시간 복잡도가 O(n²)인 프로그램에서 데이터 수가 1,000일 때 처리 시간이 0.5초였다. 데이터 수를 4,000으로 하면 처리 시간은 약 몇 초가 되는가?
  3. 서로 다른 100개의 값이 들어 있는 배열에서, 앞에서부터 차례로 하나씩 비교하는 선형 탐색으로 목표 값을 찾는다. 목표 값은 반드시 배열 안에 있고 어느 위치에 있을 확률도 같을 때, 비교 횟수의 평균은 얼마인가?
  4. 배열과 비교했을 때 연결 리스트(각 원소가 다음 원소의 위치를 가리키는 포인터를 가진 리스트)의 특징으로 올바른 것은?
  5. 빈 스택에 대해 push 1, push 2, pop, push 3, push 4, pop, pop의 순서로 조작했다. pop으로 꺼낸 값을 차례로 나열한 것은?