public static Word chooseSampledBestScoreWord(ArrayList<Word> words, Lexicon lex,
			SubSeqCounter counter) {
		// First get the normalization denominator
		double scoreSum = 0;
		for (Word w : words) {
			scoreSum += lex.getScore(w, counter);
		}

		// Then normalize
		double[] normScores = new double[words.size()];
		for (int i = 0; i < normScores.length; i++) {
			normScores[i] = lex.getScore(words.get(i), counter) / scoreSum;
		}

		// Bias the scores, normalize again
		scoreSum = 0;
		for (int i = 0; i < normScores.length; i++) {
			normScores[i] = biasProb(normScores[i]);
			scoreSum += normScores[i];
		}
		for (int i = 0; i < normScores.length; i++) {
			normScores[i] = normScores[i] / scoreSum;
		}

		// Draw a random number and find the winner using Shannon/Miller/Selfridge
		double draw = Math.random();
		double sum = 0;
		int winningIdx;
		for (winningIdx = 0; winningIdx < normScores.length; winningIdx++) {
			sum += normScores[winningIdx];
			if (sum > draw) {
				break;
			}
		}

		return words.get(winningIdx);
	}