Saya tidak tahu apakah ada algoritma waktu polinomial (rasanya seperti NP-hard), tetapi berikut adalah beberapa pendekatan algoritmik yang masuk akal yang dapat Anda pertimbangkan, jika Anda perlu menyelesaikannya dalam praktik:
Heuristik
Salah satu algoritma yang dieksplorasi dengan baik adalah Furthest Point First (FPF). Pada setiap iterasi, ia memilih titik yang paling jauh dari set poin yang dipilih sejauh ini. Ulangi kali. Karena ini adalah strategi rakus, tidak ada alasan untuk mengharapkan ini untuk memberikan jawaban yang optimal atau bahkan mendekati optimal, dan itu dirancang untuk mengoptimalkan fungsi tujuan yang sedikit berbeda ... tetapi dalam beberapa konteks itu memberikan perkiraan yang masuk akal, jadi ini patut dicoba.k
FPF keluar dari literatur tentang pengelompokan berbasis grafik dan diperkenalkan dalam makalah penelitian berikut:
Teofilo F. Gonzalez. Pengelompokan untuk meminimalkan jarak intercluster maksimum . Ilmu Komputer Teoritis, vol 38, pp.293-306, 1985.
Anda dapat mencoba menjelajahi literatur tentang pengelompokan berbasis grafik untuk melihat apakah ada orang yang telah mempelajari masalah spesifik Anda.
Algoritma yang tepat
Jika Anda memiliki masalah ini dalam praktiknya dan membutuhkan solusi optimal yang tepat, Anda bisa mencoba menyelesaikannya menggunakan pemecah ILP.
Begini caranya. Perkenalkan variabel 0-atau-1 , di mana menunjukkan apakah simpul ke- dipilih, dan variabel 0-atau-1 , dengan makna yang dimaksudkan bahwa hanya jika dan . Sekarang maksimalkan fungsi objektif , tunduk pada batasan dan dan . Sekarang selesaikan ILP ini dengan pemecah ILP yang tidak tersedia. Karena ILP adalah NP-hard, tidak ada jaminan ini akan efisien, tetapi mungkin bekerja pada beberapa contoh masalah.xixiiyi,jyi,j=1xi=1xj=1∑i,jd(i,j)yi,j∑xi≤kxi≥yi,jxj≥yi,j
Pendekatan lain adalah dengan menggunakan MAX-SAT tertimbang . Secara khusus, perkenalkan variabel boolean , di mana benar jika verteks ke- dipilih, dan variabel . Rumusnya adalah , di mana harus benar (klausa-nya memiliki bobot untuk beberapa sangat besar ) dan setiap klausa diberikan berat . Tentukan rumus menjadi benar jika paling banyak dari benar (lihat di sini untuk detail tentang bagaimana melakukan itu) dan jikaxixiiyi,jϕ∧∧i,jyi,jϕWWyi,jd(i,j)ϕkxiyi,j=xi∧xj untuk semua . Sekarang solusi untuk masalah MAX-SAT tertimbang ini adalah solusi untuk masalah asli, jadi Anda bisa mencoba melemparkan pemecah MAX-SAT yang terbobot pada masalahnya. Peringatan yang sama berlaku.i,j