Java 实施EntityCollection任务的方向
我有以下任务: 指导原则:您可以用Java/C实现您的解决方案Java 实施EntityCollection任务的方向,java,c#,algorithm,Java,C#,Algorithm,我有以下任务: 指导原则:您可以用Java/C实现您的解决方案 要求您实现附加Java文件中指定的EntityCollection接口 您的实现应支持以下操作: A.添加-将作为输入提供的实体添加到集合。 BRemove Max Value-从列表中删除具有最大值的实体 收集并返回它 根据执行Add&removemax的频率,您应该为以下用例(A-C)提供3个实现 在这些用例中的价值: 每个用例实现都应该根据其WC进行优化 时间复杂性- 如果一个操作比另一个操作更频繁(例如,高与低)–则频繁
A.添加-将作为输入提供的实体添加到集合。
BRemove Max Value-从列表中删除具有最大值的实体 收集并返回它
- 如果一个操作比另一个操作更频繁(例如,高与低)–则频繁操作的频率应最低 可能的复杂性,而另一个操作可能具有更高的复杂性 复杂性,但仍尽可能优化
- 如果两种操作的频率相同(例如,中等与中等),则两种操作的复杂度应相似,尽可能低 在每项操作中,同时考虑到同样的需要 另一个操作的复杂性
public interface Entity
{
public int getValue(); // unique
}
public interface EntityCollection
{
public void add(Entity entity);
public Entity removeMaxValue();
}
注意:您可以使用数据库中的任何现有集合/数据结构
解决方案
我的问题:你认为这个任务够清楚吗?对于如何处理这个问题,我感到有点神志不清
我想他们让我写一些收藏品。但我看不出用例/操作的含义
任何说明、提示或代码示例都将不胜感激。IMO您需要根据用例研究有效支持添加或删除操作的数据结构,然后在内部使用您选择的语言中相应的内置数据结构,如果您想要更大的灵活性,则实现该数据结构构建你自己 例如,在用例A中,添加频率高,删除最大值频率低,因此您可以使用支持添加的数据结构,例如
O(1)
(恒定时间)时间复杂度。然而,对于remove,您可以使用O(n)
(线性时间)时间复杂度的东西,或者小于O(n^2)
的东西对于低频操作来说足够好
因此,对于用例A,您可以使用链表,因为加法是O(1)
,但是对于remove max,您需要排序,然后删除max,这使得O(nlogn)
变得复杂
对于用例C,您可以选择使用优先级队列,该队列具有
O(1)
用于删除max,以及O(logn)
用于添加。优先级队列是Java中的最大堆实现。此分配的重要性在于您对数据结构和算法的理解
大量添加而不是删除最大值?使用链接列表。链表是O(1),用于向列表中添加新值。因此,请使用它,并为您的第二个操作使用一个易于实现的搜索算法,因为它使用不多
对于第二个用例,您需要平衡两种操作的速度,因此选择一种速度都不错的数据结构。也许是二叉搜索树
最后一个案例也是如此
这是一个很好的链接,概述了数据结构及其速度
您可以为其中一些选择一个哈希表,但请注意,尽管哈希表速度很快,但它需要消耗大量内存才能实现。然而,这只是在内存有问题或者您正在处理大型数据集时才需要考虑的问题。我理解新来者阅读时可能会感到困惑,但本质上它要求您深入研究集合,以及根据向其抛出的添加和移除量,更有效地添加和移除项的方法。某些类型的算法在添加许多项时会比其他类型的算法快,但在添加少量项时会慢。