ตัดแบ่งชุดของคะแนนเป็นชุดย่อยที่เหมาะสมที่สุดสองชุด


9

ฉันต้องการแบ่งชุดของคะแนนออกเป็นชุดย่อยที่มีขนาดเท่ากันสองชุดเพื่อให้ผลรวมภายในกำลังสองของกลุ่มน้อยที่สุด เราสามารถสรุปได้ว่าจุดต่าง ๆ นั้นอยู่ในพื้นที่สองมิติแบบยุคลิด ฉันหวังว่าจะได้สิ่งที่เร็วกว่าอัลกอริทึมการจัดกลุ่ม k-mean แบบทั่วไปโดยให้ k = d = 2 ทุกคนสามารถชี้นำฉันไปในทิศทางของอัลกอริทึมที่ดีสำหรับเรื่องนี้?

ทางออกที่แน่นอนไม่จำเป็นถ้าเรามีการประมาณที่ดี

ขอบคุณ!

คำตอบ:


10

หากคุณยืนยันในพาร์ติชันที่แม่นยำคุณจะต้องคำนวณพาร์ทิชันที่สมดุลทั้งหมดของชุดของจุดในระนาบด้วยเส้น (พาร์ติชันที่เหมาะสมที่สุดคือพาร์ติชัน Voronoi ดังนั้นชุดจุดสองจุดจะถูกคั่นด้วยเส้น) พาร์ติชั่นดังกล่าวเรียกว่าk-sets อัลกอริทึมที่เร็วที่สุดที่รู้จักในปัจจุบันสำหรับงานนี้O(n4/3logn) สำหรับการคำนวณพาร์ติชั่นเหล่านี้ใน dual [ie, the k- ระดับของชุด n เส้นสำหรับ k=n/2] เมื่อคุณมีพาร์ติชั่นที่เป็นไปได้ทั้งหมดคุณเพียงแค่ต้องตรวจสอบพาร์ติชั่นแต่ละอัน ใช้เทคนิคมาตรฐานซึ่งสามารถทำได้ในเวลาคงที่สำหรับแต่ละพาร์ติชัน

(อัปเดต: การพิสูจน์ว่าพาร์ติชันที่เหมาะสมเป็นที่รับรู้โดย k- ชุดสำหรับ k=n/2ไม่ใช่เรื่องไร้สาระอย่างสมบูรณ์ ฉันจะปล่อยให้มันเป็นแบบฝึกหัดที่น่ารักสำหรับผู้อ่านที่สนใจ คำแนะนำ: พิจารณาเส้นที่ผ่านศูนย์กลางที่ดีที่สุดสองแห่งและทิศทางที่ตั้งฉากกับมัน)

หากคุณไม่สนใจคำตอบที่ถูกต้องวิธีการที่ง่ายกว่าก็คือการใช้ Coreset kหมายถึงการจัดกลุ่ม ซึ่งจะส่งผลให้O(ϵ2logn) คะแนนถ่วงน้ำหนักในกรณีนี้ด้วยน้ำหนักรวม n. จากนั้นคุณเพียงแค่ต้องแก้ปัญหาในชุดจุดถ่วงน้ำหนัก ทางออกที่ง่ายที่สุดคือการสร้างสถานที่ตั้งของผู้สมัครสำหรับศูนย์และลองทุกคู่ในจุดถ่วงน้ำหนัก การสร้างแกนและการสร้างศูนย์ผู้สมัครได้อธิบายไว้ในบทความนี้:

http://sarielhp.org/p/03/kcoreset/

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.