10/10/2018, 09:18

Xác suất trùng lặp ?

Có một chuỗi gồm 32 ký tự bất kỳ lấy ra từ tập hợp [A-Za-z0-9]. Xác suất xảy ra trường hợp xuất hiện 1 cặp chuỗi trùng nhau là bao nhiêu ? Công thức tổng quát cho trường hợp chuỗi có n ký tự là gì ?

Bác nào giỏi về toán xác suất chỉ giáo em với
jiSh@n viết 11:26 ngày 10/10/2018
Có tổng cộng 62^32 chuỗi khác nhau có độ dài 32 từ tập trên.

Làm quả MD5 hoặc SHA cho nhanh đi, tính làm gì cho mệt
sacroyant viết 11:23 ngày 10/10/2018
Được gửi bởi jiSh@n
Có tổng cộng 62^32 chuỗi khác nhau có độ dài 32 từ tập trên.

Làm quả MD5 hoặc SHA cho nhanh đi, tính làm gì cho mệt
Không bác ơi, đây là phần tạo ID của tui. Các ID được phát sinh bởi hàm createId từ client :

PHP Code:
<script type="text/javascript">
function 
createId(len){
  var 
id=n=''chars='ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  
chars+=rd.toLowerCase()+'0123456789';
  for(var 
i0;i<len;i++){
    
n=Math.round(Mathrandom()*chars.length);
    
id+=chars.charAt(n);
  }
  return 
id;
}
</script> 
Vấn đề là tui muốn dùng trường lưu trữ ID này làm PK, mà PK thì không thể trùng lặp, phải không bác

Như bác nói, có đến 62^32 chuỗi khác nhau, nghĩa là nếu số row của bảng không lớn thì cũng khó xảy ra trùng lặp. Nhưng tôi hy vọng tìm được con số cụ thể hơn về khả năng phát sinh trùng lặp, bác ạ
Shellingfox viết 11:23 ngày 10/10/2018
Thì javascript cũng có hàm create md5 mà.

Xét về lý thuyết là vậy nhưng thực tế với các ngôn ngữ lập trình khi có 2 hàm random() gọi ở gần nhau trong khoảng thời gian rất ngắn thì rất dễ sinh trùng lặp. Khó mà tính được chính xác lắm khả năng phát sinh.


Có lần mình làm rand(0,1000) mà có tới hơn 30% trùng lặp với số kết quả lấy là 200, cũng có lần lấy 200 mà chỉ có 2~3% trùng. CHưa lần nào xảy ra hiện tượng không trùng
dangviethai viết 11:32 ngày 10/10/2018
nếu là gen id cho PK thì với các ký tự như trên thì hầu như 90% xảy ra trùng lặp để giải quyết bạn nên đưa thêm ngày giờ hiện tại vào chuỗi đó thì sẽ không bao giờ có chuyện trùng lặp, đoạn code này nên xử lý bên server thì bảo mật hơn chứ
sacroyant viết 11:32 ngày 10/10/2018
@ Shellingfox : sao khả năng trùng lặp của bác lại cao thế nhỉ

@ dangviethai : Tui có thói quen đưa các xử lý về phía client. Nhưng hiện tại thì vẫn làm trên server với hàm createId bên dưới, khi tạo ID và trong các hình ảnh verification code :

PHP Code:
  function createId($len){
    
$id=''$chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz9876543210';
      
mt_srand((double)microtime()*1000000);
        while (
strlen($id)<$len){
          
$id.=$chars{mt_rand(0,strlen($chars)-1)};
        }
    return 
$id;
  } 
Hàm này rõ ràng đã tính đến yếu tố thời gian rồi phải không các bác ?

Còn vấn đề chính, xác suất trùng lặp, phải tính như thế nào các bác ? Tôi vẫn tò mò quá
Bài liên quan
0