มีอัลกอริธึมเชิงเส้นเวลาสำหรับการแบ่งข้อความอย่างสม่ำเสมอในบรรทัดที่มีความกว้างสูงสุด มันใช้ SMAWK (หรือ Knuth & Plass) และ "สม่ำเสมอ" หมายถึง: http://th.wikipedia.org/wiki/Word_wrap#Minimum_raggedness
มีอัลกอริทึมหรือฟังก์ชั่นต้นทุนเว้าสำหรับอัลกอริทึมด้านบนซึ่งจะคำนึงถึงจำนวนบรรทัดที่ฉันต้องการให้แบ่งข้อความแทนความกว้างของบรรทัดสูงสุดหรือไม่ นอกจากนี้ในเวลาเชิงเส้น?
กล่าวอีกนัยหนึ่งฉันกำลังมองหาอัลกอริทึมการแบ่งบรรทัด (หรือการสร้างย่อหน้าหรือการตัดคำ) ซึ่งอินพุตเป็นจำนวนบรรทัดที่ต้องการไม่ใช่ความกว้างของเส้นที่ต้องการ
เพียงเพื่ออธิบายวิธีการที่ใช้ไม่ได้จริง: มีคำ N และช่องว่าง N-1 อยู่ระหว่างแต่ละคำคู่ M คือจำนวนบรรทัดที่ต้องการ (M <= N) หลังจากแต่ละช่องว่างอาจมีการแบ่งบรรทัดมากที่สุด (อาจเป็นศูนย์) ตอนนี้อัลกอริทึมจะพยายามหยุดพักในชุดค่าผสมที่เป็นไปได้แต่ละอันคำนวณ "raggedness" และคืนค่าที่ดีที่สุด ทำอย่างไรให้เร็วขึ้นมาก?
นอกจากนี้ปัญหาดังกล่าวมีชื่อหรือไม่ ปัญหา "ครอบครัว" คืออะไร (เช่น "การจัดเก็บถังขยะ") หากฉันไม่ต้องการโซลูชันที่ดีที่สุดอย่างสมบูรณ์แบบเป็นเครื่องที่ดีมากเป็นไปได้ไหมที่จะสามารถแก้ปัญหาได้เร็วขึ้น? (ฮิวริสติกบางรูปแบบสามารถใช้งานได้ถ้าสำหรับอินพุตที่กำหนดจะมีวิธีแก้ปัญหาย่อยที่ดีที่สุดเสมอ)
ปรับปรุง
จันทรา Chekuri แนะนำร้อง "ปัญหาใน Kleinberg และบท Tardos ในการเขียนโปรแกรมแบบไดนามิก" เป็นการอ่านที่ดี แต่เกี่ยวข้องกับการทำลายเส้นตามความกว้างมากกว่าการนับบรรทัด มันอาจจะปรับให้เข้ากับปัญหานี้ซึ่งเป็นสิ่งที่ฉันพยายามคิดออกตอนนี้ นี่คือลิงค์ที่ดีในการแก้ปัญหาพวกเขาอ้างว่าจะแก้ปัญหาในเวลาเชิงเส้น: http://web.media.mit.edu/~dlanman/courses/cs157/HW5.pdf
นอกจากนี้ยังมีบท "8.5 ปัญหาพาร์ติชัน" ในคู่มือการออกแบบอัลกอริทึมโดย Skiena ซึ่งดูเหมือนว่าจะอยู่ในหัวข้อที่แน่นอนฉันยังคงอ่านมันยาก (น่าเสียดายจากสิ่งที่ฉันเข้าใจว่ามันมีความซับซ้อนเวลากำลังสอง)