2010-04-20 61 views
2

我開發一個應用程序(在C#),其中對象之下的時間段是活動的,它們具有和爲DateTime型的性質。現在,我想加快我的搜索例程查詢,例如:此時此期間是否存在其他活動對象。搜索時間數據

是否有任何現有的時間索引我可以用我也可以用四叉樹/其它樹木結構以高效的方式進行搜索。

回答

1

你也應該看看的interval tree

在計算機科學中,區間樹 是一個有序的樹狀數據結構 保持區間。具體來說,它允許人們有效地找到與任何給定的 區間或點重疊的所有 區間。

而這讓我想起了這個SO question

1

爲什麼不只是爲了在列表中的數據,然後使用二進制搜索算法一樣,限制你考慮的對象的數量。

0

這是一個有趣的排序問題,因爲你需要同時考慮每個元素的開始和結束日期。如果您使用了簡單的排序算法,那麼您可以按開始日期或結束日期進行排序,但兩者排序都不會很有效,因爲具有較早開始日期的元素可能會有非常晚的結束日期,或者元素如果開始日期較晚,可能會有一個早期結束日期,這意味着您無法根據標準對此列表進行真正的預先排序「這些元素中的任何一個現在都處於活動狀態嗎?」

如果你正在尋找一個超級有效的機制來做到這一點,我可能沒有給你一個答案,但如果你只是尋找一些容易做到與現有的C#的數據結構,我會考慮創建兩個排序列表,一個按開始日期排序,另一個按結束日期排序。在開始日期排序列表中搜索現在之前開始的元素,並在結束日期排序列表中搜索現在結束後的元素。將這些結果相交以獲得最終答案。

正如我所提到的,我確信有一個更有效的機制來做到這一點,但如果我想保持簡單並使用我已有的功能,我會考慮這樣做。

+0

我的想法,我認爲我沒有仔細想過這件事。我認爲我的建議會相當低效。 – 2010-04-20 17:53:46

0

有圖書館的i4o(的對象索引)。可能會有用。