結構之法
」,便會在第乙個搜尋結果中看到:」
程式設計師面試、演算法研究、程式設計藝術、紅黑樹
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...