Dalam artikel terakhir, kami berkenalan
dengan jenis relik penggabungan (menyebabkan kepentingan sejarah utama). Apa tren hari ini?
Untuk membiasakan diri dengan konsep pemesanan melalui merger, biasanya digunakan algoritma gabungan seimbang. Istilah "keseimbangan" berarti bahwa algoritma secara rekursif membagi array dan sub-arraynya menjadi bagian yang kira-kira sama. Hari ini kita melihat bagaimana tampilannya dalam praktik.
Sepasang fungsi adalah sama untuk kedua metode. Ngomong-ngomong, "down-up" itu, "up-down" itu adalah algoritma yang hampir sama, hanya ditunjukkan dari sudut yang berbeda.
Kita perlu, pada kenyataannya, penggabungan dua bagian segmen menjadi satu subarray. Bagian dibagi secara bersamaan dalam satu array, elemen saat ini di kedua iterasi dibandingkan dan elemen yang lebih kecil masuk ke array kedua:
Menyalin segmen dari satu array ke array lainnya. Kedua implementasi beroperasi pada dua array, data harus terus didorong dari main ke auxiliary dan sebaliknya:
Merger secara seimbang
Pertama, seluruh array diambil, setelah itu mulailah rekursif. Array didikotomikan sampai kita mencapai subarrays dari satu elemen (yang diurutkan sendiri). Kemudian rekursi memulai kenaikan terbalik, menggabungkan subarrays sepanjang jalan (ukurannya dua kali lipat pada setiap tingkat).
Merger Ke Atas yang Seimbang
Di sini iterasi atas array berlangsung, di sepanjang jalan pertama kita mengambil array minimal tetangga (dari satu elemen) dan menggabungkannya berpasangan. Setelah menggandakan subarrays yang diurutkan pada setiap langkah, kami menggabungkan tetangga lagi dan melanjutkan sampai kami mendapatkan seluruh array dalam bentuk diurutkan pada output.
Secara umum, implementasi top-down lebih disukai, karena menggunakan dua array lebih efisien, yang hanya terus-menerus mengubah peran "main / auxiliary". Dalam versi hulu, array A selalu primer, dan array B selalu tambahan. Akibatnya, setelah setiap iterasi, data dari B harus dikembalikan sepenuhnya ke A, yang tidak berkontribusi pada peningkatan kompleksitas algoritmik. Di sisi lain, implementasi ascendant lebih sederhana, bahkan tidak memiliki rekursi.
Merger yang tidak seimbang
Dari kata "keseimbangan" itu sendiri ia menghancurkan semacam keandalan, stabilitas. Anda bahkan mungkin mendapat kesan bahwa algoritma yang baik harus seimbang. Dan "ketidakseimbangan" dikaitkan dengan semacam kegoyahan dan distorsi. Well, sungguh, bukankah seharusnya yang
seimbang lebih baik dalam semua hal daripada yang
tidak seimbang ?
Faktanya, ini lebih buruk. Tentu saja, membagi subarrays menjadi bagian yang sama (yang dimaksud dengan keseimbangan untuk jenis penggabungan) jauh lebih mudah untuk diterapkan. Bagi diri Anda sendiri array menjadi dua dan terapkan rekursi untuk masing-masing setengah. Sebenarnya, kemudahan ini adalah keuntungan utama dari merger yang seimbang sebelum yang tidak seimbang.
Dalam publikasi berikut, kita akan melihat metode yang tidak seimbang. Mereka terasa lebih sulit untuk dipahami dan diimplementasikan. Data untuk penggabungan selanjutnya tidak akan didistribusikan secara merata dan merata di seluruh array bantu, tetapi sesuai dengan sejumlah angka Fibonacci umum. Dan ini akan memungkinkan Anda untuk mencapai hasil yang kuat yang tidak dapat dicapai untuk metode seimbang yang disederhanakan.
Referensi
Gabung (
Google-terjemahkan ),
GabungArtikel Seri:
Penyortiran gabungan berikutnya sekarang tersedia di aplikasi AlgoLab (bagi mereka yang mempelajari algoritma menggunakan aplikasi Excel ini, perbarui file).
Array terbatas sementara - ukurannya harus dua kali lipat (karena beberapa kesulitan yang dihadapi saat pemrograman visualisasi). Beberapa saat kemudian akan dimungkinkan untuk mengurutkan array apa pun.

Artikel ini ditulis dengan dukungan Perangkat Lunak EDISON, sebuah perusahaan yang menggunakan layanan cloud untuk membuat perangkat lunak tertanam dan mengembangkan aplikasi seluler di JAVA .