Có một thuật toán thời gian tuyến tính để chia văn bản thành các dòng có chiều rộng tối đa. Nó sử dụng SMAWK (hoặc Knuth & Plass) và "đều" có nghĩa là: http://en.wikipedia.org/wiki/Word_wrap#Minimum_raggedness
Có một thuật toán hoặc hàm chi phí lõm cho thuật toán ở trên có tính đến số lượng dòng tôi muốn văn bản đột nhập, thay vì độ rộng dòng tối đa không? Còn trong thời gian tuyến tính?
Nói cách khác, tôi đang tìm kiếm thuật toán ngắt dòng (hoặc tạo đoạn hoặc gói từ) trong đó đầu vào là số dòng mong muốn, không phải độ rộng dòng mong muốn.
Chỉ để mô tả một cách tiếp cận thực tế không thể sử dụng: Có N từ và khoảng trắng N-1 ở giữa mỗi cặp từ, M là số dòng mong muốn (M <= N). Sau mỗi khoảng trắng, có thể có nhiều nhất một (có thể bằng không) ngắt dòng. Bây giờ, thuật toán sẽ cố gắng đặt các khoảng nghỉ trong mỗi kết hợp có thể, tính toán "độ rách" và trả về kết quả tốt nhất. Làm thế nào để làm điều đó nhanh hơn nhiều?
Ngoài ra, một vấn đề như vậy có một tên? "Gia đình" của vấn đề gì nó thuộc về? (Ví dụ: "đóng gói bin") Nếu tôi không cần giải pháp tối ưu hoàn hảo, chỉ cần một giải pháp rất tốt, liệu có thể giải quyết nhanh hơn nhiều không? (một số dạng heuristic có thể sử dụng được, nếu với một đầu vào nhất định, luôn có cùng một giải pháp, có thể là tối ưu phụ,).
Cập nhật
Chandra Chekuri đề nghị dưới đây "một vấn đề trong chương Kleinberg và Tardos về lập trình động". Đó là một bài đọc tốt nhưng nó liên quan đến việc ngắt dòng dựa trên chiều rộng thay vì đếm dòng. Nó có thể thích ứng với vấn đề này, đây là điều mà tôi đang cố gắng tìm ra bây giờ. Đây là một liên kết tốt đến giải pháp, họ thậm chí còn yêu cầu giải quyết nó trong thời gian tuyến tính: http://web.media.mit.edu/~dlanman/cifts/cs157/HW5.pdf
Ngoài ra, có một chương "8,5 Vấn đề phân vùng" trong Hướng dẫn thiết kế thuật toán của Skiena dường như chính xác về chủ đề, tôi vẫn đang đọc nó, rất khó. (Thật không may, từ những gì tôi hiểu nó có độ phức tạp thời gian bậc hai)