我需要編寫一個函數來比較2-5個「文件」(實際上2-5組數據庫行,但類似的概念),我不知道如何去做。由此產生的差異應該呈現2-5個文件並排。輸出應顯示添加,刪除,更改和未更改的行,每個文件都有一列。比較五個不同的來源
我應該使用什麼算法遍歷行,從而保持低複雜度?每個文件的行數少於10,000。由於總數據大小在兆字節範圍內,因此我可能不需要External Merge。簡單易讀的代碼當然也很好,但這不是必須的。
編輯:這些文件可能來源於某些未知來源,沒有其他1-4文件可以與之比較的「原始」所有文件都必須以某種方式與其他人進行比較。
編輯2:我或者更確切地說是我的同事意識到可以對內容進行排序,因爲輸出順序是不相關的。這個解決方案意味着在這部分應用程序中使用額外的領域知識,但是差異複雜度是O(N)和較不復雜的代碼。這個解決方案很簡單,當我關閉賞金時,我會忽略這個編輯的任何答案。不過,我會回答我自己的問題以供將來參考。
您是否對線路比較或字符級比較感興趣?也就是說,如果在一組中一行是'a,b,c',另一組是'a,b,d',你是否還想讓這兩行被認爲'除了c/d'一樣?或者他們是不同的記錄,因爲他們有不同的數據? – Kaganar
@Kaganar:他們不同,但並不重要。我確定了單獨比較器中行的正交性。 –
因此,真正看到的是添加,刪除和未更改的行。 (沒有'改變'的行,那麼因爲他們會被視爲添加。)另外,給定「編輯2」你想要的是一種模糊。通過大多數定義,一組數據庫行是無序的,解決您的問題的方法是重新排序和比較。另一種方法是使用散列進行比較,然後在集合中顯示相似的行。但是,這聽起來不像是你的原始問題的核心 - 你是否真的想要以行間依賴的方式比較行的行數? – Kaganar