你的問題很有趣,但標題是誤導。
這是您在數據模型方面需要什麼(X - 第一個字符串,Y - 第二個字符串,* - 距離矩陣)。
y <-- first string (scrolls from top down)
y
x x x x x x x x <- second string (scrolls from left to right)
y * * *
y * * *
y * * * <-- distance matrix (a donut) scrolls together with strings
and grows/shrinks when needed, as explained below
y
有兩臺相對長的(但仍然< < N)字符緩衝器和相對較小(< <緩衝器尺寸)的矩形距離矩陣(正方形從開始)。
使矩陣成爲一個donut - 二維環形緩衝區(可以使用boost中的一個,或者僅使用std :: deque)。
噹噹前由矩陣覆蓋串的片段是100%匹配由一個移位兩個緩衝器,旋轉兩軸周圍的圓環,重新計算一個新的行/在距離矩陣列。
如果匹配爲< 100%且小於配置的閾值,則增加甜甜圈的兩個維度的大小而不丟棄任何行/列,並執行此操作,直到任一匹配達到閾值以上或達到最大甜甜圈大小。當匹配率從下面達到閾值時,您需要滾動圓環丟棄x和y緩衝區的頭部,並同時對齊它們(當距離矩陣表明X [i]不存在於Y中時,只需要X移動1 ,但是X [i + 1,i + m]匹配Y [j,j + m-1])。
因此,您將有確定性的有限的內存佔用一個簡單但非常有效的啓發式區別引擎,並在啓動時所有的內存可以預先分配所以沒有動態分配在運行時會慢下來。
Apache v2 license,以防你決定去找它。
機器上有40 GB內存嗎?因爲這就是數組的多少。 – interjay 2014-10-05 12:50:08
你知道你的陣列需要40或80 GB嗎?你有那麼多的RAM? – deviantfan 2014-10-05 12:50:10
爲什麼你需要這麼大的陣列? – P0W 2014-10-05 12:50:22