2010-05-17 61 views

回答

1

第1步:執行查詢減去ORDER BY部分

第2步:創建一個CursorWrapper它包裝你的Cursor,計算出每個位置的哈羅 - 溫克勒距離排序的位置,然後使用排序位置當覆蓋所有需要位置的方法時(例如,moveToPosition(),moveToNext())。

+0

我正在做類似於Java的工作,但在計算N x M個步驟時花費了很多時間,腳本在300 x 500上運行2-3分鐘。 – Pentium10 2010-05-17 11:16:21

+0

我不清楚「N x M steps」來自哪裏。如果在Java中計算速度太慢,請使用NDK。 – CommonsWare 2010-05-17 13:44:34

+0

我正在做一個人同步數據庫,1端有N條記錄,另一條有M條記錄,我在他們的名字上運行jaro-winkler距離算法以匹配最好的數據。 – Pentium10 2010-05-17 15:52:50

1

預先計算字符串長度並將它們添加到單獨的列中。然後按照那個長度對退出的表格進行排序。添加索引(如果可以的話)。然後添加額外的過濾器,例如您不想比較「Srivastava Brahmaputra」到「John Smith」。長度超出了怪異的程度,因此排除這種長度作爲總長度的百分比的比較。所以如果你的單詞是10個字符,只能將它與10 + -2或10 + -3個字符的單詞進行比較。

這樣你就可以大大減少這個算法運行的次數。

通常在100個000項的vocalbulary這種濾波器減少比較的次數約300除非你是做一個完全成熟的記錄鏈接,然後我會想知道爲什麼使用Android爲。你仍然需要應用概率方法和計算分數,這不是Android的工作(至少現在不行)。

MS SQL Server中哈羅溫克勒串距離包裹成CLR函數

而且性能要好得多,因爲SQL Server不supprt一陽本身和大部分處理是圍繞陣列。所以在T-SQL中的實現增加了太多的開銷,但是SQL-CLR的工作速度非常快。