Cách đo


34

Tôi đang tự hỏi nếu có một cách tiêu chuẩn để đo lường "sự sắp xếp" của một mảng? Một mảng có số lượng đảo ngược trung bình có thể được coi là không được sắp xếp tối đa? Điều đó có nghĩa là về cơ bản, nó càng xa càng tốt để được sắp xếp hoặc sắp xếp ngược lại.

Câu trả lời:


31

Không, nó phụ thuộc vào ứng dụng của bạn. Các biện pháp sắp xếp thường được gọi là các biện pháp rối loạn , là các hàm từ đến , trong đó là tập hợp của tất cả các chuỗi hữu hạn của các số nguyên không âm khác nhau. Khảo sát của Estivill-Castro và Wood [1] liệt kê và thảo luận về 11 biện pháp rối loạn khác nhau trong bối cảnh các thuật toán sắp xếp thích ứng.N<NRN<N

Số lượng đảo ngược có thể hoạt động trong một số trường hợp, nhưng đôi khi không đủ. Một ví dụ được đưa ra trong [1] là chuỗi

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

có số lượng đảo ngược bậc hai, nhưng chỉ bao gồm hai lần tăng dần. Nó gần như được sắp xếp, nhưng điều này không bị bắt bởi các nghịch đảo.


[1] Estivill-Castro, Vladmir và Derick Wood. "Một cuộc khảo sát về các thuật toán sắp xếp thích ứng." Khảo sát tính toán ACM (CSUR) 24.4 (1992): 441-476.


2
Bối cảnh đang cố gắng để hiểu tại sao quicksort thực hiện tương đối kém trên các hoán vị ngẫu nhiên của n phần tử trong đó số lượng đảo ngược gần với trung vị.
Robert S. Barnes

1
Ví dụ tuyệt vời, đó chính xác là thông tin tôi đang tìm kiếm.
Robert S. Barnes

1
Estivill-Castro và Gỗ là THE tài liệu tham khảo cho điều này là chắc chắn.
Pedro Dusso

10

Mannila [1] axiomatizes sự sắp đặt trước (tập trung vào các thuật toán dựa trên so sánh) như sau (diễn giải).

Hãy để một bộ hoàn toàn được đặt hàng. Sau đó, ánh xạ từ (chuỗi các yếu tố riêng biệt từ ) đến tự nhiên là thước đo của sự sắp đặt trước nếu nó thỏa mãn các điều kiện dưới đây.ΣmΣΣ

  1. Nếu được sắp xếp thì .XΣm(X)=0

  2. Nếu với , và cho tất cả , thì .X,YΣX=x1xnY=y1ynxi<xiyi<yji,j[1..n]m(X)=m(Y)

  3. Nếu là một chuỗi con của , thì .XYΣm(X)m(Y)

  4. Nếu cho tất cả và cho một số , thì .xi<yji[1..|X|]j[1..|Y|]X,YΣm(XY)m(X)+m(Y)

  5. X Σ a E Xm(aX)|X|+m(X) cho tất cả và .XΣaEX

Ví dụ về các biện pháp như vậy là

  • số lượng nghịch đảo,
  • số lần hoán đổi,
  • số lượng phần tử không phải là cực đại từ trái sang phải và
  • độ dài của một chuỗi con tăng dài nhất (trừ vào chiều dài đầu vào).

Lưu ý rằng các phân phối ngẫu nhiên sử dụng các biện pháp này đã được xác định, nghĩa là tạo ra các chuỗi được sắp xếp nhiều hơn / ít hơn hoặc ít hơn. Chúng được gọi là các bản phân phối giống như Ewens [2, Ch. 4-5; 3, Ví dụ 12; 4], một trường hợp đặc biệt trong đó là phân phối Mallows . Các trọng số là tham số trong hằng số và hoàn thànhθ>0

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

Lưu ý cách xác định phân phối đồng đều (cho tất cả ).mθ=1m

Vì có thể lấy mẫu hoán vị để viết các biện pháp này một cách hiệu quả, cơ thể công việc này có thể hữu ích trong thực tế khi điểm chuẩn các thuật toán sắp xếp.


  1. Các biện pháp của sự sắp đặt và thuật toán sắp xếp tối ưu của H. Mannila (1985)
  2. Cấu trúc tổ hợp logarit: một cách tiếp cận xác suất của R. Arratia, AD Barbour và S. Tavaré (2003)
  3. Về việc thêm một danh sách các số (và các quá trình xác định một phụ thuộc khác) của A. Borodin, P. Diaconis và J. Fulman (2010)
  4. Phân phối và phân tích thuật toán giống như Ewens của N. Auger et al. (2016)

3

Tôi có định nghĩa riêng về "sự sắp xếp" của một chuỗi.

Cho bất kỳ chuỗi nào [a, b, c, Nhận] chúng tôi so sánh nó với chuỗi được sắp xếp có chứa các phần tử giống nhau, đếm số lượng trùng khớp và chia nó cho số phần tử trong chuỗi.

Ví dụ, trình tự đã cho, [5,1,2,3,4]chúng tôi tiến hành như sau:

1) sắp xếp thứ tự: [1,2,3,4,5]

2) so sánh trình tự được sắp xếp với bản gốc bằng cách di chuyển nó một vị trí tại một thời điểm và đếm số lượng khớp tối đa:

        [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) Số lượng trận đấu tối đa là 4, chúng ta có thể tính "độ sắp xếp" là 4/5 = 0,8.

Sắp xếp thứ tự của một chuỗi được sắp xếp sẽ là 1 và sắp xếp của một chuỗi với các phần tử được đặt theo thứ tự đảo ngược sẽ là 1 / n.

Ý tưởng đằng sau định nghĩa này là ước tính khối lượng công việc tối thiểu chúng ta sẽ cần phải làm để chuyển đổi bất kỳ chuỗi nào thành chuỗi đã sắp xếp. Trong ví dụ trên, chúng ta chỉ cần di chuyển một yếu tố, 5 (có nhiều cách, nhưng di chuyển 5 là hiệu quả nhất). Khi các yếu tố sẽ được đặt theo thứ tự đảo ngược, chúng ta sẽ cần di chuyển 4 yếu tố. Và khi trình tự đã được sắp xếp, không cần làm việc.

Tôi hy vọng định nghĩa của tôi có ý nghĩa.


Ý kiến ​​hay. Một định nghĩa tương tự là Exc, định nghĩa thứ ba về rối loạn trong bài báo được đề cập trong câu trả lời của Juho . Exc là số lượng thao tác cần thiết để sắp xếp lại một chuỗi theo thứ tự được sắp xếp.
Apass.Jack

Chà, có thể, tôi vừa áp dụng sự hiểu biết của mình về entropy và rối loạn vào chuỗi các yếu tố :-)
Andrushenko Alexander

-2

Nếu bạn cần một cái gì đó nhanh và bẩn (dấu hiệu tổng kết làm tôi sợ) Tôi đã viết một hàm rối loạn siêu dễ dàng trong C ++ cho một lớp có tên là Array tạo ra các mảng int chứa đầy các số được tạo ngẫu nhiên:

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;
}

Hàm chỉ đơn giản so sánh giá trị trong mỗi phần tử với chỉ số của phần tử + 1 để một mảng theo thứ tự ngược có giá trị rối loạn là 1 và một mảng được sắp xếp có giá trị rối loạn là 0. Không tinh vi, nhưng hoạt động.

Michael


Đây không phải là một trang web lập trình. Nó sẽ có đủ để xác định khái niệm rối loạn, và đề cập rằng nó có thể được tính toán trong thời gian tuyến tính.
Yuval Filmus
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.