List 订购修剪(分页)一个大数组,如何?

List 订购修剪(分页)一个大数组,如何?,list,algorithm,memory,List,Algorithm,Memory,一个经典的任务,我需要返回一个可以分页的列表 以下是要素: ecgdfahb 我们来点吧: abcdefgh 我想返回第一页,包括两项: ab 或第二页: cd 所以基本上我只是添加源项,对它们进行排序,并进行简单的数组拆分操作(数据不是来自数据库)。 但这个清单是巨大的。太大了,这样做,当我尝试添加5时,内存溢出。元素。有没有节省内存的方法?如果没有页面,那么就很简单,因为列表中只有非排挤的元素。最简单的解决方案是使用RDBMS并编写SQL查询,如: SELECT x FROM tab

一个经典的任务,我需要返回一个可以分页的列表

以下是要素:

ecgdfahb
我们来点吧:

abcdefgh
我想返回第一页,包括两项:

ab
或第二页:

cd
所以基本上我只是添加源项,对它们进行排序,并进行简单的数组拆分操作(数据不是来自数据库)。
但这个清单是巨大的。太大了,这样做,当我尝试添加5时,内存溢出。元素。有没有节省内存的方法?如果没有页面,那么就很简单,因为列表中只有非排挤的元素。

最简单的解决方案是使用RDBMS并编写SQL查询,如:

SELECT x FROM table
ORDER by x
LIMIT window_size OFFSET window_offset
确保在字段
表.x
上有一个B树索引。B-树的主要兴趣在于它们需要少量的磁盘访问,并保持值列表的排序

如果您不想使用RDBMS,您必须自己实现B树。有关一般信息,请参阅。这本书也有很好的一章


总而言之,B-树类似于二叉树,但是它的节点有很多子节点,比如说最多有
m
。因此,这些树比二叉树浅。节点存储在磁盘上(通常,每个节点都保存在磁盘块上),允许您存储不适合内存的有序值列表。如果您有
n
x1。。。xn
在非叶节点中,则有
n+1
子节点,包含值
外部合并排序?列表是常量(排序一次)还是要添加元素并保持排序?是的,我要添加元素并保持排序,看起来就是这样。