如果我有一个表格,每行代表一条记录,并且有几列。我想对任何列进行快速查询和排序。我可以使用哪些数据结构?
我希望节省空间。否则,我可以在每列上缓存排序结果以进行查询和排序。但除了表本身之外,如何消耗更少的空间?
答案 0 :(得分:0)
根据数据的复杂程度,您可能正在寻找relational algebra的实施。也就是说,unordered set of tuples。
通常的实现方式是B-tree。
答案 1 :(得分:0)
这本质上是一个数据库编程问题。你需要索引,每列一个(这个答案的其余部分假装我们正在谈论一个单一的索引;想象一下,如果你需要,可以多次完成所有这些)。常见的解决方案包括哈希表和搜索树(例如B树),但当然只包含所有列条目的简单解决方案并不是特别节省空间。
答案是制作一个稀疏索引:将您的记录分组并仅存储索引中每个块中搜索关键字最少的记录。除非你有一个病态(总是添加非常低的值),否则这将在低空间要求下为你提供良好的性能。
为了处理病态情况,您可以查看将记录分组为块的不同方法,例如:通过保留一大堆未编入索引的记录,并且只要在搜索键方面找到一个不是全部的子集时,只将它们中的一大堆提交到一个组(并将其编入索引)
(这些只是想法。我更多的是数据库的用户,而不是他们的程序员。尝试一些研究,看看那些比我更了解的人在实践中做了什么。)