Lý lịch
Tại thời điểm viết bài này, vấn đề P vs NP vẫn chưa được giải quyết, nhưng bạn có thể đã nghe về bài báo mới của Norbert Blum tuyên bố bằng chứng rằng P! = NP, vốn đã bị nghi ngờ là sai (nhưng chúng ta sẽ thấy).
Vấn đề được thảo luận trong bài báo này là vấn đề clique . Ít nhất đó là những gì tôi đọc được trong một bài báo, vì vậy hãy sửa cho tôi nếu tôi sai, nhưng trong mọi trường hợp, tôi muốn bạn viết một chương trình giải quyết các biến thể sau:
Nhiệm vụ
Giả sử chúng ta có một ngôi trường lớn với rất nhiều học sinh. Mỗi học sinh này có một số bạn bè ở trường này. Một nhóm sinh viên là một nhóm chỉ bao gồm các sinh viên là bạn với nhau .
Chương trình của bạn sẽ nhận được các cặp sinh viên là bạn bè làm đầu vào. Từ thông tin này, chương trình phải tìm kích thước của cụm lớn nhất . Học sinh được xác định bởi ID số nguyên .
Nếu bạn thích các thuật ngữ toán học, điều này có nghĩa là bạn đã cung cấp các cạnh của đồ thị không xác định, được xác định bởi hai nút mỗi nút.
Đầu vào
Đầu vào của bạn sẽ là một danh sách không trống các cặp số nguyên dương, vd [[1,2],[2,5],[1,5]]
. Bạn có thể lấy đầu vào này ở bất kỳ dạng hợp lý nào, ví dụ như một mảng các mảng, như các dòng văn bản chứa hai số, mỗi số, v.v ...
Đầu ra
Sản lượng dự kiến là một số duy nhất n >= 2
: kích thước của cụm lớn nhất. Với ví dụ đầu vào ở trên, kết quả sẽ là 3
, như tất cả học sinh ( 1
, 2
và 5
) là bạn bè với nhau.
Các trường hợp thử nghiệm
[[1,2]]
=> 2
[[1,2],[3,1],[3,4]]
=> 2
[[1,2],[2,5],[1,5]]
=> 3
[[2,5],[2,3],[4,17],[1,3],[7,13],[5,3],[4,3],[4,1],[1,5],[5,4]]
=> 4 (the largest clique is [1,3,4,5])
[[15,1073],[23,764],[23,1073],[12,47],[47,15],[1073,764]]
=> 3 (the largest clique is [23,764,1073])
[[1296,316],[1650,316],[1296,1650],[1296,52],[1650,711],[711,316],[1650,52],
[52,711],[1296,711],[52,316],[52,1565],[1565,1296],[1565,316],[1650,1565],
[1296,138],[1565,138],[1565,711],[138,1650],[711,138],[138,144],[144,1860],
[1296,1860],[1860,52],[711,1639]]
=> 6 (the largest clique is [52,316,711,1296,1565,1650])
Bạn có thể sử dụng triển khai tham chiếu (ngu ngốc) này (in đầu ra thêm bằng -d
cờ) để xác minh kết quả của các trường hợp thử nghiệm khác.
Những quy định
- Chương trình của bạn không cần một kết quả được xác định trên đầu vào không hợp lệ. Vì vậy, bạn có thể giả định rằng:
- bạn sẽ luôn nhận được ít nhất một cặp ID
- mỗi cặp bao gồm hai ID khác nhau
- không có cặp nào xuất hiện hai lần (hoán đổi vị trí của các ID sẽ vẫn là một cặp)
- Thuật toán của bạn không được phép đặt giới hạn trên cho kích thước đầu vào. Tất nhiên các giới hạn và giới hạn kỹ thuật được thiết lập bởi ngôn ngữ / môi trường của bạn (như kích thước ngăn xếp, thời gian tính toán, v.v.) tất nhiên là không thể tránh khỏi.
- Sơ hở tiêu chuẩn bị cấm.
- Đây là mã golf , vì vậy mã ngắn nhất, được đo bằng byte, sẽ thắng.
- Nếu thuật toán của bạn có độ phức tạp thời gian đa thức, bạn sẽ ghi điểm
-1
ngay lập tức bất kể kích thước mã của bạn, nhưng trong trường hợp đó, bạn có thể muốn gửi giải pháp của mình ở một nơi khác. ;)
-1
là tốt xứng đáng ;)