Số ngẫu nhiên không lặp lại

Công thức của vấn đề

Giả sử rằng chúng ta cần tạo một tập hợp các số nguyên ngẫu nhiên không lặp lại trong một phạm vi giá trị nhất định. Ví dụ khi đang di chuyển:

  • tạo mã ngẫu nhiên duy nhất cho sản phẩm hoặc người dùng
  • phân công mọi người vào các nhiệm vụ (mỗi người ngẫu nhiên từ danh sách)
  • hoán vị các từ trong truy vấn tìm kiếm (xin chào seo-shnikam)
  • chơi xổ số, v.v.

Phương pháp 1. Đơn giản

Để bắt đầu, hãy xem xét một tùy chọn đơn giản: chúng ta cần lấy một bộ ngẫu nhiên gồm 10 số nguyên từ 1 đến 10. Sử dụng hàm có sẵn trong Excel GIỮA CÁC TRƯỜNG HỢP (CẠNH GIỮA) tính duy nhất không được đảm bảo. Nếu bạn nhập nó vào một ô trong trang tính và sao chép nó xuống 10 ô thì việc lặp lại có thể dễ dàng xảy ra:

Số ngẫu nhiên không lặp lại

Vì vậy, chúng tôi sẽ đi theo con đường khác.

Tất cả các phiên bản Excel đều có chức năng CẤP (RANG), nhằm mục đích xếp hạng hay nói cách khác là xác định vị trí trên cùng của một số trong một tập hợp. Số lớn nhất trong danh sách có hạng=1, số thứ hai ở trên cùng có hạng=2, v.v.

Hãy nhập hàm vào ô A2 SLCHIS (RAND) không có đối số và sao chép công thức xuống 10 ô. Hàm này sẽ tạo cho chúng ta một bộ gồm 10 số phân số ngẫu nhiên từ 0 đến 1:

Số ngẫu nhiên không lặp lại

Trong cột tiếp theo chúng tôi giới thiệu chức năng CẤPđể xác định vị trí trong bảng xếp hạng cho mỗi số ngẫu nhiên nhận được:

Số ngẫu nhiên không lặp lại

Chúng tôi nhận được trong cột B những gì chúng tôi muốn - bất kỳ số nguyên ngẫu nhiên không lặp lại mong muốn nào từ 1 đến 10.

Về mặt lý thuyết thuần túy, một tình huống có thể phát sinh khi SLCHIS sẽ cung cấp cho chúng ta hai số ngẫu nhiên giống hệt nhau ở cột A, thứ hạng của chúng sẽ khớp nhau và chúng ta sẽ nhận được sự lặp lại ở cột B. Tuy nhiên, xác suất xảy ra trường hợp như vậy là cực kỳ nhỏ, vì thực tế là độ chính xác là 15 chữ số thập phân.

Cách 2. Phức tạp

Phương pháp này phức tạp hơn một chút nhưng chỉ sử dụng một công thức mảng. Giả sử chúng ta cần tạo một danh sách gồm 9 số nguyên ngẫu nhiên không lặp lại trong phạm vi từ 1 đến 50 trên một trang tính.

Nhập công thức sau vào ô A2, bấm vào cuối Ctrl + Shift + Enter (để nhập nó dưới dạng công thức mảng!) Và sao chép công thức xuống số ô mong muốn:

Số ngẫu nhiên không lặp lại

Phương pháp 3. Macro

Và tất nhiên, bạn có thể giải quyết vấn đề bằng cách sử dụng lập trình trong Visual Basic. Trong một trong những bài viết cũ về lấy mẫu ngẫu nhiên, tôi đã trích dẫn hàm macro mảng Lotto, hàm này tạo ra số lượng số ngẫu nhiên không lặp lại cần thiết trong một khoảng nhất định.

  • Cách đếm số lượng giá trị duy nhất trong một phạm vi
  • Lựa chọn ngẫu nhiên các phần tử từ danh sách

Bình luận