0

我正在做Think Python: How to Think Like a Computer Scientist中的练习 13.7 。练习的目标是提出一种相对有效的算法,该算法从单词文件(比方说小说)中返回一个随机单词,其中返回单词的概率与其在文件中的频率相关。

作者建议采取以下步骤(可能有更好的解决方案,但这可能是我们迄今为止在本书中介绍的最佳解决方案)。

  1. 创建一个直方图显示{word: frequency}
  2. 使用keys方法获取书中的单词列表。
  3. 建立一个包含词频累计总和的列表,使得这个列表中的最后一项就是书中的总词数,n
  4. 从 1 到 中选择一个随机数n
  5. 使用二等分搜索查找将在累积和中插入随机数的索引。
  6. 使用索引在单词列表中找到对应的单词。

我的问题是:以下解决方案有什么问题?

  1. 将小说变成t单词列表,与它们在小说中出现的完全一样,无需消除重复实例或改组。
  2. 生成一个从 0 到 的随机整数n,其中n = len(t) – 1.
  3. 使用该随机整数作为索引来检索t.

谢谢。

4

1 回答 1

1

您的方法(也)是正确的,但它使用与输入文本大小成比例的空间。本书建议的方法使用的空间仅与输入文本中不同单词的数量成比例,通常要小得多。(想想像“the”这样的词在英文文本中出现的频率。)

于 2014-09-14T17:45:52.493 回答