处理大型数组上的大量查询的数据结构
Posted
技术标签:
【中文标题】处理大型数组上的大量查询的数据结构【英文标题】:Data structure to handle numerous queries on large size array 【发布时间】:2018-11-06 19:52:45 【问题描述】:给定以下形式的 q 个查询。有一份清单。
1 x y:将数字 x 添加到列表中 y 次。
2 n: 查找已排序列表的第 n 个数
约束
1
1
1
样本。 输入
4
1 3 6
1 5 2
2 7
2 4
输出
5
3
【问题讨论】:
欢迎来到 Stack Overflow。请阅读***.com/help/how-to-ask,尤其是meta.stackexchange.com/questions/10811/…。这里的想法不是让我们为您做功课,而是让您尝试它,向我们展示一些代码(或描述您的潜在解决方案),并让我们帮助指导您找到解决方案。 在您的示例输入中,第一行的“3”是什么? 我很抱歉那是“4”或没有查询..... 我尝试用 map 来实现它,但是对于一些测试用例却很困难。 如果您阅读了有关如何提出好问题的链接,则说明您没有遵循建议。您需要发布尝试解决问题的代码,以便我们帮助您了解哪里出了问题以及如何解决问题。 【参考方案1】:这是一个竞争性的编程问题,我现在解决这个问题还为时过早,但我可以尝试提供一些建议。
如果您要显式存储整个数组,显然会耗尽您的内存。但是您可以利用数组的结构来存储每个条目在数组中出现的次数。所以如果你得到了查询
1 3 5
那么您将存储 (3, 5) 对,而不是存储 [3, 3, 3],表示数字 3 在列表中出现 5 次。
你可以很容易地构建它,也许作为你更新的整数对的向量。
剩下的任务是实现 2 查询,您可以在其中通过索引找到一个元素。我们选择的结构的一个副作用是您不能直接索引该整数对向量,因为该列表中的索引与假设数组中的索引不匹配。我们可以从一开始就将向量中每个条目的大小相加,直到达到我们想要的索引,但到目前为止我们处理的查询数量是 O(n^2) ......可能太慢了。相反,我们可能想要一些用于前缀和的可更新数据结构——也许如this answer 中所述。
【讨论】:
以上是关于处理大型数组上的大量查询的数据结构的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 2008,Sybase - 低带宽上的大型选择查询