我正在寻找一种保持顶部的数据结构n元素,类似于这个问题 https://stackoverflow.com/questions/564112/data-structure-that-always-keeps-n-best-elements,但增加了维护排序顺序的要求。显然我可以在最后进行排序,但可能有一种更有效的方法可以即时进行排序。只会进行插入,不会进行删除,然后通过顶部进行迭代n元素在最后。
这个问题与语言无关,但它是在 C# 中,因此使用本机 .NET 集合的答案更好。
编辑:我应该澄清一下,排序顺序仅在最末尾时才重要,当顶部n元素被迭代。一路上,由于有插入,只要顶部的排序顺序是无关紧要的n元素被保留。
你必须向我们提供有关顺序的线索n以及要插入的项目数量。
我认为排序顺序是相关的,否则你怎么知道哪些元素是顶部的一部分n?只因为你只想要顶级n所有插入的最后可能会产生对结构或算法的偏见。
为什么要保留不在顶部的任何项目n?您可以使用排序集(思考Python的双端队列 http://docs.python.org/2/library/collections.html?highlight=pop#collections.deque)的大小为 n+1。添加时,迭代列表并将新项目插入到集合中的正确位置。当集合达到大小 (n+1) 时,每次插入后都会删除最后一项。这样你就永远处于领先地位n项,而不使用永远不会被检索的项来增加数据结构。
另外,如果保留底部元素的值(最后一个元素)n, 叫它b)然后你可以使用它来完全跳过插入。这将新项目时的比较次数限制为 O(1)x大于b.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)