【发布时间】:2016-08-22 00:11:05
【问题描述】:
假设我有两个数组energy (E) and score (S),它们可能有这样的元素:
E = {1 , 3 , 4, 7};
S = {16, 10, 5, 1};
我想要的是最好的成绩,最好的能量。什么数据结构可以支持插入项目,我没有一个项目比另一个项目能量和分数更低i.e. for any i,j where i!=j => score[i] > score[j] || energy[i] > energy[j]
插入时,我做了三个步骤:
1-如果任何项目的分数和能量大于或相等,则返回;
2-如果任何项目的分数和能量小于或相等,则删除该项目;
3- 插入所需的项目。
这里有一些例子: 1-插入e=8,s=1。数组变为:
E = {1 , 3 , 4, 8};
S = {16, 10, 5, 1};
^
2- 插入 e=5、s=6。数组变为:
E = {1 , 3 , 5, 8};
S = {16, 10, 6, 1};
^
3- 插入 e=5,s=11。数组变为:
E = {1 , 5 , 8};
S = {16, 11, 1};
^ (3,10) is removed because (5,11) has more energy and more score than it.
什么数据结构可以在(希望)O(logn) 时间内支持这一点?
【问题讨论】:
-
关系数据库中的表可以支持这一点。这就是你所追求的吗?这是一个非常广泛的问题。
-
这是一个有趣的问题,但它似乎更像是一个适合cstheory.stackexchange.com 而不是 SO 的问题。
-
@Nick.McDermaid,我想用我选择的语言 (C#) 来实现这个数据结构,所以我不知道关系数据库表在这里有什么帮助。如果您能详细说明,我将不胜感激。
-
如果 O(logn) 是可能的(我认为),那么它只是以摊销的方式,因为一次添加可能会导致删除所有 N 项已经是数据结构的一部分。 (至少没有关于您的查询统计的一些假设)
-
Also posted on CS.SE,您可以在其中找到答案。请do not post the same question on multiple sites。每个社区都应该诚实地回答问题,而不会浪费任何人的时间。
标签: c# arrays data-structures