Nama masalah penataan ulang / penyortiran ini?


10

Anda diberi larik panjang . Setiap elemen array milik salah satu kelas K. Anda seharusnya mengatur ulang array menggunakan jumlah minimum operasi swap sehingga semua elemen dari kelas yang sama selalu dikelompokkan bersama, yaitu mereka membentuk subarray yang berdekatan. Sebagai contoh: nK
Tiga pengaturan valid lainnya masih ada.

[2,1,3,3,2,2][2,2,2,1,3,3], or[2,1,3,3,2,2][1,2,2,2,3,3], or[2,1,3,3,2,2][3,3,2,2,2,1].

Apa masalah ini disebut dalam literatur? Apakah ada algoritma yang efisien untuk itu?


1
Saya tidak yakin masalah ini memiliki nama, meskipun tentu saja mungkin. Tidak semua masalah yang mungkin terjadi memiliki nama.
Yuval Filmus

2
Dalam praktiknya, ini akan disebut pengelompokan . Saya tidak mengetahui terminologi dalam algoritme klasik. (Ini tentu saja merupakan masalah yang menarik, dan berpotensi sulit! Meminimalkan jumlah swap memiliki perasaan "menemukan permutasi kelompok yang terbaik", yang pada gilirannya terasa NP-keras-ish.)
Raphael

Baiklah teman-teman, terima kasih untuk saat ini. Tentu saja saya tertarik pada solusi untuk masalah ini, tetapi berpikir bahwa itu sudah dipelajari sehingga meminta referensi.
Marko Bukal

Jawaban:


6

Catatan: Ini adalah bukti kekerasan, dan saya pikir ada algoritma praktis seperti pemrograman integer, dll.

Mengingat contoh BIN_PACKING di mana Anda ingin pak nomor n 1 , ... , n K ke L sampah ukuran m 1 , ... , m L , dan dipastikan bahwa Σ n i = Σ m j = N , maka kita bisa merancang contoh masalah Anda sebagai berikut:Kn1,,nKLm1,,mLni=mj=N

  • Ada kelas ;K+(N+1)(L1)
  • Kelas pertama memiliki ukuran n 1 , , n K masing-masing, dan masing-masing kelas lainnya memiliki ukuran N + 1 ;Kn1,,nKN+1
  • Array dipartisi ke dalam slot ukuran: mana setiap slot ukuran ( N + 1 ) 2 dikemas dengan kelas N + 1 , diatur secara berdekatan, dan sisanya diatur secara sewenang-wenang.
    m1,(N+1)2,m2,(N+1)2,m3,,(N+1)2,mL
    (N+1)2N+1

(N+1)2N


Nm1,,mL(N+1)2(N+1)N+1swap sudah, jadi kita tidak bisa), atau "geser" semuanya satu posisi kiri atau kanan (tapi ini memerlukan "geser" masing-masing ...
j_random_hacker

N+1N+1N

1

Saya juga menduga ini NP-hard, tetapi tanpa adanya ide untuk bukti, berikut adalah beberapa batas bawah yang dapat dihitung dengan cepat yang mungkin berguna untuk memeriksa optimalitas solusi heuristik, atau memangkas pencarian cabang-dan-terikat .

iniijLiijinijLiiO(n)O(Kn)

  1. LiK=2K
  2. Li

Dalam contoh Anda, batas-batas ini memberikan 1 (0,5 dapat ditangkap dalam kasus terakhir), yang tentu saja longgar.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.