Xây dựng một lớp Set với các phương thức

Em học cải thiện lại môn toán rời rạc nhưng vì năm nay học online nên thầy coi thi online cho đề liên quan tới code không còn thuần lý thuyết như trước nữa.

Xây dựng một lớp Set với các phương thức sau:

  1. Tìm tập hợp tất cả các tập hợp con của một tập hợp cho trước.
  2. Kiểm tra hai tập hợp cho trước có bằng nhau hay không

Em có tìm hiểu trên google nhưng toàn ra thuật toán theo thứ tự từ 1->n . còn đề này yêu cầu bất kỳ ví dụ như : cho tập hợp (3,7,8,2,9) tìm toàn bộ tập con của tập này .

Sao bạn không tìm 1 hàm f để map (3, 7, 8, 2, 9) thành (1, 2, 3, 4, 5), sau đó tìm tập tập con trên tâp 1->5 này.
Rồi lấy hàm ngược của f để map (1, 2, 3, 4, 5) về lại (3, 7, 8, 2, 9). Cho hàm này chạy trên tập tập con kia là xong rồi.

3 Likes

Em sinh viên năm 2 anh ơi, anh nói mấy cái này em thấy mơ hồ quá . Em có ý tưởng là viết hàm sắp xếp để sắp xếp lại thứ tự mảng mình mới nhập (trên mạng có hướng dẫn) dùng cái này để làm câu 2 . nhưng từ tập hợp đã sắp xếp theo thứ tự để xuất ra tập hợp con em không biết làm .

À, tại vì bạn nói đang làm toán rời rạc nên mình dùng “ngôn ngữ toán rời rạc” để comment đó chứ.
Còn nếu bạn chỉ quan tâm code ra sao thì nó sẽ như vầy: bạn lưu set bằng array, rồi tạo subset dựa trên index thay vì value là xong.

PS: học mà cứ kiểu: gu gồ có hướng dẫn (nói thẳng chắc là gu gồ có source code để copy) thì khó khá lên lắm nha bạn.

4 Likes

số tập hợp con của 1 tập hợp n phần tử là 2^n, cứ duyệt int i từ 0 tới 2^n-1 chuyển i về dạng nhị phân là biết tập hợp con đó gồm phần tử nào :V

vd (3,7,8,2,9) thì thế này là được :V

         3 7 8 2 9
 0 00000 | | | | | 
 1 00001 | | | | 9 
 2 00010 | | | 2 | 
 3 00011 | | | 2 9 
 4 00100 | | 8 | | 
 5 00101 | | 8 | 9 
 6 00110 | | 8 2 | 
 7 00111 | | 8 2 9 
 8 01000 | 7 | | | 
 9 01001 | 7 | | 9 
10 01010 | 7 | 2 | 
11 01011 | 7 | 2 9 
12 01100 | 7 8 | | 
13 01101 | 7 8 | 9 
14 01110 | 7 8 2 | 
15 01111 | 7 8 2 9 
16 10000 3 | | | | 
17 10001 3 | | | 9 
18 10010 3 | | 2 | 
19 10011 3 | | 2 9 
20 10100 3 | 8 | | 
21 10101 3 | 8 | 9 
22 10110 3 | 8 2 | 
23 10111 3 | 8 2 9 
24 11000 3 7 | | | 
25 11001 3 7 | | 9 
26 11010 3 7 | 2 | 
27 11011 3 7 | 2 9 
28 11100 3 7 8 | | 
29 11101 3 7 8 | 9 
30 11110 3 7 8 2 | 
31 11111 3 7 8 2 9 
6 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?