Algoritmo para gerar números aleatórios a partir de uma distribuição discreta?

Projete um algoritmo rápido para gerar repetidamente números a partir da distribuição discreta: Dado um array a [] de números reais não negativos que somam 1, o objetivo é retornar o índice i com probabilidade a [i]

Eu encontrei esta questão em um livro de algoritmos on-line, Introdução à Programação em Java, capítulo 4.2: Classificando e Pesquisando (http://introcs.cs.princeton.edu/java/42sort/).

a dica diz:

Formar um array [] de somas acumuladas tais que s [i] é a soma dos primeiros elementos i de um []. Agora, gere um número real aleatório r entre 0 e 1, e use a pesquisa binária para retornar o índice i para o qual s [i] ≤ s [i + 1].

alguns como eu não sou capaz de entender a dica e, portanto, não consigo encontrar a solução ..

questionAnswers(4)

yourAnswerToTheQuestion