วิธีการวัด“ การเรียงลำดับ”


34

ฉันสงสัยว่ามีวิธีมาตรฐานในการวัด "sortness" ของอาร์เรย์หรือไม่? อาเรย์ที่มีจำนวนค่ามัธยฐานของค่าการรุกรานที่เป็นไปได้จะถือว่าไม่ได้เรียงลำดับสูงสุดหรือไม่ โดยที่ฉันหมายความว่ามันเป็นพื้นเท่าที่จะทำได้จากการเรียงลำดับหรือเรียงกลับกัน

คำตอบ:


31

ไม่ขึ้นอยู่กับใบสมัครของคุณ มาตรการของการเรียงลำดับมักถูกอ้างถึงว่าเป็นมาตรการของความยุ่งเหยิงซึ่งทำหน้าที่ตั้งแต่ถึงRโดยที่N < Nคือชุดของลำดับที่แน่นอนทั้งหมดของจำนวนเต็ม nonnegative ที่แตกต่างกันอย่างชัดเจน การสำรวจโดย Estivill-Castro and Wood [1] รายการและอภิปราย 11 มาตรการที่แตกต่างของความผิดปกติในบริบทของอัลกอริทึมการเรียงลำดับแบบปรับตัวN<NRN<N

จำนวนผู้รุกรานอาจใช้งานได้ในบางกรณี แต่บางครั้งก็ไม่เพียงพอ ตัวอย่างที่ให้ไว้ใน [1] คือลำดับ

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

ที่มีจำนวน inversions เป็นกำลังสอง แต่ประกอบด้วยการวิ่งขึ้นไปสองครั้งเท่านั้น มันเกือบจะถูกจัดเรียงแล้ว แต่สิ่งนี้ไม่ถูกดักจับโดยผู้รุกราน


[1] Estivill-Castro, Vladmir และ Derick Wood "การสำรวจขั้นตอนวิธีการเรียงลำดับแบบปรับตัว" ACM Computing Surveys (CSUR) 24.4 (1992): 441-476


2
บริบทพยายามที่จะเข้าใจว่าเหตุใด quicksort จึงทำงานได้ไม่ดีนักในการเรียงสับเปลี่ยนแบบสุ่มขององค์ประกอบ n ซึ่งจำนวนผู้บุกรุกอยู่ใกล้กับค่ามัธยฐาน
Robert S. Barnes

1
ตัวอย่างที่ดีนั่นคือข้อมูลที่ฉันต้องการ
Robert S. Barnes

1
Estivill คาสโตรและไม้อ้างอิงสำหรับการนี้เพื่อตรวจสอบว่า
Pedro Dusso

10

Mannila [1] axiomatizes presortedness (โดยมุ่งเน้นไปที่อัลกอริธึมที่ใช้การเปรียบเทียบ) ดังนี้ (การถอดความ)

ให้ชุดที่สั่งซื้อทั้งหมด จากนั้นทำแผนที่เมตรจากΣ (ลำดับขององค์ประกอบที่แตกต่างจากΣ ) เพื่อธรรมชาติเป็นตัวชี้วัดของ presortednessถ้ามันตอบสนองด้านล่างเงื่อนไขΣmΣΣ

  1. ถ้าจะเรียงลำดับจากนั้นม. ( X ) = 0XΣm(X)=0

  2. ถ้ากับX = x 1 ... x n , Y = Y 1 ... Y n และx ฉันX,YΣX=x1xnY=y1ynสำหรับทั้งหมด i , j [ 1 .. n ] , จากนั้น m ( X ) = m ( Y )xi<xiyi<yji,j[1..n]m(X)=m(Y) )

  3. ถ้าเป็น subsequence ของY Σ แล้วm ( X ) เมตร( Y )XYΣm(X)m(Y)

  4. ถ้าสำหรับทุกคนที่ฉัน[ 1 .. | | X | ]และj [ 1 .. | Y | ]สำหรับบาง X , Y Σ แล้วม. ( X Y ) เมตร( X ) + M ( Y )xi<yji[1..|X|]j[1..|Y|]X,YΣm(XY)m(X)+m(Y)

  5. สำหรับทุก X Σ และE Xm(aX)|X|+m(X)XΣaEX

ตัวอย่างของมาตรการดังกล่าว ได้แก่

  • จำนวนผู้รุกราน
  • จำนวนการแลกเปลี่ยน
  • จำนวนองค์ประกอบที่ไม่ใช่ค่าสูงสุดจากซ้ายไปขวา
  • ความยาวของลำดับที่เพิ่มขึ้นที่ยาวที่สุด (ลบออกจากความยาวอินพุต)

โปรดทราบว่ามีการกำหนดการแจกแจงแบบสุ่มโดยใช้มาตรการเหล่านี้เช่นทำให้ลำดับที่เรียงมากขึ้นหรือน้อยลงมีโอกาสมากขึ้น สิ่งเหล่านี้เรียกว่าการแจกแจงแบบ Ewens [2, Ch. 4-5; 3 ตัวอย่าง 12; 4], กรณีพิเศษที่เรียกว่าการกระจายมัลโล น้ำหนักเป็นพารามิเตอร์ในค่าคงที่และปฏิบัติตามθ>0

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

สังเกตวิธีที่กำหนดการแจกแจงแบบเดียวกัน (สำหรับmทั้งหมด)θ=1m

เนื่องจากมีความเป็นไปได้ที่จะสุ่มตัวอย่างวิธีการวัดค่าเหล่านี้ได้อย่างมีประสิทธิภาพร่างของงานนี้จึงมีประโยชน์ในทางปฏิบัติเมื่อขั้นตอนวิธีการเรียงลำดับการเปรียบเทียบ


  1. การวัดความเป็นระเบียบและอัลกอริธึมการเรียงลำดับที่เหมาะสมโดย H. Mannila (1985)
  2. โครงสร้าง combinatorial ลอการิทึม: แนวทางที่น่าจะเป็นโดย R. Arratia, AD Barbour และ S. Tavaré (2003)
  3. ในการเพิ่มรายการของตัวเลข (และกระบวนการขึ้นอยู่กับปัจจัยอื่น)โดย A. Borodin, P. Diaconis และ J. Fulman (2010)
  4. การกระจายแบบคล้าย Ewens และการวิเคราะห์อัลกอริทึมโดย N. Auger และคณะ (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 เราสามารถคำนวณ "sortness" เป็น 4/5 = 0.8

ความเรียงของลำดับที่เรียงจะเป็น 1 และความเรียงของลำดับที่มีองค์ประกอบที่อยู่ในลำดับที่กลับกันจะเป็น 1 / n

แนวคิดเบื้องหลังคำจำกัดความนี้คือการประมาณจำนวนงานที่น้อยที่สุดที่เราต้องทำเพื่อแปลงลำดับใด ๆ ให้เป็นลำดับที่เรียงลำดับ ในตัวอย่างด้านบนเราต้องการย้ายเพียงองค์ประกอบเดียว 5 รายการ (มีหลายวิธี แต่การย้าย 5 มีประสิทธิภาพมากที่สุด) เมื่อองค์ประกอบจะถูกวางในลำดับกลับกันเราจะต้องย้ายองค์ประกอบ 4 และเมื่อเรียงลำดับแล้วไม่จำเป็นต้องทำงาน

ฉันหวังว่าคำจำกัดความของฉันเหมาะสม


ความคิดดี. ความหมายคล้ายกันคือ Exc ความหมายที่สามของความผิดปกติในกระดาษที่ระบุไว้ในคำตอบของ Juho Exc คือจำนวนการดำเนินการที่จำเป็นในการจัดเรียงลำดับใหม่ตามลำดับที่เรียง
Apass.Jack

อาจเป็นไปได้ว่าฉันเพิ่งใช้ความเข้าใจเรื่องเอนโทรปีและความยุ่งเหยิงกับลำดับขององค์ประกอบ :-)
Andrushenko Alexander

-2

หากคุณต้องการบางสิ่งที่รวดเร็วและสกปรก (สัญญาณสรุปทำให้ตกใจฉัน) ฉันเขียนฟังก์ชันความผิดปกติแบบง่ายสุดใน C ++ สำหรับ Class ชื่อ Array ซึ่งสร้างอาร์เรย์ int ที่เต็มไปด้วยตัวเลขที่สร้างแบบสุ่ม:

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.