KMP中的一些技巧( )

2021-08-07 07:31:40 字數 1061 閱讀 3611

以下是我看的描述最小迴圈節能讓我看懂的一篇部落格~~~

先簡單介紹一下kmp演算法利用 nxt 陣列求最小迴圈節的原理:

假設圖中的黑色是原來的字串,現在要求最小迴圈節,對於nxt[len]來說指的是圖中藍色和黃色的長度,而且藍色和黃色是相等的,

那麼綠色和紫色也是相等的,,對比原串可知紫色跟粉色是相同的子串,那麼綠色跟粉色相同,然後對比藍色跟黃色可知紅色跟粉色相同,對比原串,紅色跟棕色相同,那麼棕色跟粉色相同,不斷重複此過程可知若此字串有最小迴圈節,那麼迴圈次數一定為len/(len-nxt[len])。

結論:如果len%(len-nxt[len])=0,那麼迴圈次數為len/(len-nxt[len]),否則為1,所以最小迴圈節就等於len-nxt[len]。在我的寫法中應該是len-nxt[len-1],因為我的陣列是從0開始迴圈的。

如圖,假設黑色線來代表字串str,其長度是len,紅色線的長度代表next[len],根據next陣列定義易得字首的next[len]長度的子串和字尾next[len]長度的子串完全相同(也就是兩條線所對應的位置)。我們再求出next[len]位置處的next值,也就是圖中藍線對應的長度。同樣可以得到兩個藍線對應的子串肯定完全相同,又由於第二段藍線屬於左側紅線的字尾,所以又能得到它肯定也是整個字串的字尾。

所以要求前字尾中共同出現的子串只用求出len處的next值向下遞迴,直到為0的時候。即,next[len] , next[next[len]],…….

在做題的時候發現的乙個賊厲害的函式,這個是string型別的函式。

有兩個引數。例如:

#include

using

namespace

std;

int main()

哇,好用的一批~窒息~~~~

Pycharm中的一些技巧

作為乙個工具控,不來總結點pycharm的使用技巧怎麼行呢?1 遠端 編輯 除錯 這類使用情景就是,比如遠端機器是執行centos系統的伺服器,本地主機是安裝了pycharm的os x。要在本地寫 遠端機器上執行除錯。首先,新建乙個專案 目前還是乙個空專案 配置遠端python直譯器。並且設定ssh...

iOS中的一些除錯技巧

程式設計師每天接觸最多的就是物件 自己主動new的 和bug,而在開發中掌握一些除錯技巧是很有用的,今天工作中遇到了乙個bug搞得心好累,晚上就寫一點自己除錯中會用到的方法。所以就先講乙個和編譯器有關的除錯技巧 一.lldb除錯命令 lldb 是llvm 下的偵錯程式,xcode從4.0開始編譯器開...

編碼中的一些優化技巧

減少指令數 1.降低資料精度 小數點後面位數越多,精度越大。100.11比100.1更加精確。越是精確的資料,所用的位數越多。運算時間越長。浮點數有雙精度和單精度之分,單精度浮點數佔32bit,雙精度浮點數佔64bit,處理雙精度資料自然要比單精度資料慢。在c語言中,fabsf 是計算單精度浮點數絕...