2013-04-08 3 views
1

배열을 정렬하는 알고리즘을 찾고 있지만 값을 이동하지는 않습니다. 오히려 가능한 한 적은 수의 값을 삭제하고 정렬 된 목록으로 끝내고 싶습니다. 기본적으로 나는 오랜 오름차순 하위 배열을 찾고 싶다.배열을 정렬하기 위해 요소 제거

는 설명하기 위해 : 나는 나는이 작업을 수행하는 방법을 볼 수 있습니다

1 4 5 6 7 2 3 8 

1 4 5 6 7 8 

과하지 (5 개 제거합니다)

1 2 3 

될 (2 개 제거합니다)해야 순진한 방법, 즉 재귀 적으로 각 요소에 대한 '제거'및 '제거하지 않음'트리를 확인하는 것입니다. 더 빠르고 효율적인 방법이 있는지 궁금합니다. 이런 종류의 문제에 대한 공통적 인 이동 알고리즘이 있습니까?

+1

이유는 각각의 성공 요소는 이전 요소보다 큰 경우 확인 (그리고 그것의하지 않을 경우 삭제)하지? – ASGM

+2

@ASGM : "욕심 많은"알고리즘이 _ 최장 오름차순 하위 배열을 제공하지 않기 때문에. 다음을 고려하십시오 :'9 1 2 3 4 5 6 7 8'. – Thomas

+0

아, 좋은 지적 @ 토마스! – ASGM

답변

8

당신은 longest increasing subsequence 문제를 찾고 있습니다. O (n log n) 시간에이를 해결하는 algorithm이 있습니다.

+0

신난다, 고마워! 검색 할 올바른 용어를 알면 어떤 차이가 있습니까?) – Joost

관련 문제