Đếm số lượng tổng từ các phân đoạn liền kề của một mảng


12

Chúng tôi đang đưa ra một mảng với tất cả một [ i ] > 0 .a[1n]a[i]>0

Bây giờ chúng ta cần phải tìm bao nhiêu tiền riêng biệt có thể được hình thành từ subarrays của nó (nơi một mảng con là một phạm vi tiếp giáp của mảng, ví dụ, đối với một số j , k , tổng là tổng của tất cả các các yếu tố của phân khúc). Ví dụ: nếu a = [ 1 , 2 , 1 ] , thì câu trả lời là 4: chúng ta có thể tạo thành 1 , 2 , 3 , 4 .a[jk]j,ka=[1,2,1]1,2,3,4

Tôi biết cách đếm số tiền riêng biệt trong thời gian .O(n2)

Hơn nữa, tôi đã nhận ra điều này tương tự như bài toán cổ điển nơi chúng ta cần tìm số lượng các chuỗi con riêng biệt của một chuỗi. Tôi đã nghĩ đến khả năng xây dựng một mảng hậu tố và giải quyết nó theo cách tương tự (trong thời gian ). Nhưng tôi đã không thể tìm ra cách sửa đổi nó để làm việc ở đây. Ví dụ: nếu chúng ta sử dụng mảng hậu tố cho a = [ 1 , 2 , 1 ], chúng ta sẽ nhận được 5 trường hợp thay vì bốn trường hợp được chấp nhận. Điều này có thể làm điều này bằng cách sử dụng mảng hậu tố hay tôi đang nghĩ sai hướng?O(n)a=[1,2,1]

O(m)


O(n lg n)

Tôi muốn đề nghị bắt đầu với vấn đề sau: thật khó để quyết định liệu có hai khoảng có cùng một tổng không? Thật là hấp dẫn khi chứng minh độ cứng 3SUM của vấn đề này, nhưng cho đến nay tôi vẫn chưa thể làm được.
Yuval Filmus

Câu trả lời:


2

O(n2)Θ(n2)

[1,2,4,8,,2n]n(n+1)2


"Gần như chắc chắn" là do thực tế là vấn đề không yêu cầu các giá trị của tổng như là đầu ra. Tuy nhiên, tôi không nghĩ có thể tránh trùng lặp mà không xác định ít nhất là hầu hết các giá trị.


Tôi thấy không có lý do cụ thể tại sao không nên có cách nào đó để tránh vượt qua tất cả các khả năng trong khi vẫn đưa ra câu trả lời chính xác. Các thuật toán lập trình động làm điều đó thường xuyên.
Yuval Filmus
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.