19最短摘要問題

2021-07-03 06:04:48 字數 1506 閱讀 3098

結構之法

」,便會在第乙個搜尋結果中看到:」

程式設計師面試、演算法研究、程式設計藝術、紅黑樹

4大經典原創系列集錦與總結

july--

結構之法演算法之道

blog

2023年10

月-2023年6

月。出處:

這段文字就是摘要。那麼,這段摘要是怎麼產生的呢?可以對問題進行如下的簡化。

1:假設給定的已經是經過網頁分詞之後的結果,詞語序列陣列為w。其中w[0], w[1],…, w[n]為一些已經分好的詞語。

這樣,生成的最短摘要實際上就是一串相互聯絡的分詞序列。比如從w[i]到w[j],其中,0

思路一:

在分析問題之前,先看下下面這個w-q序列:w0,w1,w2,w3,q0,w4,w5,q1,w6,w7,w8,q0,w9,q1

由此,我們可以得出解決此問題的思路,如下:

3:依次操作下去,一直到遍歷至目標陣列w的最後乙個位置為止。

最終,通過比較,咱們確定如下分詞序列作為最短摘要。這個演算法的時間複雜度為:o(n^2 * m)。

思路二:

我們試著降低此問題的複雜度。因為上述思路一再進行查詢的時候,總是重複地迴圈,效率不高。那麼怎麼簡化呢?先來看看這些序列:

w0,w1,w2,w3,q0,w4,w5,q1,w6,w7,w8,q0,w9,q1

問題在於,掃瞄肯定是無法避免的,但是如何把兩次掃瞄的結果聯絡起來呢?這是乙個值得考慮的問題。

w0,w1,w2,w3,q0,w4,w5,q1,w6,w7,w8,q0,w9,q1

那麼,下次掃瞄應該怎麼辦呢?先把第乙個被掃瞄的位置挪到q0處後的一格:w0,w1,w2,w3,q0,w4,w5,q1,w6,w7,w8,q0,w9,q1

這樣,問題就和第一次掃瞄時碰到的情況一樣了。依次掃瞄下去,在w中找出所有包含q的序列,並且找出其中的最小值,就可得到最終的結果。程式設計之美上給出了如下參考**:

int  ntargetlen = n + 1;           // 設定目標長度為總長度+1 

int  pbegin = 0;                     // 初始指標 

int  pend = 0;                       // 結束指標 

int  nlen = n;                       // 目標陣列的長度為n 

int  nabstractbegin = 0;           // 目標摘要的起始位址 

int  nabstractend = 0;           // 目標摘要的結束位址 

while(true)   

while(isallexisted())   

pbegin++; 

}  if(pend >= n) 

break; 

(

電腦摘要問題

如果該事件產生於另一台計算機,則必須在該事件中儲存顯示資訊。以下是包含在事件中的資訊 error in d w7rtm enduser databaseaccess src mdac odbc core dm perf.c 537 系統找不到指定的檔案。failed to query hkey lo...

最短摘要生成

問題定義 給定乙個字串str,以及乙個關鍵字字串陣列key,求str中包含key中所有字串的最短子串。基本方法 雙指標掃瞄字串 詳細演算法 1.使用start和end兩個整數來指示掃瞄位置。均初始化為0。2.對end加1,直到str start,end 中包含所有關鍵字,或者end strlen s...

最短摘要生成

題目 抽象點說,就是在乙個字串中,找一些目標字串,找到包含所有目標字串的最小字串。題目雖然叫做最短摘要生成,但和實際的搜尋snippet的計算還是有比較大的差距的。先來看看這些序列 w0,w1,w2,w3,q0,w4,w5,q1,w6,w7,w8,q0,w9,q1 w0,w1,w2,w3,q0,w4...