"분류"를 측정하는 방법


34

어레이의 "정렬"을 측정하는 표준 방법이 있는지 궁금합니다. 가능한 최대 반전의 수를 갖는 배열이 최대 정렬되지 않은 것으로 간주됩니까? 즉, 기본적으로 가능한 한 정렬되거나 반대로 정렬되지 않습니다.

답변:


31

아니요, 응용 프로그램에 따라 다릅니다. 정렬 측정은 종종 장애 측정으로 지칭되며 , 이는 에서 까지의 함수이며 , 여기서 N ^ {<N} 은 고유 한 음이 아닌 정수의 모든 유한 시퀀스의 모음입니다. Estivill-Castro and Wood의 조사 [1]는 적응 정렬 알고리즘의 맥락에서 11 가지 장애 측정 방법을 나열하고 논의합니다. R N < NN<NRN<N

반전의 수는 경우에 따라 작동 할 수 있지만 때로는 불충분합니다. [1]에 주어진 예는 다음과 같습니다

n/2+1,n/2+2,,n,1,,n/2

그것은 2 차 수의 반전을 가지지 만 2 개의 오름차순으로 만 구성됩니다. 거의 정렬되어 있지만 반전으로 캡처되지는 않습니다.


[1] Estivill-Castro, Vladmir 및 Derick Wood. "적응 정렬 알고리즘 조사." ACM 컴퓨팅 조사 (CSUR) 24.4 (1992) : 441-476.


2
문맥은 반전 횟수가 중앙값에 가까운 n 개의 원소의 랜덤 순열에서 퀵 정렬이 상대적으로 열악한 이유를 이해하려고합니다.
Robert S. Barnes

1
좋은 예는 바로 내가 찾던 정보입니다.
Robert S. Barnes

1
Estivill 카스트로와 목재입니다 확실히 이것에 대한 참조입니다.
Pedro Dusso

10

Mannila [1]는 다음과 같이 (비교 기반 알고리즘에 중점을 두어) 사전 분류를 axiomatize합니다.

하자 완전히 명령 세트를. 그런 매핑 m 에서 Σ (별개의 요소들의 시퀀스 Σ 원주민에)은 인 presortedness의 측정 조건을 아래에 만족하는 경우에는.ΣmΣΣ

  1. 가 정렬 되면 m ( X ) = 0 입니다.XΣm(X)=0

  2. 경우에 X = X 1 ... X N , Y = Y (1) ... , Y n은X I를 < X X,YΣX=x1xnY=y1yn모든 i에 대해 y i < y j , j [ 1 .. n ] , m ( X ) = m ( Y ) .xi<xiyi<yji,j[1..n]m(X)=m(Y)

  3. 경우 의 서브 시퀀스이고 Y Σ 다음 m ( X ) m ( Y ) .XYΣm(X)m(Y)

  4. 만약 모든 I [ 1 .. | X | ]j [ 1 .. | Y | ] 일부 X , Y Σ 의 경우 m ( X Y ) m ( X ) + m ( Y ) 입니다.xi<yji[1..|X|]j[1..|Y|]X,YΣm(XY)m(X)+m(Y)

  5. 의 모든 X Σ E X .m(aX)|X|+m(X)XΣaE엑스

이러한 조치의 예는

  • 반전 수,
  • 스왑 수
  • 왼쪽에서 오른쪽으로 최대가 아닌 요소의 수
  • 가장 긴 증가 하위 시퀀스의 길이 (입력 길이에서 빼기)

이러한 측정 값을 사용하는 무작위 분포가 정의되었습니다. 즉, 더 많거나 적은 정렬 된 시퀀스가 ​​더 많거나 적을 가능성이 있습니다. 이것을 Ewens와 같은 분포 라고합니다 [2, Ch. 4-5; 3, 실시 예 12; 4], 특별한 경우는 Mallows 분포입니다. 가중치는 상수 에서 파라 메트릭 이며 충족θ>0

.Pr(X)=θm(X)YΣΣ|X|θm(Y)

이 균일 분포를 정의 하는 방법에 유의하십시오 (모든 m에 대해 )θ=1m

이러한 측정 값을 사용하여 순열을 샘플링하는 것이 가능하므로 정렬 알고리즘을 벤치마킹 할 때이 작업 본문이 실제로 유용 할 수 있습니다.


  1. H. Mannila (1985)에 의한 미리 분류 및 최적 정렬 알고리즘의 측정
  2. 대수 조합 구조 : R. Arratia, AD Barbour 및 S. Tavaré의 확률 론적 접근 (2003)
  3. A. Borodin, P. Diaconis 및 J. Fulman (2010) 의 숫자 목록 (및 기타 하나의 종속적 결정 과정 ) 추가
  4. N. Auger 등 의 Ewens와 유사한 분포 및 알고리즘 분석 (2016)

3

시퀀스의 "정렬"에 대한 내 자신의 정의가 있습니다.

어떤 시퀀스 [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 개의 요소를 이동해야합니다. 그리고 순서가 정렬되면 작업이 필요하지 않습니다.

내 정의가 이해되기를 바랍니다.


좋은 생각. Juho의 답변에 언급 된 논문 에서 장애의 세 번째 정의 인 Exc도 비슷한 정의입니다 . Exc는 시퀀스를 정렬 된 순서로 재배 열하는 데 필요한 작업 수입니다.
Apass. 잭

글쎄, 난 그냥 엔트로피와 장애에 대한 나의 이해를 일련의 요소들에 적용했다 :-)
Andrushenko Alexander

-2

빠르고 더러운 무언가가 필요하면 (요약 부호가 무섭다) 무작위로 생성 된 숫자로 채워진 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입니다. 정교하지는 않지만 작동합니다.

남자 이름


이것은 프로그래밍 사이트가 아닙니다. 장애 개념을 정의하고 선형 시간으로 계산할 수 있다고 언급하면 ​​충분했을 것입니다.
Yuval Filmus
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.