小编iza*_*era的帖子

WordCount:McIlroy的解决方案效率如何?

长话短说:1986年,一位采访者要求Donald Knuth写一个输入文本和数字N的程序,并列出按频率排序的N个最常用的单词.Knuth制作了一个10页的Pascal程序,Douglas McIlroy用以下6行shell脚本回复:

tr -cs A-Za-z '\n' |
tr A-Z a-z |
sort |
uniq -c |
sort -rn |
sed ${1}q
Run Code Online (Sandbox Code Playgroud)

请阅读http://www.leancrew.com/all-this/2011/12/more-shell-less-egg/阅读全文.

当然,他们有着截然不同的目标:Knuth展示了他的文学编程概念,并从零开始构建了所有内容,而McIlroy使用了一些常见的UNIX实用程序来实现最短的源代码.

我的问题是:那有多糟糕?
(纯粹从运行时速度的角度来看,因为我很确定我们都同意6行代码比10页更容易理解/维护,有文化编程与否.)

我可以理解,这sort -rn | sed ${1}q可能不是提取常用词的最有效方法,但有什么不对tr -sc A-za-z '\n' | tr A-Z a-z?它看起来对我很好.关于sort | uniq -c,这是一种非常慢的确定频率的方法吗?

一些注意事项:

  • tr 应该是线性时间(?)
  • sort我不确定,但我认为它不是那么糟糕
  • uniq 也应该是线性时间
  • 产卵过程应该是线性时间(在过程数量上)

sorting algorithm shell knuth word-frequency

14
推荐指数
2
解决办法
2686
查看次数

标签 统计

algorithm ×1

knuth ×1

shell ×1

sorting ×1

word-frequency ×1