什么数据结构将优化以代表股市?

时间:2013-04-18 09:58:39

标签: algorithm data-structures

各种股票的数据来自各种证券交易所。哪种数据结构适合存储这些数据?

需要考虑的事项是:

a)在交易时间内每秒或每秒更改库存数据时,需要有效检索和更新数据。

  

我想过使用Heap,因为库存的数量或多或少是恒定的,最常用的操作是检索和更新,因此堆应该在这种情况下表现良好。

b)需要显示当前趋势的股票(如股票销售量最活跃且最不活跃,特定日期的高利润和亏损)

我确定如何解决这个问题。

c)因为考虑到在特定时间内交易的股票数量,使用任何编程语言存储到数据库有一些延迟,你如何持久存储所有交易数据?

Ps:这是摩根士丹利的采访问题。

3 个答案:

答案 0 :(得分:2)

堆不支持有效的随机访问(即通过索引查找),也不支持前k个元素而不删除元素(这是不需要的)。

我的回答是:

数据库将是首选,因为通过适当的表结构和索引,可以有效地完成所有必需的操作。

所以我认为这是一个关于理解数据结构的理论问题(与内存存储相关,而不是持久存储)。

似乎有多种数据结构可供选择:

  

a)在交易时间内每秒或每秒更改库存数据时,需要有效检索和更新数据。

地图对这个有意义。散列图或树形图允许快速查找。

  b)如何显示当前趋势的股票(如股票销售量最活跃和最不活跃,特定日期的高利润和损失)?

几乎任何已排序的数据结构似乎都有意义(上面的映射具有指向正确节点的指针,或指向同一节点)。一个用于活动,一个用于获利。

我可能会使用排序(双)链表。获取第一个或最后n个项目所需的时间最短。由于您通过地图有一个指向元素的指针,因此只要地图查找加上再次对其进行排序所需的该项目的移动次数(如果有的话),就会进行更新。如果一个项目经常同时移动多个索引,那么链接列表是一个不错的选择(在这种情况下,我可能会选择二进制搜索树)。

  

c)如何持久存储所有交易数据?

我理解这个问题 - 如果与数据库的连接丢失或数据库在任何时候出现故障,您如何确保没有数据损坏?如果不是这样,我会要求改写。

几乎任何数据库课程都应该涵盖这一点。

据我所知 - 它与创建另一条记录,更新此记录以及仅在完全更新后设置指向该记录的实际指针有关。在此之前,您可能还需要设置一个指向旧记录的指针,以便在设置指针之后但在删除之前检查是否已删除它。

另一个选项是拥有一个活动的事务表,您可以在启动事务时添加该事务表,并从事务完成时删除(还存储所有必需的详细信息以回滚或恢复事务)。因此,每当一切都好的时候,你检查这个表并回滚或恢复任何尚未完成的交易。

答案 1 :(得分:0)

虽然这是一个与语言无关的问题,但有一些要求在我身上跳了出来。例如:

  

需要有效检索和更新数据,因为库存数据在交易时间内每秒或微秒发生变化。

java类HashMap使用键值的哈希码来快速访问其集合中的值。它实际上具有O(1)运行时复杂性,这是理想的。

  

需要显示当前趋势的股票(如在最活跃且最不活跃的股票数量,特定日期的高利润和亏损)

这是一个基于实现的问题。您最好的办法是实施快速排序算法,例如QuickSortMergesort

  因为考虑到在特定时间内交易的股票数量,使用任何编程语言存储到数据库有一些延迟,你如何持久存储所有交易数据?

数据库本来是我的首选,但这取决于您的资源。

答案 2 :(得分:0)

如果必须选择,我会选择哈希表

原因::它是同步且线程安全的, BigO(1)作为平均案例复杂性。

提供: 1.良好的哈希功能,避免冲突。 2.高性能缓存。