• Giúp chia nhóm ngẫu nhiên với số lượng bằng nhau
  • 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.