2011-02-06 4 views
1

정렬 된 숫자 시퀀스의 배열을 정렬하는 복잡한 알고리즘을 구현하고 있습니다. 전체 알고리즘은 nlog (n) 복잡이어야합니다. 따라서이 부분은 같거나 그 이상이어야하지만 어떻게해야할지 모르겠습니다.순서가 지정된 배열의 배열을 효과적으로 정렬하는 방법

예가 있습니다.

(0) 
(0,1) 
(0) 
(0,5) 
(2,4) 
() 
(0,5) 
() 
(2,4) 
(1,3,4) 

최종 종류가 있어야한다 : 순서의 배열이있다

몇 가지 중요한 사항이 있습니다
() 
() 
(0) 
(0) 
(0,1) 
(0,5) 
(0,5) 
(1,3,4) 
(2,4) 
(2,4) 

:

  • 정렬이
  • 서열 정렬 사전 편찬하지만, 연속성을 보장하지 않습니다.
  • 비어있는 밀기울도 있습니다. NCES
  • 시퀀스는 0에서 배열은 아마 더 이상
  • 최종 구현은 C++로 수 없습니다 긴 100,000 될 수
  • 더 이상, 수백 긴에있는 동일한 시퀀스를 많이하지만 지금은
  • 아마도 중요하지 않습니다

제발 가장 좋은 방법을 제안 할 수 있습니까? 고마워요

+1

구현이 C++로되어 있다면'std :: sort'와'std :: lexicographical_compare'를 사용하십시오. 이렇게하면 원하는 복잡성을 얻을 수 있으며 코드가 올바르게 작동하는지 확인할 수 있습니다. – Blastfurnace

+0

@Blastfurnace 마지막으로 나는'std :: sort'를 사용했고'std :: lexicographical_compare'를 지적 해 주셔서 감사합니다. – Gaim

답변

1

quicksort를 사용하면 정렬 알고리즘은 O (n log n)가됩니다. 두 항목을 비교하는 방법은 정렬 자체의 복잡성과 관련이 없으며 고유 한 복잡성 (아마도 O (m))이 있습니다.

+0

부적절한 이유는 무엇입니까? 비교가 많으며 동일한 시퀀스가 ​​많이 있으므로 비교가 여러 번 선형이됩니다. 복잡도는 O (m n logn)이고 m = 100 일 때 복잡합니다. – Gaim

+1

m = 100에서도 n = 10000에서 n * log (n)과 비교되지 않습니다. 정렬은 지배적 인 알고리즘입니다. 비교 연산자는 단지'strcmp()'이거나 데이터가 정수로 저장되는 경우 strcmp와 같은 함수입니다. "문자열"이 얼마나 오랫동안 중요한 영향을주지는 않습니다. 비교가 평균 복잡성에 영향을 미치지 않는다는 것을 지적하기 위해 – wuputah

+0

(+1). –

0

프로젝트에 GPLv3 코드를 통합 할 수 있다면 GNU Sort을 시작하는 것이 좋습니다. 최소한 샘플 입력에서 실행했을 때 샘플 출력을 얻었으므로 즉시 잘못되지는 않습니다.

+0

설명, 특성 및 자습서가 있습니까? 못 찾겠 어. – Gaim

+0

@Gaim은 Linux 시스템에 포함 된 표준'sort (1)'유틸리티입니다. 'info sort'는 문서 더미를 줄 것입니다. 정렬 그 자체에 대해서 Knuth 3 권 (제 2 판)에서 제안한 스타일의 재귀 적 분할 정복 알고리즘을 사용하여 5.2.4-23 절의 운동 5.2.4-10 절에서 제안한 최적화를 사용하십시오. Knuth는이 메모리 최적화가 원래 DA Bell, Comp J. 1 (1958), 75에 의해 출판되었음을 썼다. – sarnold

2

문제는 radix sort과 비슷합니다.이 경우 가장 가까운 항목 (예 : 100 번째 항목)이없는 경우 해당 항목을 먼저 정렬하고 min possible value - 1 (예를 들어 -1이 표시 될 수 있음)으로 설정하고, 그런 다음이 정렬 된 시퀀스를 두 번째 맨 오른쪽 항목으로 정렬하고이 방법을 계속 수행하십시오.

또한 시퀀스의 항목이 모두 1..k (이 경우에는 1.9 사이에 있음을 알 수 있습니다.)를 사용하여 counting sort을 사용하여 O (n)에서 정렬하면 카운팅 정렬을 사용할 수 있습니다. 정렬 시간은 O (n)이지만 그렇지 않으면 정렬 시간은 O (n log n)입니다.

+0

기수 정렬 +1, 그 알고리즘을 알고 있지만 그것에 대해 잊어 버렸습니다. 어쩌면 그것이 제가 찾고있는 것일 수 있습니다. 시도 할 시간이 필요해. – Gaim

관련 문제