【发布时间】:2017-09-28 13:13:23
【问题描述】:
我正在寻找一个列表的最大值(通过使用maximum),我知道这个函数需要处理整个列表才能达到它的目标,随着列表变大,这显然会变慢。不幸的是,我的名单很大(数亿)。
这是唯一的方法吗?或者有更快的方法来做到这一点?我发现 Haskell 很快,但在这一点上(越来越慢),我想知道是否有其他选择可以找到 maximum。
【问题讨论】:
-
如何在不检查每个数字的情况下找到不相关数字列表的最大值?只有两个选项:(a)要么数字有一些相关性,你可以利用;或(b)您也许可以使用数组,因为这通常遍历起来更快。但是在 (b) 的情况下,它仍然需要 O(n) 时间。
-
你是如何生成列表的?
-
最大值是可交换约简,因此如果您有合适的并行节点可以处理,您可以分配作业。但这假设您的大量数据已经可以被分块;如果它只是一个你懒惰地生成的列表,那么简单地使用它仍然更快。 stackoverflow.com/questions/4028210/… 可能有一些线索。
-
我认为,如果您编辑问题以包含更多详细信息,您可能会更快地获得更有帮助的答案。您所做的几个 cmets(对一个现已删除的答案)表明该列表位于一个大文本文件中,并且您需要对各种分组执行多个最大/最小计算,但这些信息均不在原始问题中。查看文件中记录的外观示例以及您尝试为其查找最小值/最大值的“分组”类型会很有帮助。
-
如果不进一步了解列表的“结构”,就无法绕过
O(n)问题的复杂性。