我们知道,一般来说,“更智能”的比较会根据最坏情况的复杂度O(N * log(N))对任意数据运行进行排序。将流数据读入排序列表
我的问题是如果我们被要求不对一个集合进行排序而是对一个数据流进行排序会发生什么。也就是说,值是一个接一个地给我们的,没有指示接下来会发生什么(除了数据是有效的/在范围内)。直观地说,人们可能会认为它比排序数据更好(比如像一个接一个地拿起扑克牌),而不是收集所有数据并稍后排序(在处理完扑克牌后排序)。这是真的吗?
收集和排序将是O(N + N *日志(N))= O(N *日志(N))。然而,如果我们对它进行排序,它是O(N * K),其中K =找到合适的索引+时间来插入元素的时间。这使事情变得复杂,因为现在K的价值取决于我们对数据结构的选择。一个数组在寻找索引方面优越,但浪费时间插入元素。链接列表可以更容易地插入,但无法进行二分查找来查找索引。
是否有关于此问题的完整讨论?我们什么时候应该使用一种方法?可能会有一个理想的中间策略,每隔一段时间排序一次?