2012-10-10 102 views
3

我需要postgresql中最長的普通子序列函數。典型的安裝不起作用。我在plpgsql上編寫代碼,但效果很慢。有這樣的功能postgres一些插件(或東西)?最長的普通子序列Postgresql

編輯:我需要比較2個字符串,但不與=運算符和不喜歡。例如,如果我必須找到abcba,結果可以是adbcbdac。爲此,我想實現LCS(最長公共常量,不是字符串)

編輯:我發現postgre的一些擴展稱爲fuzzystrmatch,但它只適用於最大255byte文本。有人知道這種擴展的一些模擬?

+0

請告訴我們更多關於你編碼的算法。你是否知道這是一個NP難題? –

+0

是的,我現在是NP難。我有2個序列和編碼的動態O(N^2)解決方案 –

+0

在DBA SE有一些類似的請求/答案,例如代碼: http://dba.stackexchange.com/a/15808/13250 P.S.你的算法是基於Hirschberg的? –

回答

1

我同意Erwin,Craig和鹿獵人的看法,你可以通過告訴我們你正在做什麼樣的比較來提供更多信息? 假設您比較文本文件,並且比較完整的行就足夠了。 然後你可以比較從最短文件到最長文件行的行數。比較有三種可能性: 1.來自文件A的行與文件B中的任何行不匹配 2.來自文件A的行與文件B中的行匹配。 3.來自文件A的行確實比賽和兩條線都是前一場比賽的連續比賽。 如果是情況1關閉任何打開的對象。如果存在打開的對象,請將其添加到數組中。如果是情況2並且沒有開放對象,則創建一個新對象。如果有一個打開的對象,那麼它應該是一個3號的情況,因此將該行(或者亞麻布)添加到打開的對象中。 運行這兩個文件執行此比較,你會發現你的答案,因爲具有最大行數(或字符數)的對象將是你的LCS。

然而,我會執行這種操作在另一種語言,然後plpgsql。在我的情況下,它會是Java或PHP。只需將數據轉換成這種類型的語言並完成這項工作。這些語言對這種行爲來說要好得多。