-
Giúp chia nhóm ngẫu nhiên với số lượng bằng nhau
Nguyendinhthanh > 08-07-11, 10:13 PM
Mình muốn chia nhóm (Danh sách được lấy ngẫu nhiên) Sao cho số lượng mỗi nhóm bằng nhau.
Ai biết giúp mình với.
File đính kèm -
RE: Giúp chia nhóm ngẫu nhiên với số lượng bằng nhau
Noname > 09-07-11, 01:08 AM
Để chia nhóm, quan trọng không phải là viết code mà là thuật toán. Mình gợi ý một thuật toán tuần tự thế này:
Giả định bạn cần phân ra n nhóm. Ta xếp record cho hết nhóm này, tới nhóm khác, khi đủ thì xoay lại từ đầu cho tới khi hết.
N: số nhóm.
M=1, nhóm hiện đang xem xét
Bước 1: Chọn ra các record chưa xếp vào nhóm nào.
Bước 2:Lấy về số RecordCount.
if RecordCount>0 then
Bước 3: Nhảy về record đầu tiên.
lấy 1 số ngẫu nhiên r trong khoảng 0-RecordCount
Nhảy tới record thứ r. Gán cho nó vào nhóm m.
Nếu m=n thì gán m=1, ngược lại thì cho m=m+1
Quay lại bước 1
end if
Mời bạn xem code
Mã:Sub sChiaNhom(m As Integer)
Dim rec1 As Recordset
Dim r, k As Integer ' r :so ngau nhien, k so record, n- tong so nhom, m- so nhom hien hanh
Set rec1 = CurrentDb().OpenRecordset("SELECT Chianhom2, chon FROM danhsach2 WHERE chon=no")
k = rec1.RecordCount
If k <> 0 Then
rec1.MoveFirst
Randomize
r = Int((k * Rnd())) ' lay mot so ngau nhien trong cac record con lai
rec1.Move r ' nhay toi record r
rec1.Edit
rec1!Chianhom2 = m
rec1!chon = True
rec1.Update
rec1.Close
If m = n Then
m = 1
Else
m = m + 1
End If
sChiaNhom m ' quay lai buoc 1
Else
MsgBox " da chia nhom xong, hay click form duoi va xem ket qua"
End If
End Sub
Khi đó, ta tạo 1 nút nhấn:
Mã:Dim n As Integer ' tong so nhom
Private Sub Command0_Click()
Dim m As Integer
m = 1 ' so bat dau cua m
n = 6 ' thay so nhom ban muon chia vao day
sChiaNhom m
End Sub
Lưu ý, dữ liệu bạn sẽ bị tranh chấp trong quá trình tính toán nếu bạn đang mở nó ở 1 form khác. Vì vậy, bạn phải tạo 1 form để run riêng, 1 form để hiển thị riêng.
Mời bạn xem demo.
-
RE: Giúp chia nhóm ngẫu nhiên với số lượng bằng nhau
Nguyendinhthanh > 09-07-11, 10:15 PM
Mình hỏi thêm chút nhé:
- Chia ra số nhóm như vậy, sao cho ứng với mỗi mã, không được xếp ở một nhóm nhiều hơn 1 lần thì sao?
(Ví dụ: mã 001 đã vào nhóm 1 thì thôi không vào nhóm 2-3-4-5-6) -
RE: Giúp chia nhóm ngẫu nhiên với số lượng bằng nhau
Noname > 09-07-11, 10:24 PM
Khi đã xếp rồi, ô chọn đã check là yes. Ở vòng lặp sau, ta đã lọc bỏ nó ra, không gọi lại nó nữa thì làm sao vào nhóm khác được. Bạn thử demo chưa? -
RE: Giúp chia nhóm ngẫu nhiên với số lượng bằng nhau
Nguyendinhthanh > 09-07-11, 11:02 PM
(09-07-11, 10:24 PM)Noname Đã viết: Khi đã xếp rồi, ô chọn đã check là yes. Ở vòng lặp sau, ta đã lọc bỏ nó ra, không gọi lại nó nữa thì làm sao vào nhóm khác được. Bạn thử demo chưa?
Mình xem demo roi. Van de la, o truong ma, co nhieu ma trung nhau, khong duoc lay ma trung nhau de xep vao nhom (Ví dụ: 1000 hạt màu xanh, 1000 hạt màu vàng, ... mình đang giải quyết bài toán xác suất của Menden nên cột mã hạt trùng nhau, khi xếp nhóm, các hạt đó lấy không được trùng màu) -
RE: Giúp chia nhóm ngẫu nhiên với số lượng bằng nhau
Noname > 10-07-11, 05:02 AM
(09-07-11, 11:02 PM)Nguyendinhthanh Đã viết:
(09-07-11, 10:24 PM)Noname Đã viết: Khi đã xếp rồi, ô chọn đã check là yes. Ở vòng lặp sau, ta đã lọc bỏ nó ra, không gọi lại nó nữa thì làm sao vào nhóm khác được. Bạn thử demo chưa?
Mình xem demo roi. Van de la, o truong ma, co nhieu ma trung nhau, khong duoc lay ma trung nhau de xep vao nhom (Ví dụ: 1000 hạt màu xanh, 1000 hạt màu vàng, ... mình đang giải quyết bài toán xác suất của Menden nên cột mã hạt trùng nhau, khi xếp nhóm, các hạt đó lấy không được trùng màu)
Nếu ở trường Mã mà có nhiều mã trùng nhau thì trường đó không gọi là Mã nữa. Điều kiện đầu tiên của 1 key phải là tính duy nhất. Tổ chức dữ liệu của bạn có vấn đề rồi. Như mình đã nói, quan trọng là thuật toán chứ không phải ngôn ngữ lập trình. Bạn đã xây dựng thuật toán thế nào chưa? Ý tưởng thì mình vẫn thế,chủ yếu bạn select thế nào thôi.
Thân.