Làm thế nào để bạn phân vùng một mảng thành 2 phần sao cho hai phần có giá trị trung bình bằng nhau? Mỗi phân vùng có thể chứa các phần tử không tiếp giáp trong mảng. Thuật toán duy nhất tôi có thể nghĩ đến là theo cấp số nhân chúng ta có thể làm tốt hơn không?Làm thế nào để bạn phân vùng một mảng thành 2 phần sao cho hai phần có giá trị trung bình bằng nhau?
Làm thế nào để bạn phân vùng một mảng thành 2 phần sao cho hai phần có giá trị trung bình bằng nhau?
Trả lời
Bạn có thể giảm sự cố này xuống sum-subset problem - cũng cached here. Đây là ý tưởng.
Cho phép A
là mảng. Tính theo số S = A[0] + ... + A[N-1]
, trong đó N
có độ dài là A
. Đối với k
từ 1
đến N-1
, hãy để T_k = S * k/N
. Nếu T_k
là một số nguyên, sau đó tìm một tập con của A
có kích thước k
có tổng cộng là T_k
. Nếu bạn có thể làm điều này, sau đó bạn đã hoàn tất. Nếu bạn không thể làm điều này cho bất kỳ k
, thì không có phân vùng như vậy tồn tại.
Đây là toán học đằng sau phương pháp này. Giả sử có một phân vùng là A
sao cho hai phần có cùng mức trung bình, cho biết X
của kích thước x
và Y
có kích thước y
là các phân vùng, trong đó x+y = N
. Sau đó, bạn phải có
sum(X)/x = sum(Y)/y = (sum(A)-sum(X))/(N-x)
do đó, một chút đại số cho
sum(X) = sum(A) * x/N
Kể từ mảng chứa số nguyên, phía bên tay trái là một số nguyên, vì vậy phía bên tay phải phải là tốt. Điều này thúc đẩy ràng buộc rằng T_k = S * k/N
phải là một số nguyên. Phần còn lại duy nhất là nhận ra T_k
là tổng của một tập con có kích thước k
.
sau một chút suy nghĩ tôi vẫn không thấy cách chứng minh của bạn làm giảm tập hợp con cho vấn đề của OP. – soulcheck
ý tôi là, bạn đã chứng minh một cách tinh vi rằng có câu trả lời cho tập hợp con một có thể trả lời vấn đề của OP, không phải là cách khác. – soulcheck
@soulcheck Tôi vẫn đang cân nhắc xem chúng có thực sự tương đương hay không. Tôi tin rằng câu trả lời đi xuống [câu hỏi này tôi vừa hỏi] (http://stackoverflow.com/questions/8916539/sum-subset-with-a-fixed-subset-size). – PengOne
- 1. Tìm giá trị trung bình của mảng chưa phân loại
- 2. Làm cách nào để bạn đặt giá trị của một mảng thành các giá trị của mảng khác trong Java?
- 3. Làm thế nào để tách một NSArray thành hai phần bằng nhau?
- 4. Chèn phần tử giá trị bằng nhau
- 5. trung bình qua khó khăn để xác định phân vùng
- 6. JS tính trung bình của các phần tử giống nhau trong mảng 2d
- 7. Làm thế nào để xác định một giá trị tốt cho - tải trung bình bằng cách sử dụng gnu Make?
- 8. Tạo thành phần sao chép các giá trị trường từ một thành phần khác
- 9. thay zero trong mảng NumPy với giá trị trung bình
- 10. Tìm giá trị trung bình của một mảng?
- 11. làm thế nào để phân chia danh sách thành n phần bằng nhau, trăn
- 12. Tính trung bình trên mọi phần tử n của một mảng có nhiều mảng
- 13. Phân tích địa chỉ email đồng bằng thành 2 phần
- 14. Làm thế nào để tách (chunk) một mảng Ruby thành các phần của phần tử X?
- 15. SQLite - cách lấy giá trị trung bình?
- 16. iOS Objective-C Làm thế nào để có được 2 giá trị phẩy tròn thập phân?
- 17. BeautifulSoup: Làm cách nào để thay thế giá trị trong phần tử có thẻ phần tử?
- 18. ExtJS - Làm thế nào để có được giá trị mục thành phần
- 19. Làm thế nào để tìm thấy một ngày trung bình/giờ trong mảng của DateTime giá trị
- 20. Trong một dự án phần mềm, làm thế nào bạn sẽ phân biệt một Thành phần từ một Mô-đun?
- 21. Làm cách nào để tính giá trị trung bình trong các đối tượng nằm trong một mảng?
- 22. xóa MỘT phần tử mảng theo giá trị trong ruby
- 23. Làm thế nào tôi có thể chia chuỗi bằng dấu phân tách thành một mảng?
- 24. Làm thế nào để bạn ánh xạ giá trị thay thế chuỗi regex ($ 1, $ 2 vv) thành một băm?
- 25. Cách làm tròn tất cả các giá trị trong một mảng thành 2 dấu thập phân
- 26. Tìm giá trị tối thiểu, tối đa và trung bình cho các danh sách lồng nhau?
- 27. Mã Perl này chọn hai phần tử khác nhau từ một mảng như thế nào?
- 28. vùng Fill giữa hai thành phần kết nối trong MATLAB
- 29. Làm cách nào để bạn đặt giá trị kép thành "không có giá trị"
- 30. Làm thế nào để bạn gán giá trị cho các phần tử cấu trúc trong một Danh sách trong VB.NET?
Hãy trung thực, đây có phải là câu hỏi về bài tập về nhà không? –
Bạn đã thử những gì? Nó có hoạt động không? Bạn đã có một số trường hợp thử nghiệm với ví dụ đầu vào và đầu ra? –
điều này nghe có vẻ giống như một câu hỏi phỏng vấn, không phải là một câu hỏi dễ dàng tại đó – BrokenGlass