2013-04-18 60 views
0

各種股票的數據不斷來自各種證券交易所。哪種數據結構適合存儲這些數據?什麼數據結構將優化代表股票市場?

事情要考慮的是:

一)有效的檢索和數據的需要更新爲在交易時間每秒或微秒庫存數據的變化。

我想過使用堆作爲股票的數量會或多或少是恆定的,最常用的操作是檢索和更新,所以堆應該在這種情況下執行良好。

二)需要證明這是目前的趨勢(如在送股數量正在銷售最活躍和最不活躍的,高利潤和損失在某一天)

我NT肯定有關如何股票得到了這個。 c)因爲使用任何編程語言向數據庫存儲有考慮在特定時間內交易的股票數量的一些延遲,所以如何將所有的交易數據持久地存儲???????????????????????????

Ps:這是摩根士丹利的面試問題。

+5

聽起來不像你做得很好。 – duffymo

回答

0

雖然這是一個語言不可知論的問題,但一些要求跳到我身上。例如:

由於股票數據在交易期間每秒或每秒變化,所以需要有效檢索和更新數據。

java類HashMap使用密鑰值的哈希碼快速訪問其集合中的值。它實際上有一個O(1)運行時複雜性,這是理想的。

需要顯示其當前趨勢的股票(如在送股數量正在銷售最活躍和最不活躍的,高利潤和損失在某一天)

這是一個實現了基於問題。您最好的選擇是實施快速排序算法,如QuickSortMergesort

作爲使用任何編程語言存儲到數據庫有考慮在特定時間內交易的股票數量的一些延遲,如何可以永久存儲所有交易數據?

數據庫本來是我的第一選擇,但它取決於你的資源。

+1

納斯達克上次使用SQL Server數據庫進行檢查時使用了大量的SQL Server數據庫。看起來像一個非常學術的問題。 – duffymo

+1

如果你一直在重新整理你的數據,你將* *變得越來越遠。當然這是一個基於實現的問題 - 這是一個問題。 - 第三個答案實際上只是投降。 –

1

堆不支持高效的隨機訪問(即通過索引查找),也不支持在不移除元素的情況下獲取頂部k個元素(這不是所期望的)。

我的答案是這樣的:

數據庫將是這個最佳的選擇,因爲,有一個正確的表結構和索引,所有需要的操作,可以有效地進行。

所以我認爲這是理解數據結構(與內存存儲相關,而不是持久存儲)的理論問題。

看來多個數據結構是要走的路:

一)有效的檢索和數據的更新,需要爲在交易時間每秒或微秒庫存數據的變化。

一張地圖對這個地圖很有意義。散列圖或樹形圖允許快速查找。

二)如何證明這是目前的趨勢股票(如在送股數量正在銷售最活躍的某一天不活躍,高利潤和虧損)?

幾乎任何已排序的數據結構在這裏似乎都有意義(上面的映射具有指向正確節點的指針或指向同一節點)。一個用於活動,另一個用於獲利。

我可能會去排序(雙)鏈表。獲得第一個或最後n個項目所需的時間很短。既然你有一個通過地圖指向元素的指針,只要地圖查找加上需要重新排序的項目的移動次數(如果有的話)就會進行更新。如果一個項目一次移動很多索引,鏈接列表將而不是是一個很好的選擇(在這種情況下,我可能會去一個二進制搜索樹)。

c)如何持久地存儲所有的事務數據?

我明白這個問題 - 如果數據庫的連接丟失或數據庫在任何時候發生故障,您如何確保沒有數據損壞?如果不是這樣,我會要求改寫。

幾乎任何數據庫課程都應該涵蓋這一點。

據我所知 - 它與創建另一條記錄,更新此記錄有關,並且只有在完全更新後才設置指向此記錄的實際指針。在此之前,您可能還必須設置一個指向舊記錄的指針,以便在設置指針後但刪除之前發生某些情況時,檢查它是否已被刪除。

另一種選擇是在啓動事務時添加到活動事務表並從事務完成時刪除(也存儲所有必需的詳細信息以回滾或恢復事務)。因此,每當一切都恢復正常時,您可以檢查該表並回滾或恢復任何尚未完成的交易。