2011-12-25 30 views
12

Chỉ cần thực hành (và không phải là một bài tập về nhà) Tôi đã cố gắng để giải quyết vấn đề này (CLRS, 3rd edition, tập thể dục 11,2-6):Chọn đúng một phần tử ngẫu nhiên từ bảng băm có chuỗi?

Giả sử chúng ta đã được lưu trữ phím n trong một bảng băm của kích thước m, với va chạm được giải quyết bằng chuỗi và chúng tôi biết độ dài của mỗi chuỗi , bao gồm độ dài L của chuỗi dài nhất. Mô tả thủ tục chọn ngẫu nhiên đồng nhất khóa từ các phím trong bảng băm và trả về trong thời gian dự kiến ​​O (L * (1 + m/n)).

Điều tôi nghĩ cho đến nay là xác suất của mỗi khóa được trả về là 1/n. Nếu chúng ta cố gắng lấy một giá trị ngẫu nhiên x từ 1 đến n và cố gắng tìm khóa thứ x trong chuỗi đầu tiên được sắp xếp theo nhóm thì dọc theo chuỗi trong thùng, thì sẽ lấy O (m) để tìm nhóm thích hợp bằng cách thông qua xô từng người một và O (L) để có được chìa khóa đúng trong chuỗi.

+1

Câu hỏi của bạn ở đâu? – outis

+0

Trường hợp xấu nhất là O (mn) để tìm mục có liên quan, nhưng thời gian dự kiến ​​(như câu hỏi nói) là O (1 + m/n) cho mỗi người và sẽ là O (L * (m/n + 1)) cho Tất cả bọn họ. –

+0

Thông tin độ dài được lưu trữ như thế nào? Tôi nghĩ rằng nếu một thùng có tất cả các phần tử trong đó và phần còn lại có số không, bạn thậm chí không thể tìm thấy thùng đó nhanh hơn O (n). Có thông tin nào khác về vị trí của các yếu tố không? – templatetypedef

Trả lời

23

Lặp lại các bước sau cho đến khi một phần tử được trả về:

  • ngẫu nhiên chọn một cái xô. Để k là số phần tử trong nhóm.
  • Chọn p đồng nhất ngẫu nhiên từ 1 ... L. Nếu p <= k sau đó trả lại thành phần thứ p trong thùng.

Cần làm rõ rằng thủ tục trả về một phần tử một cách đồng nhất một cách ngẫu nhiên. Chúng tôi sắp xếp áp dụng lấy mẫu từ chối cho các phần tử được đặt trong một mảng 2D.

Số lượng yếu tố dự kiến ​​cho mỗi nhóm là n/m. Xác suất mà nỗ lực lấy mẫu thành công là (n/m)/L. Do đó, số lần thử mong muốn cần tìm một thùng là L * m/n. Cùng với chi phí O(L) truy xuất phần tử từ nhóm, thời gian chạy dự kiến ​​là O(L * (1 + m/n)).

+1

+1 Thông tin chi tiết tuyệt vời về lấy mẫu trong phạm vi từ 1 đến L. Trực giác hình học hoàn thành hình chữ nhật và ném phi tiêu vào nó có thể giúp giải thích rõ hơn một chút. – templatetypedef