Bài tập
Đưa ra một ma trận Boolean, tìm một (hoặc tùy chọn nhiều hơn) tập hợp con của các hàng có chính xác một True trong mỗi cột. Bạn có thể sử dụng bất kỳ thuật toán nào , nhưng phải hỗ trợ các ma trận rất lớn, như ví dụ trước.
Một thuật toán có thể (Thuật toán Knuth X )
Mặc dù không có yêu cầu sử dụng thuật toán này, nó có thể là lựa chọn tốt nhất của bạn.
- Nếu ma trận A không có cột, giải pháp một phần hiện tại là một giải pháp hợp lệ; chấm dứt thành công.
- Nếu không thì chọn một cột c .
- Chọn * một hàng r sao cho A r , c = 1.
- Bao gồm hàng r trong giải pháp một phần.
- Đối với mỗi cột j mà A r , j = 1,
cho mỗi hàng i như rằng A i , j = 1,
xóa hàng i từ ma trận A .
cột xóa j từ ma trận A . - Lặp lại thuật toán này một cách đệ quy trên ma trận giảm Một .
* Bước 3 là không xác định và cần phải quay lại trong trường hợp không tìm thấy một hàng trong lệnh gọi sau của bước 3.
Đầu vào
Bất kỳ đại diện mong muốn nào của ma trận 2 × 2 tối thiểu A , ví dụ như là một mảng số hoặc Boolean
1 0 0 1 0 0 1
1 0 0 1 0 0 0
0 0 0 1 1 0 1
0 0 1 0 1 1 0
0 1 1 0 0 1 1
0 1 0 0 0 0 1
hoặc như bộ sưu tập Universe + Set
U = {1, 2, 3, 4, 5, 6, 7}
S = {
A = [1, 4, 7],
B = [1, 4],
C = [4, 5, 7],
D = [3, 5, 6],
E = [2, 3, 6, 7],
F = [2, 7]
}
hoặc là 0 hoặc 1 bộ được lập chỉ mục;
{{1, 4, 7}, {1, 4}, {4, 5, 7}, {3, 5, 6}, {2, 3, 6, 7}, {2, 7}}
.
Đầu ra
Bất kỳ đại diện mong muốn nào của một (hoặc tùy chọn nhiều hơn / tất cả) các giải pháp, ví dụ như mảng số hoặc Boolean của các hàng đã chọn
1 0 0 1 0 0 0
0 0 1 0 1 1 0
0 1 0 0 0 0 1
hoặc dưới dạng danh sách Boolean cho biết các hàng đã chọn {0, 1, 0, 1, 0, 1}
hoặc dưới dạng danh sách số (0 hoặc 1 được lập chỉ mục) của các hàng được chọn {2, 4, 6}
hoặc dưới dạng danh sách tên đã đặt ['B', 'D', 'F']
.
Thêm ví dụ
Trong:
1 0 1
0 1 1
0 1 0
1 1 1
Out: 1 3
hay 4
hay 1 0 1 0
hay 0 0 0 1
hay [[1,3],[4]
, vv
Trong:
1 0 1 0 1
0 1 0 1 0
1 1 0 0 1
0 1 0 1 1
Out: 1 1 0 0
vv
Trong:
0 1 0 1 1 0 1
1 1 0 0 1 1 1
0 1 0 0 1 0 0
1 1 1 0 0 0 1
0 0 0 1 1 1 0
Out: 0 0 0 1 1
vv
Trong:
0 1 1
1 1 0
Hết: Không có gì hoặc lỗi hoặc giải pháp bị lỗi, tức là bạn không phải xử lý các đầu vào không có giải pháp.
Trong: http://pastebin.com/raw/3GAup0fr
Ngoài: 0 10 18 28 32 38 48 61 62 63 68 86 90 97 103 114 120 136 148 157 162 174 177 185 186 194 209 210 218 221 228 243 252 255 263 270 271 272 273 280 291 294 295 309 310 320 323 327 339 345 350 353 355 367 372 373 375 377 382 385 386 389 397 411 417 418 431 433 441 451 457 458 459 466 473 479 488 491 498 514 517
Trong: https://gist.github.com/angs/e24ac11a7d7c63d267a2279d416bc694
Ngoài: 553 2162 2710 5460 7027 9534 10901 12281 12855 13590 14489 16883 19026 19592 19834 22578 25565 27230 28356 29148 29708 30818 31044 34016 34604 36806 36918 39178 43329 43562 45246 46307 47128 47906 48792 50615 51709 53911 55523 57423 59915 61293 62087 62956 64322 65094 65419 68076 70212 70845 71384 74615 76508 78688 79469 80067 81954 82255 84412 85227