문제

저는 호기심이 왜,안정성 또는지에서 중요한 정렬 알고리즘?

도움이 되었습니까?

해결책

정렬 알고리즘은 말 는 경우 두 개체 같은 키를 나타날과 같은 순서로 정렬 출력에서 나타나는 대로 입력할 수 있는 배열 정렬됩니다.일부를 정렬 알고리즘은 안정적인 자연에 의해 처럼 삽입 정렬,병합 정렬,거품 분류,등등.며 몇 가지 정렬 알고리즘을처럼되지 않 힙 정렬,빠른 종류,등등.

배경:"안정"정렬 알고리즘을 유지 항목과 같은 정렬을 키기 위해서.가 있다고 가정의 목록은 5-letter 어:

peach
straw
apple
spork

면 우리 목록을 정렬에 의해 각 단어의 첫 글자를 그때는 안정적인 정렬을 생산하는 것:

apple
peach
straw
spork

정렬 알고리즘, strawspork 될 수 있습 교류,하지만 안정적인 중 하나,그들은 편에서 동일한 상대치(즉,이후 straw 기 전에 나타납니다 spork 에서의 입력,그것도 나타나기 전에 spork 출력에서).

우리 목록을 정렬하고 단어의 이 알고리즘을 사용하여:안정 분류 열 5,4,3,2,1.끝에서,그것은 것이 올바르게 정렬됩니다.자신을 설득합니다.(해하는 알고리즘이라고 기수 정렬)

지금 당신의 질문에 대답하다고 가정 우리가 우리 목록의 첫 번째와 마지막 이름입니다.우리는"종류에 의하여,다음 의 첫 번째".리 첫 번째 정렬(안정적이거나 안정적이지 않은)의 이름을 다음,안정적으로 정렬한다.이러한 종류,목록은 주로 정렬에 의해 마지막 이름입니다.그러나 마지막 이름이 동일한 첫 번째 이름을 정렬됩니다.

할 수 없습니다 스택에 불안정한 종류에는 동일한 패션이다.

다른 팁

안정적인 정렬 알고리즘 불안정한 정렬을하면서 입력에 나타나는 것과 동일한 순서로 동일한 요소를 정렬하는 것입니다. 그렇지 않을 수도 있습니다 사건을 만족시킵니다.

안정적인 정렬 알고리즘 :

  • 삽입 정렬
  • 정렬을 병합하십시오
  • 버블 정렬
  • 팀 정렬
  • 계산 정렬

불안정한 정렬 알고리즘 :

  • 힙 정렬
  • 선택 정렬
  • 쉘 정렬
  • 빠른 정렬

enter image description here

정렬 안정성은 동일한 키를 가진 레코드가 정렬 전후에 상대 순서를 유지한다는 것을 의미합니다.

따라서 해결하는 문제에 해당 상대적 순서가 필요한 경우에만 안정성이 중요합니다.

안정성이 필요하지 않으면 Heapsort 또는 QuickSort와 같은 라이브러리에서 빠른 메모리 시핑 알고리즘을 사용하여 잊을 수 있습니다.

안정성이 필요하면 더 복잡합니다. 안정적인 알고리즘은 불안정한 알고리즘보다 큰 CPU 및/또는 메모리 사용량을 갖습니다. 따라서 큰 데이터 세트가 있으면 CPU를 치거나 메모리를 치는 것을 선택해야합니다. CPU와 메모리 모두에 제약을 받으면 문제가 있습니다. 좋은 타협 안정 알고리즘은 이진 트리 종류입니다. 그만큼 위키 백과 기사 STL을 기반으로 한 병적으로 쉬운 C ++ 구현이 있습니다.

원래 레코드 번호를 각 레코드의 마지막 장소 키로 추가하여 안정적인 알고리즘으로 만들 수 있습니다.

안정성이 중요한 이유는 몇 가지 있습니다. 하나는 교체하여 두 개의 레코드를 교환 할 필요가 없다면 메모리 업데이트를 일으킬 수 있고 페이지가 더러워지고 디스크 (또는 다른 느린 매체)로 다시 작성해야한다는 것입니다.

그것은 당신이하는 일에 달려 있습니다.

성 필드와 성 필드를 가진 사람들의 레코드가 있다고 상상해보십시오. 먼저 목록을 이름으로 정렬합니다. 그런 다음 안정 알고리즘으로 목록을 성으로 정렬하면 이름과 성으로 목록이 정렬됩니다.

정렬 알고리즘은 안정되어 있을 경우 두 개체 같은 키를 나타날과 같은 순서로 정렬 출력에서 나타나는 대로 입력되지 않은 배열입니다.일부를 정렬 알고리즘은 안정적인 자연에 의해 처럼 삽입 정렬,병합 정렬,거품 분류,등등.며 몇 가지 정렬 알고리즘을처럼되지 않 힙 정렬,빠른 종류,등등.

그러나,주어진 정렬 algo 하지 않은 안정적인 수정할 수 있습을 안정적입니다.이 될 수 있을 정렬 algo 특정 방법을 안정적이지만,일반적으로,모든 비교 기반으로 정렬 알고리즘하지 않은 안정적인 자연에 의해 수정할 수 있습니다 안정적으로 키를 변경하면 비교도록 작업을 비교 두 개의 키를 고려한 위치는 요인으로는 객체에 대해 동 키를 사용합니다.

참고:http://www.math.uic.edu/~leon/cs-mcs401-s08/유인물/안정성이 있습니다.pdf http://en.wikipedia.org/wiki/Sorting_algorithm#Stability

나는 이것에 대한 많은 대답이 있다는 것을 알고 있지만 나에게는 이 답변, 에 의해 로버트 하비, 훨씬 더 명확하게 요약했습니다.

안정적인 종류는 입력 세트의 원래 순서를 보존하는 것입니다. [불안정한] 알고리즘은 둘 이상의 항목을 구별하지 않습니다.

원천

정렬하는 것이 숫자 일 뿐이며 그들의 값만이 그것들을 식별/구별한다고 가정하면 (예 : 동일한 값을 가진 요소는 Identice), 정렬의 안정성 문제는 의미가 없습니다.

그러나 정렬에서 동일한 우선 순위를 가진 객체는 뚜렷 할 수 있으며 때때로 상대적 순서는 의미있는 정보입니다. 이 경우 불안정한 정렬은 문제를 생성합니다.

예를 들어, 게임에서 레벨을 가진 미로를 청소하기 위해 모든 플레이어의 시간 비용 [t]가 포함 된 데이터 목록이 있습니다. 미로를 얼마나 빨리 청소하는지 플레이어를 순위를 매기는 것이 필요하다고 가정합니다. 그러나 추가 규칙이 적용됩니다. 더 높은 수준으로 미로를 청소하는 플레이어는 시간 비용이 얼마나 오래 지속 되더라도 항상 높은 순위를 갖습니다.

물론 쌍을 이루는 값 [t, l]을 규칙을 따르는 일부 알고리즘으로 실수 [r]에 매핑하려고 시도 할 수 있습니다.

그러나 안정적인 정렬이 가능하다면 전체 목록을 [t] (먼저 더 빠른 플레이어)로 간단히 정렬 한 다음 [L]에 의해 단순히 정렬 할 수 있습니다. 이 경우, 플레이어의 상대적 순서 (시간 비용별로)는 청소 한 미로 수준으로 그룹화 한 후에는 변경되지 않습니다.

추신 : 물론 두 번 분류하는 접근 방식은 특정 문제에 대한 최선의 해결책이 아니라 포스터 문제를 설명하기 위해서는 충분해야합니다.

안정적인 정렬이 항상 반품과 같은 솔루션(en)에서 동일한 입력.

예를 들어[2,1,2]정렬을 사용하여 안정적으로 정렬 순열[2,1,3](첫 번째 index2,다음 지수는 1 그 때에 인덱스 3 정렬 출력)는다는 것을 의미하는 출력이상 단행 동일한 방법입니다.다른 비가 안정되어 있지만,여전히 올바른 순열은[2,3,1].

빠른 정렬하지 않은 안정적 정렬 순열의 차이 중 같은 요소에 따라 달라집 알고리즘을 따기 위한 피벗.일부 구현을 선택 임의로 만들 수 있는 빠른 정렬을 산출하는 다른 순열에서 동일한 입력을 사용하여 동일한 알고리즘이 있습니다.

안정적인 정렬 알고리즘이 필요한 결정적입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top