Memilih titik yang paling tersebar dari satu set poin

15

Apakah ada algoritma (efisien) untuk memilih himpunan bagian dari titik dari satu set titik ( ) sedemikian rupa sehingga mereka "menutupi" sebagian besar wilayah (di atas semua himpunan bagian ukuran )?M.NM<NM.

Saya berasumsi poinnya ada di bidang 2D.

Algoritme naif itu sederhana, tetapi terlalu rumit dalam hal kompleksitas waktu:

for each subset of N points
    sum distance between each pair of points in the subset
    remember subset with the maximum sum

Saya mencari metode yang lebih efisien atau bahkan perkiraan.

Contoh, ini adalah pesawat dengan beberapa titik acak di dalamnya:

masukkan deskripsi gambar di sini

Untuk , saya berharap memilih poin seperti ini:M=5

masukkan deskripsi gambar di sini

Perhatikan titik yang dipilih (merah) tersebar di seluruh pesawat.

Saya menemukan sebuah artikel " PEMILIHAN TIPE YANG DISISFIKASI SECARA EFEKTIF UNTUK PEMASANGAN VISUAL " yang terkait dengan masalah ini. Namun, ini mengasumsikan poin tertimbang.

Libor
sumber
2
Untuk kasus lihat ini dari StackOverflow: Algoritma untuk menemukan titik yang terpisah paling jauh - lebih baik daripada O (n ^ 2)? . M.=2
hardmath
Sayangnya, biasanya sekitar 1500-5000 dan M seperti 10-50. NM.
Libor
Apakah dan N keduanya tetap, atau apakah Anda juga memvariasikan M (misalnya, karena Anda ingin memaksimalkan rata - rata jarak, dalam hal ini peningkatan M selanjutnya dapat menghasilkan penurunan)? M.NM.M.
Wolfgang Bangerth
1
Saya sangat curiga ini NP-hard. Ini sangat mirip dengan masalah klik-berat max di mana bobot tepi antara dua simpul adalah jarak Euclidean di antara mereka. (Saya percaya ada heuristik praktis-efektif yang dikenal untuk max-klik. Saya tidak yakin yang mana mereka.)
tmyklebu
1
@hardmath Maaf itu salah ketik. Saya mencoba menggambarkan apa yang perlu saya capai. Masalahnya berasal dari ekstraksi fitur gambar di mana saya hanya perlu mendapatkan beberapa fitur titik tetapi memiliki mereka tersebar di semua gambar karena mereka digunakan untuk estimasi transformasi dan ketika mereka tersebar secara spasial, estimasi lebih stabil. Mungkin "entropi" adalah ukuran yang lebih baik - saya ingin memilih titik sedemikian rupa sehingga semuanya ada di tempat, seperti gas dalam keadaan entropi maks. Di sisi lain, saya mencoba untuk menghindari titik-titik yang dipilih untuk dikelompokkan. M.
Libor

Jawaban:

11

Berikut ini adalah solusi perkiraan. Karena N sangat besar dan M sangat kecil, bagaimana dengan yang berikut:

  1. Hitung lambung cembung N
  2. Pilih hingga poin M dari lambung yang memenuhi kriteria jarak maksimum Anda.
  3. Jika Langkah 2 membuat Anda kurang dari titik M maka pilih 1 titik dari interior yang memaksimalkan jaraknya dari titik yang dipilih sebelumnya.
  4. Ulangi Langkah 3 hingga jumlah titik yang dipilih adalah M

Intuisi di baliknya adalah bahwa sejak N >> M , dan Anda ingin titik sejauh mungkin dari satu sama lain, mereka mungkin akan mendekati tepi data, jadi Anda mungkin mulai dengan lambung dan kemudian secara iteratif bekerjalah dari sana.

Selain itu, dengan memulai dengan lambung, Anda mengurangi pencarian awal Anda dari N ke N 1/2 .


MEMPERBARUI

Jika langkah 3 dan 4 di atas terlalu lama (karena Anda berulang kali menguji bagian dalam set data Anda), dua gagasan lagi terpikir oleh saya untuk mempercepat masalah Anda.

  1. Pencarian Acak : Katakanlah Anda menemukan poin P pada lambung di Langkah 2. Kemudian secara acak gambar poin M - P dari interior. Pilih set terbaik setelah uji X.
  2. Simulasi Annealing : Hitung kotak ikatan terkecil yang mencakup dataset Anda (tidak harus disejajarkan dengan sumbu, bisa dimiringkan). Kemudian tentukan satu set M titik grid yang terdistribusi secara seragam pada kotak pembatas itu. Catatan, poin-poin ini tidak selalu bertepatan dengan poin dataset Anda. Kemudian untuk setiap titik kisi temukan tetangga k- Nearest di dataset Anda. Jalankan melalui setiap kombinasi M x k dan pilih satu yang memenuhi kriteria jarak maksimum Anda. Dengan kata lain, Anda menggunakan grid awal sebagai bootstrap untuk menemukan solusi awal yang baik .
dpmcmlxxvi
sumber
Terima kasih. Mungkin salah merumuskan pertanyaan. Saya bertujuan untuk menetapkan poin sehingga mereka "menutupi" sebagian besar wilayah. Saya pikir kriteria jarak saja sudah cukup tetapi sepertinya ada sesuatu yang lebih perlu ditambahkan.
Libor
M
1
Mungkin cara yang lebih formal untuk menyatakan masalah Anda adalah Anda menginginkan tessellation dengan ukuran M yang mencakup N dan meminimalkan rata-rata area tessellation? Meminimalkan area segi tampaknya menjadi cara untuk menyebarkan poin di sekitar dan memastikan mereka tidak berkumpul bersama.
dpmcmlxxvi
Iya. Saya ingin menghindari menggunakan kisi karena jika titik dapat secara tidak sengaja mengelompok di sekitar garis kisi dan kemudian mereka akan mengelompok dalam pemilihan.
Libor
Satu masalah dengan algoritma serakah Anda yang Anda sebutkan adalah bahwa itu akan sangat sensitif terhadap titik awal benih. Algoritma penanaman benih (di mana Anda mulai dari dalam-luar) memiliki masalah itu. Pendekatan lambung yang saya sebutkan mungkin akan lebih stabil karena bekerja dari luar ke dalam.
dpmcmlxxvi
6

NM

MM

M1M=3,4,5

M=31M=4M=51

Jika kita ingin menghindari pemilihan titik yang mendominasi di pinggiran, tujuan yang berbeda akan terbukti berguna. Maksimalisasi jarak minimum antar titik adalah kriteria yang demikian. Masalah terkait telah dibahas di StackOverflow , di Computer Science SE , di Math.SE , dan di MathOverflow .

MDMD

hardmath
sumber
1

OK, jadi Anda ingin memilih titik M dari set N poin yang diberikan dalam bidang Euclidean, sehingga jumlah jarak berpasangan dari titik yang dipilih adalah maksimal, benar?

Algoritme pencarian lokal standar cukup cepat dan menawarkan perkiraan yang cukup baik. Runtime adalah linear dalam N dan kuadratik dalam M. Rasio aproksinya adalah 1 - 4 / M Ini berarti bahwa rasio menjadi lebih baik dengan meningkatnya M. Misalnya, untuk M = 10 mendapat 60% nilai optimal, dan untuk M = 50 mendapat 92% nilai optimal.

Algoritma juga berfungsi untuk ruang Euclidean dimensi umum. Dalam hal ini, masalahnya adalah NP-hard. Tapi di pesawat, tidak diketahui apakah NP-hard.

Sumbernya adalah tulisan ini . Semoga ini membantu! Terbaik, Alfonso


Alfonso
sumber
1
Saya sudah menyelesaikan ini dengan menggunakan algoritma "Suppression via Disk Covering" dari makalah "Secara efisien memilih titik kunci yang terdistribusi secara spasial untuk pelacakan visual" Konferensi Internasional IEEE ke-18 2011 tentang Pemrosesan Gambar. IEEE, 2011
Libor
1
Alfonso, mohon jelaskan afiliasi Anda untuk makalah yang disarankan.
nicoguaro
0

Salah satu solusinya adalah:

  • Buat persegi panjang pembatas di HAI(n) waktu

  • Make M artificial even distributed points inside this bounding rectangle, some M are more difficult than others. In your case four in the corners of the rectangle and one in the center

  • Build a KD-Tree of your N input points. O(n(log(n)))

  • Query each of your M points for nearest neighbor in the KD-Tree. O(m(log(n))) time

The whole algorithm should be correct and is bounded to O(n(log(n))). Satu-satunya bagian yang sulit adalah seperti yang dikatakan sebelum distribusi poin M buatan . Saya berasumsi bilangan prima yang lebih besar seharusnya agak sulit. Tapi saya berasumsi ada algoritma yang efisien untuk ini. Ini cukup sepele untukM.N, saat itu hanya grid yang perlu dihasilkan dan poinnya adalah pusat grid.

Jan Hackenberg
sumber