답변:
아니요, 응용 프로그램에 따라 다릅니다. 정렬 측정은 종종 장애 측정으로 지칭되며 , 이는 에서 까지의 함수이며 , 여기서 N ^ {<N} 은 고유 한 음이 아닌 정수의 모든 유한 시퀀스의 모음입니다. Estivill-Castro and Wood의 조사 [1]는 적응 정렬 알고리즘의 맥락에서 11 가지 장애 측정 방법을 나열하고 논의합니다. R N < N
반전의 수는 경우에 따라 작동 할 수 있지만 때로는 불충분합니다. [1]에 주어진 예는 다음과 같습니다
그것은 2 차 수의 반전을 가지지 만 2 개의 오름차순으로 만 구성됩니다. 거의 정렬되어 있지만 반전으로 캡처되지는 않습니다.
[1] Estivill-Castro, Vladmir 및 Derick Wood. "적응 정렬 알고리즘 조사." ACM 컴퓨팅 조사 (CSUR) 24.4 (1992) : 441-476.
Mannila [1]는 다음과 같이 (비교 기반 알고리즘에 중점을 두어) 사전 분류를 axiomatize합니다.
하자 완전히 명령 세트를. 그런 매핑 m 에서 Σ ⋆ (별개의 요소들의 시퀀스 Σ 원주민에)은 인 presortedness의 측정 조건을 아래에 만족하는 경우에는.
가 정렬 되면 m ( X ) = 0 입니다.
경우에 과 X = X 1 ... X N , Y = Y (1) ... , Y n은 과 X I를 < X 난모든 i에 대해 y i < y j , j ∈ [ 1 .. n ] , m ( X ) = m ( Y ) .
경우 의 서브 시퀀스이고 Y ∈ Σ ⋆ 다음 m ( X ) ≤ m ( Y ) .
만약 모든 I ∈ [ 1 .. | X | ] 및 j ∈ [ 1 .. | Y | ] 일부 X , Y ∈ Σ ⋆ 의 경우 m ( X ⋅ Y ) ≤ m ( X ) + m ( Y ) 입니다.
의 모든 X ∈ Σ ⋆ 및 ∈ E ∖ X .
이러한 조치의 예는
이러한 측정 값을 사용하는 무작위 분포가 정의되었습니다. 즉, 더 많거나 적은 정렬 된 시퀀스가 더 많거나 적을 가능성이 있습니다. 이것을 Ewens와 같은 분포 라고합니다 [2, Ch. 4-5; 3, 실시 예 12; 4], 특별한 경우는 Mallows 분포입니다. 가중치는 상수 에서 파라 메트릭 이며 충족
.
이 균일 분포를 정의 하는 방법에 유의하십시오 (모든 m에 대해 )
이러한 측정 값을 사용하여 순열을 샘플링하는 것이 가능하므로 정렬 알고리즘을 벤치마킹 할 때이 작업 본문이 실제로 유용 할 수 있습니다.
시퀀스의 "정렬"에 대한 내 자신의 정의가 있습니다.
어떤 시퀀스 [a, b, c,…]가 주어지면, 우리는 그것을 동일한 원소를 포함하는 정렬 된 시퀀스와 비교하고, 일치 횟수를 세고 그것을 시퀀스의 원소 수로 나눕니다.
예를 들어 주어진 순서 [5,1,2,3,4]
대로 다음과 같이 진행합니다.
1) 순서를 정렬하십시오. [1,2,3,4,5]
2) 정렬 순서를 한 번에 한 위치로 이동하고 최대 일치 수를 세어 원본과 비교합니다.
[5,1,2,3,4]
[1,2,3,4,5] one match
[5,1,2,3,4]
[1,2,3,4,5] no matches
[5,1,2,3,4]
[1,2,3,4,5] no matches
[5,1,2,3,4]
[1,2,3,4,5] no matches
[5,1,2,3,4]
[1,2,3,4,5] no matches
[5,1,2,3,4]
[1,2,3,4,5] 4 matches
[5,1,2,3,4]
[1,2,3,4,5] no matches
...
[5,1,2,3,4]
[1,2,3,4,5] no matches
3) 최대 일치 횟수는 4이며 "정렬"을 4/5 = 0.8로 계산할 수 있습니다.
정렬 된 시퀀스의 정렬은 1이되고 요소가 역순으로 정렬 된 시퀀스의 정렬은 1 / n이됩니다.
이 정의의 기본 개념은 시퀀스를 정렬 된 시퀀스로 변환하는 데 필요한 최소한의 작업량을 추정하는 것입니다. 위의 예에서 우리는 하나의 요소 인 5 만 이동해야합니다 (여러 가지가 있지만 5를 이동하는 것이 가장 효율적 임). 요소가 역순으로 배치되면 4 개의 요소를 이동해야합니다. 그리고 순서가 정렬되면 작업이 필요하지 않습니다.
내 정의가 이해되기를 바랍니다.
빠르고 더러운 무언가가 필요하면 (요약 부호가 무섭다) 무작위로 생성 된 숫자로 채워진 int 배열을 생성하는 Array라는 클래스에 대해 C ++에서 매우 쉬운 장애 함수를 작성했습니다.
void Array::disorder() {
double disorderValue = 0;
int counter = this->arraySize;
for (int n = 0; n < this->arraySize; n++) {
disorderValue += abs(((n + 1) - array[n]));
// cout << "disorderValue variable test value = " << disorderValue << endl;
counter++;
}
cout << "Disorder Value = " << (disorderValue / this->arraySize) / (this->arraySize / 2) << "\n" << endl;
}
함수는 단순히 각 요소의 값을 요소 + 1의 인덱스와 비교하여 역순으로 배열의 장애 값이 1이고 정렬 된 배열의 장애 값이 0입니다. 정교하지는 않지만 작동합니다.
남자 이름