BF算法示意圖解
字符串匹配的BF算法
蠻力算法 (BF算法)
蠻力算法(Brute-Force),簡稱BF算法。
算法思想
BF算法的算法思想是:
從目標串T的的第一個字符起與模式串P的第一個字符比較。
若相等,則繼續對字符進行后續的比較;否則目標串從第二個字符起與模式串的第一個字符重新比較。
直至模式串中的每個字符依次和目標串中的一個連續的字符序列相等為止,此時稱為匹配成功,否則匹配失敗。
通過下圖示例,可一目了然:
算法性能
假設模式串的長度是m,目標串的長度是n。
最壞的情況是每遍比較都在最后出現不等,即沒變最多比較m次,最多比較n-m+1遍。
總的比較次數最多為m(n-m+1),因此BF算法的時間復雜度為O(mn)。
BF算法中存在回溯,這影響到效率,因而在實際應用中很少采用。
以下為代碼演示:
C語言代碼如下所示:
#include <stdio.h>
int BF(char S[],char T[])
{
int index=0;
int i=0;
int j=0;
while(S[i]!='\0'&&T[j]!='\0')
{
if(S[i]==T[j])
{
//如果匹配成功,則繼續比較下一對字符
i++;
j++;
}
else
{
//如果匹配不成功,主串和子串回溯坐標。index記錄的是每次匹配時的開始位置
index++;
i=index;
j=0;
}
}
if(T[j]=='\0') return index+1;
else return 0;
}
int main()
{
char a[30];
printf("請輸入主串:");
gets(a);
char b[10];
printf("請輸入子串:");
gets(b);
printf("匹配的開始位置是:%d",BF(a,b));
return 0;
}
運行效果圖:
C++代碼如下:
#include <iostream>
#include <string.h>
using namespace std;
int BF(string S,string T)
{
int index=0;
int i=0;
int j=0;
while(S[i]!='\0'&&T[j]!='\0')
{
if(S[i]==T[j])
{
i++;
j++;
}
else
{
index++;
i=index;
j=0;
}
}
if(T[j]=='\0') return index+1;
else return 0;
}
int main()
{
string A;
cout<<"請輸入主串:";
cin>>A;
string B;
cout<<"請輸入子串:";
cin>>B;
cout<<"串在主串首次匹配的位置是:"<<BF(A,B)<<endl;
return 0;
}
運行效果圖:
智能推薦
(10)Java中內存示意圖(其一)
程序是靜態的,存在于硬盤上,只有Load到內存中經過操作系統相關代碼調用后分配內存開始運行,Java代碼中又把內存分為4塊兒,如下圖:heap堆、stack棧、data segment、code segment。 八大基本類型與引用類型在內存中的區別: 八大基本類型在內存中只有一塊兒內存 而引用類型占兩塊兒內存 類和對象在...
GMT繪制研究區示意圖(圖中圖)
. . 數語記吾學,以備不時之需,若遇同仁愿得賜教。 . . GMT繪制青藏高原某湖泊 ,GMT中文手冊104頁已有詳細介紹,僅做部分修改。 inset begin 定義了小圖的位置位于大圖左下角(-DjBL),小圖區域的寬度為 3 厘米,高度為 3.6 厘米(+w3c/3.6c),并且相對大圖左下角偏移 0.1 厘米(+o0.1c)。同時還設置了小圖區域的背景色為白色(+gwhite),并繪制了...
python程序構成、對象組成、內存示意圖
一、python程序的構成 1. Python 程序由模塊組成。一個模塊對應 python 源文件,一般后綴名是:.py。 2. 模塊由語句組成。運行 Python 程序時,按照模塊中語句的順序依次執行。 3. 語句是 Python 程序的構造單元,用于創建對象、變量賦值、調用函數、控制語句等。 4. python使用交互式環境,每次只能執行一條語句。 5. 代碼的組織和縮進:python通過縮進...
猜你喜歡
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...