|
|
1
7
如果需要不同的比较器,可以在
编辑
正如尼基提到的,
同样,可以将自定义比较器(与自定义键选择一起)用作
|
|
|
2
3
我想你真正想要的是 selection algorithm . 我不知道Linq是实现它的最佳方法,因为我认为它基本上是以排序作为选择的。您应该能够在o(kn)中做到这一点,其中k是通过迭代集合来获得的“top”项目数,跟踪到目前为止看到的最小“top”元素,如果当前元素大于该元素,则将该元素替换为当前元素(并更新新的最小元素)。这也是节省空间的。 完成后,可以将“top”元素作为有序集合返回。
注意
:我假设这里是Linq to对象。如果您使用的是LINQ to SQL,那么我只需将排序/选择延迟到SQL服务器,并简单地将方法适当地链接起来,以获得
完全未测试,甚至未编译。使用通用斐波那契堆实现。我会把代码贴在我的博客上( http://farm-fresh-code.blogspot.com )不久的某个时候。由于我对优先级队列做了一些实验,我有一个挂在旁边(不确定它是否是通用的)。参见 wikipedia 获取信息和伪代码。
|
|
|
3
1
除了写这个方法,我不知道其他的解决方案。然而,这种方法不应该那么复杂。 您需要维护一个带有前10个元素的排序列表,并在原始集合中迭代一次。 如果迭代期间的当前记录小于前10个列表中的最后一个记录,或者当您还没有前10个记录时,则必须将该项添加到此列表中。(当然,如果合适的话,从前10个列表中删除最后一项。) |
|
|
4
1
您还可以实现一个分而治之的排序算法,如Quicksort和Break,只要您有第一个K排序的元素。但如果K<<n,Tvanfosson的建议可能更快。 |
|
Sweepy Dodo · JSON lite的格式化 1 年前 |
|
|
giantjenga · 优化整数向量到二进制向量的转换 1 年前 |
|
Zegarek · Postgresql递归查询未提供预期结果 1 年前 |
|
|
Joe · 为什么这两个查询之间的性能存在如此大的差异? 2 年前 |
|
tic-toc-choc · 在`dplyr中高效使用列表进行过滤` 2 年前 |