Giả sử rằng tôi có một khuôn mặt được tải n mặt trong đó mỗi bên k có một số xác suất p k xuất hiện khi tôi cuộn nó. Tôi tò mò liệu có thuật toán tốt để lưu trữ thông tin này một cách tĩnh (tức là đối với một tập hợp xác suất cố định) để tôi có thể mô phỏng hiệu quả một cuộn súc sắc ngẫu nhiên.
Hiện tại, tôi có một giải pháp O (lg n) cho vấn đề này. Ý tưởng là lưu trữ một bảng xác suất tích lũy của các cạnh k đầu tiên cho tất cả k, chúng tạo ra một số thực ngẫu nhiên trong phạm vi [0, 1) và thực hiện tìm kiếm nhị phân trên bảng để lấy chỉ số lớn nhất có tích lũy giá trị không lớn hơn giá trị được chọn. Tôi khá thích giải pháp này, nhưng có vẻ kỳ lạ là thời gian chạy không tính đến xác suất. Đặc biệt, trong các trường hợp cực đoan của một phía luôn xuất hiện hoặc các giá trị được phân phối đồng đều, có thể tạo ra kết quả của cuộn trong O (1) bằng cách sử dụng một cách tiếp cận ngây thơ, mặc dù giải pháp của tôi vẫn sẽ thực hiện nhiều bước logarit.
Có ai có bất kỳ đề xuất nào về cách giải quyết vấn đề này theo cách nào đó "thích nghi" trong thời gian chạy không?
EDIT : Dựa trên các câu trả lời cho câu hỏi này, tôi đã viết một bài báo mô tả nhiều cách tiếp cận vấn đề này , cùng với các phân tích của họ. Có vẻ như việc Vose thực hiện phương pháp bí danh cho time (n) thời gian tiền xử lý và thời gian O (1) cho mỗi lần lăn, điều này thực sự ấn tượng. Hy vọng rằng đây là một bổ sung hữu ích cho các thông tin có trong các câu trả lời!