一个堆不支持高效的随机访问(即通过索引查找)也不支持获取前k个元素而不删除元素(这是不希望发生的)。
我的答案可能是:
一个数据库将是首选,因为通过适当的表结构和索引,所有所需的操作都可以高效地完成。
所以我想这更多地是关于数据结构的理解的理论问题(与内存存储相关,而不是持久性)。
似乎多个数据结构是正确的选择:
a)需要有效检索和更新数据,因为股票数据在交易时间内每秒或微秒变化。
对于这个问题,映射是有意义的。哈希映射或树映射允许快速查找。
b)如何显示当前流行的股票(即销售最活跃和最不活跃的股票量,在特定日期的高利润和损失)?
几乎任何排序的数据结构在这里都是有意义的(具有上述映射指向正确节点或指向同一节点)。一个用于活动,一个用于利润。
我可能会选择一个排序的(双)链表。它花费最少的时间来获取第一个或最后一个n项。由于您通过地图拥有元素的指针,所以更新所需的时间与地图查找加上将该项移动到其所需排序位置的次数相同(如果有)。如果一个项目经常同时移动多个索引,则链表不是一个好的选择(在这种情况下,我可能会选择二叉搜索树)。
c)如何持久地存储所有事务数据?
我理解这个问题是-如果在任何时候连接到数据库丢失或数据库关闭,如何确保没有数据损坏?如果不是这样,我会要求重新表述。
几乎任何数据库课程都应该涵盖此内容。
据我所记 - 它与创建另一个记录、更新此记录以及仅在完全更新此记录后将真实指针设置为此记录有关。在此之前,您可能还需要设置对旧记录的指针,以便在指针离开但在删除之前发生某些事情时检查是否已删除。
另一种选择是拥有一个活动事务表,在开始事务时添加并在事务完成时删除(它还存储了回滚或恢复事务所需的所有详细信息)。因此,每当一切正常时,您都会检查此表,并回滚或恢复尚未完成的任何事务。