Apa artinya algoritma pengurutan menjadi "stabil"?

43

Dalam membaca tentang berbagai algoritma penyortiran, saya pernah melihatnya menyebutkan bahwa ada yang "stabil" dan ada yang tidak. Apa artinya itu, dan pengorbanan apa yang terlibat atas dasar itu ketika memilih suatu algoritma?

Daenyth
sumber
32
Pertanyaan ini akan mudah dijawab dalam satu menit dengan wikipedia. en.wikipedia.org/wiki/Sorting_algorithm
Mare Infinitus
5
@MareInfinitus Lebih tepatnya: en.wikipedia.org/wiki/Sorting_algorithm#Stability
BЈовић
4
Ini adalah pertanyaan yang kurang memiliki riset sendiri. Dijawab dengan gambar wikipedia. Dan mendapat umpan balik yang sangat bagus, yang entah bagaimana membuat saya sedih. IMHO itu harus ditutup, dan tidak mendapatkan upvotes.
Mare Infinitus
4
Di sisi lain, saya hanya melihat ini dan belajar sesuatu yang baru. Jika saya tahu bahwa saya tidak tahu ini maka saya bisa meneliti tetapi karena OP mengajukan pertanyaan, saya sekarang tahu apa yang saya tidak tahu bahwa saya tidak tahu.
Kazark
4
Secara umum, "hanya google it" atau "mencarinya di wikipedia" bukanlah respons yang dapat diterima pada situs StackExchange. Karena mereka tidak memberikan jawaban atas apa yang dipastikan oleh pihak yang mengajukan keluhan sebagai pertanyaan yang valid dengan panggilan ke otoritas google dan wikipedia. JIKA pertanyaan dengan mudah merupakan duplikat dari pertanyaan atau pertanyaan lain dalam programer.stackexchange, maka Anda dapat mengeluh.
Michael Paulukonis

Jawaban:

88

Sortir stabil adalah yang mempertahankan urutan asli set input, di mana algoritma perbandingan tidak membedakan antara dua item atau lebih.

Pertimbangkan algoritma pengurutan yang mengurutkan kartu berdasarkan peringkat , tetapi tidak sesuai. Jenis stabil akan menjamin bahwa urutan kartu asli dengan peringkat yang sama dipertahankan; jenis yang tidak stabil tidak akan.

masukkan deskripsi gambar di sini

Robert Harvey
sumber
38
Koreksi: Algoritme yang tidak stabil menunjukkan perilaku yang tidak terdefinisi ketika dua elemen sama, sangat mungkin urutannya terkadang dipertahankan.
aaaaaaaaaaaa
9
Gambar yang bagus, sangat mirip dengan wikipedia en.wikipedia.org/wiki/Sorting_algorithm
Mare Infinitus
9
@MareInfinitus: Ada dalam domain publik. Periksa atribusi pada gambar asli.
Robert Harvey
2
Gambaran yang baik menjelaskan lebih cepat dan lebih dalam daripada banyak kata pada kasus rata-rata. Masalah hukum bukan yang ingin saya bicarakan.
Mare Infinitus
3
@ RobertTarvey Sebenarnya, saya yakin editornya benar. Posting Anda saat ini mengatakan bahwa jenis yang stabil menjaga pemesanan kartu dalam jenis yang sama, tetapi kartu dengan jenis yang sama akan memiliki peringkat yang berbeda dan dengan demikian harus disusun ulang untuk mencapai urutan kartu. Misalnya jenis tidak menjaga urutan 2 dan 5 hati. Ini adalah urutan kartu dengan peringkat yang sama (dan jenis kartu yang berbeda) yang membuat perbedaan antara stabil dan tidak stabil.
David Z
26

Algoritme yang stabil menjaga urutan relatif elemen.

Jadi algoritma penyortiran yang stabil akan mempertahankan urutan nilai relatif yang membandingkan sebagai sama.

Pertimbangkan algoritma pengurutan tempat kami mengurutkan koleksi titik 2d berdasarkan dimensi X-nya.

Koleksi yang akan disortir: {(6, 3), (5, 5), (6, 1), (1, 3)}

Diurutkan Stabil: {(1, 3), (5, 5), (6, 3), (6, 1)}

Sortir Biasa: Salah satu {(1, 3), (5, 5), (6, 3), (6, 1)}, atau{(1, 3), (5, 5), (6, 1), (6, 3)}


Adapun tradeoff ... well, sortasi stabil kurang efisien, tetapi kadang-kadang Anda membutuhkannya.

Misalnya ketika pengguna mengklik tajuk kolom untuk mengurutkan nilai di UI, masuk akal untuk mengharapkan urutan penyortiran sebelumnya digunakan dalam kasus nilai yang sama.

QuestionC
sumber
2
Apakah ini kurang efisien? Tampaknya "jelas", tetapi beberapa algoritma pemilahan terbaik stabil secara alami (mis. Apa pun berdasarkan jenis gabungan, seperti Tim sort), mereka tidak perlu melakukan pekerjaan ekstra eksplisit untuk menjadi stabil.
9
Stabil tidak ada hubungannya dengan kinerja secara umum. Mergesort berjalan dalam O (n * log n) dan stabil. Heapsort memiliki kinerja yang serupa, tetapi tidak stabil.
Mare Infinitus
2
"Stabil" juga dapat berlaku untuk struktur data, misalnya. "tumpukan stabil" adalah tumpukan yang mengeluarkan barang-barang yang memiliki prioritas yang sama dalam urutan yang sama ketika mereka antri. Ini sangat penting untuk algoritma pencarian jalur yang efisien.
BlueRaja - Danny Pflughoeft
1
Tidak ada jenis stabil yang merupakan perbandingan O (n ln n) dan juga O (1) pada memori. Kecepatan bukan satu-satunya ukuran efisiensi. Fakta bahwa Anda tidak bisa stabil memilah masalah di tempat.
QuestionC
3
@QuestionC Tampaknya blok sortir stabil dan sesuai dengan batasan tersebut.