我想知道我怎麼會能夠運行一個SQLite爲了通過這種方式使用Jaro-Winkler距離算法進行排序?
select * from contacts order by jarowinkler(contacts.name,'john smith');
我知道Android有與用戶定義函數的一個瓶頸,我有選擇嗎?
我想知道我怎麼會能夠運行一個SQLite爲了通過這種方式使用Jaro-Winkler距離算法進行排序?
select * from contacts order by jarowinkler(contacts.name,'john smith');
我知道Android有與用戶定義函數的一個瓶頸,我有選擇嗎?
第1步:執行查詢減去ORDER BY
部分
第2步:創建一個CursorWrapper
它包裝你的Cursor
,計算出每個位置的哈羅 - 溫克勒距離排序的位置,然後使用排序位置當覆蓋所有需要位置的方法時(例如,moveToPosition()
,moveToNext()
)。
預先計算字符串長度並將它們添加到單獨的列中。然後按照那個長度對退出的表格進行排序。添加索引(如果可以的話)。然後添加額外的過濾器,例如您不想比較「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的工作速度非常快。
我正在做類似於Java的工作,但在計算N x M個步驟時花費了很多時間,腳本在300 x 500上運行2-3分鐘。 – Pentium10 2010-05-17 11:16:21
我不清楚「N x M steps」來自哪裏。如果在Java中計算速度太慢,請使用NDK。 – CommonsWare 2010-05-17 13:44:34
我正在做一個人同步數據庫,1端有N條記錄,另一條有M條記錄,我在他們的名字上運行jaro-winkler距離算法以匹配最好的數據。 – Pentium10 2010-05-17 15:52:50