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.
Câu hỏi của bạn ở đâu? – outis
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ọ. –
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