2012-02-22 19 views
11

Bạn sẽ chọn một phần tử ngẫu nhiên đồng nhất trong danh sách được liên kết với độ dài không xác định trong một lần chuyền hoặc nếu không phải là hai vé?Bạn sẽ chọn một phần tử ngẫu nhiên đồng nhất trong danh sách được liên kết với độ dài không xác định như thế nào?

+4

Tôi e rằng bạn sẽ phải nỗ lực nhiều hơn một chút trong câu hỏi của mình và làm cho nó rõ ràng những gì bạn đang yêu cầu –

+0

ok. làm thế nào bạn sẽ chọn một phần tử ngẫu nhiên đồng nhất trong danh sách liên kết với độ dài không xác định? – exlux15

+0

Nếu đó là câu hỏi của bạn, đó là một câu hỏi thú vị. Xin vui lòng chỉnh sửa câu hỏi của bạn cho phù hợp và tôi sẽ upvote nó –

Trả lời

22

Sử dụng lấy mẫu hồ chứa http://en.wikipedia.org/wiki/Reservoir_sampling. Bạn chỉ cần một lần truyền dữ liệu.

Đối chọn một phần tử:

  1. Chọn phần tử đầu tiên (xác suất 1)
  2. Sau đó, cho các phần tử thứ k nhặt nó với xác suất 1/k (tức là thay thế các lựa chọn hiện tại với yếu tố thứ k)

Tôi sẽ cho phép bạn chứng minh rằng kết quả này trong việc lựa chọn đồng đều các phần tử.

+0

Tôi đã cố gắng sử dụng nhưng điều này sẽ chọn k phần tử ngẫu nhiên. nhưng tôi sẽ chỉ cần chọn phần tử đầu tiên – exlux15

+0

@AnilBabooram Sử dụng k = 1? Dù sao, thuật toán được đề cập trong bài viết (không phải wiki) là cho một trường hợp phần tử. – ElKamina

+1

ok nếu tôi sử dụng vòng lặp while dọc theo độ dài ++ để duyệt qua danh sách. Nếu tôi sử dụng i = rand()% length, "i" có phải là lựa chọn ngẫu nhiên tại nút hiện tại không? – exlux15

Các vấn đề liên quan