【发布时间】:2018-06-05 18:49:45
【问题描述】:
给定一个包含以下内容的文件:
2011-03-01
2011-04-01
2011-01-01
2011-05-01
2011-02-01
我想得到:
2011-01-01
如果我们根据字典顺序比较这些行,那么它是文件中最小的行。
实现此目的的一种方法是先对行进行排序,然后返回第一行:
sort file | head -n 1
但是,由于sort,这具有 O(n logn) 的复杂性,而 min 操作应该只需要 O(n ) 其中 n 是行数。
有人知道执行此操作的更智能和/或更有效的方法吗?
【问题讨论】:
-
现在是 2018 年,我很惊讶这个问题以前没有被问到。也许我没有使用正确的关键字来查找它?
-
使用
sort的解决方案涉及大量不必要的操作,因此无法很好地扩展。就像我上面提到的,我对 O(n) 解决方案感兴趣。 -
您应该访问所有答案,而不仅仅是接受的答案。
标签: linux shell min lexicographic-ordering