Jawabannya tergantung pada konteks : jika Anda akan menyelidiki hanya sejumlah kecil (dibatasi) segmen, Anda mungkin dapat membeli solusi yang mahal secara komputasi. Namun, sepertinya Anda ingin menggabungkan perhitungan ini dalam beberapa jenis pencarian untuk mendapatkan label yang bagus. Jika demikian, akan sangat menguntungkan untuk memiliki solusi yang cepat secara komputasi atau memungkinkan pembaruan cepat dari solusi ketika segmen garis kandidat sedikit bervariasi.
Misalnya, Anda berniat melakukan pencarian sistematismelintasi seluruh komponen yang terhubung dari sebuah kontur, direpresentasikan sebagai urutan titik P (0), P (1), ..., P (n). Ini akan dilakukan dengan menginisialisasi satu pointer (indeks ke dalam urutan) s = 0 ("s" untuk "mulai") dan pointer lain f (untuk "selesai") menjadi indeks terkecil untuk jarak mana (P (f), P (s))> = 100, dan kemudian memajukan s selama jarak (P (f), P (s + 1))> = 100. Ini menghasilkan kandidat polyline (P (s), P (s + 1) ..., P (f-1), P (f)) untuk evaluasi. Setelah mengevaluasi "kebugaran" -nya untuk mendukung label, Anda kemudian akan menambah s dengan 1 (s = s + 1) dan melanjutkan untuk meningkatkan f ke (katakanlah) f 'dan s ke s' sampai sekali lagi calon polyline melebihi batas minimum rentang 100 diproduksi, diwakili sebagai (P (s '), ... P (f), P (f + 1), ..., P (f')). Dengan demikian, simpul P ... s (P ' Sangat diinginkan bahwa kebugaran dapat dengan cepat diperbarui dari pengetahuan hanya simpul terjatuh dan ditambahkan. (Prosedur pemindaian ini akan dilanjutkan sampai s = n; seperti biasa, f harus diizinkan untuk "membungkus" dari n kembali ke 0 dalam proses.)
Pertimbangan ini mengesampingkan banyak kemungkinan ukuran kebugaran ( sinuositas , tortuositas , dll.) Yang mungkin menarik. Ini mengarahkan kita untuk mendukung langkah-langkah berbasis L2 , karena mereka biasanya dapat diperbarui dengan cepat ketika data yang mendasarinya sedikit berubah. Mengambil analogi dengan Analisis Komponen Utama menunjukkan bahwa kami memiliki ukuran berikut (di mana yang kecil lebih baik, seperti yang diminta): gunakan yang lebih kecil dari dua nilai eigen dari matriks kovariansdari titik koordinat. Secara geometris, ini adalah salah satu ukuran deviasi "dari" sisi-ke-sisi dari simpul-simpul dalam bagian kandidat dari polyline. (Salah satu interpretasi adalah bahwa akar kuadratnya adalah semi-sumbu yang lebih kecil dari elips yang mewakili momen kedua inersia dari simpul-simpul polyline.) Itu akan sama dengan nol hanya untuk set simpul collinear; jika tidak, itu melebihi nol. Ini mengukur rata-rata penyimpangan sisi-ke-sisi relatif terhadap garis dasar 100 piksel yang dibuat pada awal dan akhir polyline, dan karenanya memiliki interpretasi sederhana.
Karena matriks kovarians hanya 2 per 2, nilai eigen dengan cepat ditemukan dengan menyelesaikan persamaan kuadrat tunggal. Selain itu, matriks kovarians adalah jumlah kontribusi dari masing-masing simpul dalam polyline. Dengan demikian, ia diperbarui dengan cepat ketika titik-titik dikeluarkan atau ditambahkan, yang mengarah ke algoritma O (n) untuk kontur titik-n: ini akan berskala baik ke kontur yang sangat rinci yang dibayangkan dalam aplikasi.
Berikut adalah contoh hasil dari algoritma ini. Titik-titik hitam adalah simpul kontur. Garis merah solid adalah segmen polyline kandidat terbaik dengan panjang ujung ke ujung lebih besar dari 100 dalam kontur itu. (Calon yang jelas secara visual di kanan atas tidak cukup lama.)