Tôi đang tìm một thuật toán để phân đoạn chuỗi số dương thành n chuỗi, chẳng hạn rằng độ lệch chuẩn của tổng các số trong mỗi tập con được giảm thiểu.Thuật toán nào sử dụng để phân đoạn chuỗi số thành n tập con, để giảm thiểu độ lệch chuẩn của tổng số trong mỗi tập hợp con
Trật tự của các số trong mỗi dãy con cần phải được giống như thứ tự trong chuỗi gốc
Ví dụ:
Giả sử tôi có một dãy {1,1,1,1,1 , 1,10,1} mà tôi muốn phân đoạn thành 2 chuỗi.
Tôi tin rằng giải pháp tối ưu sẽ là {1,1,1,1,1,1}, {10,1}.
Tổng số lần thứ 1 là 6, tổng của hậu tố thứ 2 là 11
Độ lệch chuẩn của hai số là ~ 3,5, mà tôi tin là thấp nhất có thể.
Giả sử tôi có một chuỗi {4,1,1,1,1,6} mà tôi muốn phân đoạn thành 3 chuỗi.
Tôi tin rằng giải pháp tối ưu sẽ là {4}, {1,1,1,1}, {6}
Tổng số các dãy là 4, 4 và 6.
Độ lệch chuẩn của 3 số là ~ 1.15, mà tôi tin là thấp nhất có thể.
Thuật toán tốt nhất tôi có thể tìm ra là tìm tổng tích lũy của mỗi số trong chuỗi và phân đoạn chuỗi tại mỗi khoảng [totalSum/numSubsequences]. Ví dụ, với chuỗi {4,1,1,1,1,6}, tổng tích lũy của các số của mỗi chuỗi là {4,5,6,7,8,14}. Tổng số của tất cả các số trong dãy là 14, vì vậy, cho rằng tôi muốn 3 subsequences, tôi nên phân đoạn trình tự khi tổng số đạt 14/3 = 4.66 và 2 * 14/3 = 9.333333.
Tuy nhiên, không có vị trí thực tế trong chuỗi nơi tổng tích lũy bằng 4.66 - tổng tích lũy đầu tiên là 4 và tổng tích lũy tiếp theo là 5. Vì vậy, tôi nên làm tròn hoặc tôi nên làm tròn? Trong trường hợp này, làm tròn xuống đến 4 cho giải pháp tối ưu, nhưng đó không phải lúc nào cũng như vậy. Điều tốt nhất tôi có thể nghĩ đến là thử mọi kết hợp làm tròn lên và xuống, nhưng điều đó dẫn đến sự phức tạp của O (2^numSubsequences).
Điều này có vẻ là loại điều sẽ có một thuật toán từ trước để áp dụng, tuy nhiên Googling của tôi đã không thành công với tôi. Tôi biết về số Partition Problem, NP-complete, nhưng giao dịch với các bộ không theo thứ tự và không phải là chuỗi được sắp xếp.
Mọi trợ giúp sẽ được đánh giá cao.
Còn khoảng {1,1,1,1,1,1,1,10,2} thì sao? Bạn có thể phân vùng nó trong {1,1,1,1,1,1,1,2} và {10} và nhận được độ lệch chuẩn thấp hơn không? Bạn đã không chỉ định thứ tự của các dãy, hoặc nếu nó quan trọng. – florin
Có, đặt hàng phải được bảo quản. Các dãy số cần phải được sắp xếp sao cho khi được nối với nhau, chúng bằng với trình tự ban đầu. Vì vậy, ví dụ của bạn sẽ không hoạt động, bởi vì bạn không thể nối các chuỗi lại với nhau để tạo thành chuỗi ban đầu. Một cách khác để nghĩ về nó là tìm n-1 'splitpoints' trong chuỗi ban đầu. – kwyjibo
Trình tự bao lâu? – EvilTeach