我的程序經常處理大量的數據,並且它的一個特定組件根據條件創建了這些數據的一個子集。你可以認爲這是,有字符串,有什麼算法/優化計算數組元素的條件子集?
10457038005502
問題是返回的第一個五年(比方說)非0的元素,即返回:
14573
其實不然,每個該字符串的元素是包含大量數據的大數據結構,整個數據集的大小通常爲幾千兆字節,並且包含數以萬計的元素和來確定是否應該包括該元素(不是' 0')每個元素需要被處理。我已經說過了,因爲我已經明確地解釋它,並且試圖將重點放在算法或技術上,而不是我們的具體實現和數據。
- 編輯:感謝那些迄今已回覆的人。所有的建議 圍繞多線程,這 我同意是一個很好的方法,我希望 本身的問題可以被視爲 一個算法問題(我們做 有帶螺紋的任務框架這 將融入。) - 我可疑, 雖然我不知道,這是一個 一般問題適用於 搜索各種數據。 有鑑於此,一個真棒回覆將 是「Schwarzenegger等人提出的 算法X在1995年爲此,google 這個詞。」
我們當前的方法是從輸入數據集中沿着數組的第一個點開始的單線性線性搜索,計算一個元素是否需要保留,並根據需要構建結果。通常所請求的數據子集並不在開頭 - 使用字符串示例,您可能需要知道元素8-15(如果存在15,那麼在您輸入數據結束之前您可能不知道)。 )當然,我們不知道輸出數據集中的元素8是否在輸入數據集中,除非我們已經處理了遠離開始的數據集。
我們還應該如何解決這個問題?
我正在尋求任何完全不同的方法或算法來解決這類問題的輸入。
還有什麼其他方法可以解決這個問題,即快速獲取任意子集?
瞭解當前的解決方案是由於每個元素的處理量而產生的計算限制,或者更確切地說,因爲它需要生成每個元素以檢查它是否爲'0',什麼算法或你可能會建議解決這個問題嗎?有什麼辦法可以最大限度地減少程序的工作嗎?
如果它影響到特定的庫或工具,我們使用C++(不受管理;我們使用Embarcadero C++ Builder 2010。)例如,我們不能使用LINQ,如果沒有使用它,我認爲它可能是這類問題的一個有用的工具/語言功能。但是,我們當然可以實施任何算法解決方案,您通常可以在其他環境中以較少的工作來實現這些解決方案
在你的字符串(或等效的數據結構向量)中找到第一個* k *非零元素是唯一的問題,還是你有其他問題需要解決?另外,你如何檢查數據結構是否爲'0'?你是否有一個函數適用於每個返回它是否爲'0'的元素? – Jacob 2010-09-20 01:57:37
它是任何子集,即元素k-k + 100,不一定來自元素0.有一種方法,我們在每個數據結構上運行,如果返回0或不是,是的。 – 2010-09-20 02:26:06