2013-01-10 55 views
-1

我一直在使用Soundex算法,我發現它已經準備好用Java http://introcs.cs.princeton.edu/java/31datatype/Soundex.java.html。 該程序的主要用途是準備一個.cvs文件,然後在將其條目保存到數組後,它會藉助此算法檢查這些數組中是否存在語音相似性。 (更多關於soundex算法http://en.wikipedia.org/wiki/Soundex)。Java:使用Soundex算法建立一個龐大的數據庫

我的.cvs文件有或多或少的200.000條目,因此,需要5個小時來檢查30.000條目,這一事實我認爲很慢。 [我的算法檢查數組的所有條目,除了那些已經檢查過的 - 所以,我認爲這裏沒有問題。

所以,我的問題是: 有沒有辦法縮短這個時間?

我一直在考慮用SQL的幫助直接將數據庫連接到程序,但我不知道是否有另一種方法可以做到這一點,速度會更快。

請任何建議將是非常有益的。

+0

可能不適合SO ...但是關係數據庫在soundex集合比較方面相當不錯。當然,有很多方法可以將你的java代碼綁定到你的數據庫 - 有很多方法。 – Randy

+0

200,000不是一個龐大的數據庫。我會懷疑你的算法。您需要確保每個條目只轉換一次,因爲檢查每個條目與其他所有條目是O(N ** 2),即使您沒有進行冗餘比較也能正確執行。 – EJP

回答

1

我不知道Java算法是如何工作的。很多數據庫都包含一個soundex()函數。這將字符串轉換爲表示聲音的另一個字符串。

然後,您可以對生成的soundex字符串進行比較。

這應該比目前的方法快得多,快得多。你將不得不測試它是否返回可接受的結果。

其實,我只是看着java代碼。你可以在那裏採取相同的方法。瀏覽文件,計算每個條目的soundex。然後做比較 - 也許通過整理文件和尋找重複。

+0

嗨戈登。你對此非常正確;)當我在函數中使用算法時,我不知道我在想什麼。它改進了很多過程。我也會嘗試使用數據庫的算法,但我會接受你的答案。 –

0

只需在數據庫中使用soundex實現。大多數大型流行的數據庫都有內置的,例如PostgreSQL,MySQL甚至微軟的T-SQL。安裝起來會更容易,並且可能比您使用的任何Java庫快得多。

+0

謝謝Cerin,我也必須嘗試。我相信它也會變得更快。我會接受Gordon的答案,因爲它真的改進了java中的整個過程,而不使用其他方法。 –