bm演算法原理
① 晶元CD4060BM的作用 工作原理及各引腳的作用是什麼
CD4060是一個計數器。在CP1(和CP0)的下降沿計數器以二進制進行計數。
引腳功能:
CP0:時鍾輸出端
/CP0:反相時鍾輸出端
Q4~Q10,Q12~Q14:計數器輸出端
/Q14:第14級計數器反相輸出端
VDD:電源正
VSS:電源負
CR:清零端
晶元特性:
CD4000系列的晶元,除了跟74系列的電氣特性有所區別外,例如:
CD4060晶元
1) 電壓范圍寬,應該可以工作在3V~15V,輸入阻抗高,驅動能力差外,跟74系列
的功能基本沒有區別;
2) 輸入時,1/2工作電壓以下為0,1/2工作電壓以上為1;
3) 輸出時,1=工作電壓;0=0V
4) 驅動能力奇差,在設計時最多隻能帶1個TTL負載;
5) 如果加上拉電阻的話,至少要100K電阻;
6) 唯一現在使用的可能就是計數器,CD4060的計數器可以到14級二進制串列計數
新手不理解的話,可以用multisim軟體模擬一下。
② kmp演算法、bm演算法、qs演算法 是計算機專業本科必學的嗎 如果不是的話 那是什麼時候學的
你的問題語句有錯 啊,我不記得什麼時候學的,我們老師就是講講,理解知道怎麼用就好了,很糾結么
③ bm是什麼考試
bm證書的作用為:不僅能通過建築工程原理建立信息模型,還能通過對真實數據的分析去發現問題,解決問題,從而提高工作能力和效益。
④ bm演算法求出的視差圖是什麼類型值
preFilterType:預處理濾波器的類型,主要是用於降低亮度失真(photometric distortions)、消除雜訊和增強紋理等, 有兩種可選類型:CV_STEREO_BM_NORMALIZED_RESPONSE(歸一化響應) 或者 CV_STEREO_BM_XSOBEL(水平方向Sobel運算元,默認類型), 該參數為 int 型;
preFilterSize:預處理濾波器窗口大小,容許范圍是[5,255],一般應該在 5x5..21x21 之間,參數必須為奇數值。
⑤ BM演算法可以用來匹配中文么中文精確匹配演算法最好用什麼
可以匹配,原理都一樣
⑥ 指出BM演算法與KMP演算法的區別
KMP演算法和BM演算法,它們分別是前綴匹配和後綴匹配的經典演算法。
1、因為路由表中的每個表項都指定了一個網路,所以一個目的地址可能與多個表項匹配。最明確的一個表項,即子網掩碼最長的一個,就叫做最長前綴匹配。
2、之所以這樣稱呼它,是因為這個表項也是路由表中,與目的地址的高位匹配得最多的表項。
⑦ BM演算法字元比較次數
J9eOR7不pPRR-吧
⑧ 求字元串匹配BM演算法的代碼,要c或者c++的。
BM演算法的C語言實現:
// 函數:int* MakeSkip(char *, int)
// 目的:根據壞字元規則做預處理,建立一張壞字元表
// 參數:
// ptrn => 模式串P
// PLen => 模式串P長度
// 返回:
// int* - 壞字元表
int* MakeSkip(char *ptrn, int pLen)
{
int i;
//為建立壞字元表,申請256個int的空間
//PS:之所以要申請256個,是因為一個字元是8位,
// 所以字元可能有2的8次方即256種不同情況
int *skip = (int*)malloc(256*sizeof(int));
if(skip == NULL)
{
fprintf(stderr, "malloc failed!");
return 0;
}
//初始化壞字元表,256個單元全部初始化為pLen
for(i = 0; i < 256; i++)
{
*(skip+i) = pLen;
}
//給表中需要賦值的單元賦值,不在模式串中出現的字元就不用再賦值了
while(pLen != 0)
{
*(skip+(unsigned char)*ptrn++) = pLen--;
}
return skip;
}
// 函數:int* MakeShift(char *, int)
// 目的:根據好後綴規則做預處理,建立一張好後綴表
// 參數:
// ptrn => 模式串P
// PLen => 模式串P長度
// 返回:
// int* - 好後綴表
int* MakeShift(char* ptrn,int pLen)
{
//為好後綴表申請pLen個int的空間
int *shift = (int*)malloc(pLen*sizeof(int));
int *sptr = shift + pLen - 1;//方便給好後綴表進行賦值的指標
char *pptr = ptrn + pLen - 1;//記錄好後綴表邊界位置的指標
char c;
if(shift == NULL)
{
fprintf(stderr,"malloc failed!");
return 0;
}
c = *(ptrn + pLen - 1);//保存模式串中最後一個字元,因為要反復用到它
*sptr = 1;//以最後一個字元為邊界時,確定移動1的距離
pptr--;//邊界移動到倒數第二個字元(這句是我自己加上去的,因為我總覺得不加上去會有BUG,大家試試「abcdd」的情況,即末尾兩位重復的情況)
while(sptr-- != shift)//該最外層循環完成給好後綴表中每一個單元進行賦值的工作
{
char *p1 = ptrn + pLen - 2, *p2,*p3;
//該do...while循環完成以當前pptr所指的字元為邊界時,要移動的距離
do{
while(p1 >= ptrn && *p1-- != c);//該空循環,尋找與最後一個字元c匹配的字元所指向的位置
p2 = ptrn + pLen - 2;
p3 = p1;
while(p3 >= ptrn && *p3-- == *p2-- && p2 >= pptr);//該空循環,判斷在邊界內字元匹配到了什麼位置
}while(p3 >= ptrn && p2 >= pptr);
*sptr = shift + pLen - sptr + p2 - p3;//保存好後綴表中,以pptr所在字元為邊界時,要移動的位置
// PS:在這里我要聲明一句,*sptr = (shift + pLen - sptr) + p2 - p3;
// 大家看被我用括弧括起來的部分,如果只需要計算字元串移動的距離,那麼括弧中的那部分是不需要的。
// 因為在字元串自左向右做匹配的時候,指標是一直向左移的,這里*sptr保存的內容,實際是指標要移動
// 距離,而不是字元串移動的距離。我想SNORT是出於性能上的考慮,才這么做的。
pptr--;//邊界繼續向前移動
}
return shift;
}
// 函數:int* BMSearch(char *, int , char *, int, int *, int *)
// 目的:判斷文本串T中是否包含模式串P
// 參數:
// buf => 文本串T
// blen => 文本串T長度
// ptrn => 模式串P
// PLen => 模式串P長度
// skip => 壞字元表
// shift => 好後綴表
// 返回:
// int - 1表示成功(文本串包含模式串),0表示失敗(文本串不包含模式串)。
int BMSearch(char *buf, int blen, char *ptrn, int plen, int *skip, int *shift)
{
int b_idx = plen;
if (plen == 0)
return 1;
while (b_idx <= blen)//計算字元串是否匹配到了盡頭
{
int p_idx = plen, skip_stride, shift_stride;
while (buf[--b_idx] == ptrn[--p_idx])//開始匹配
{
if (b_idx < 0)
return 0;
if (p_idx == 0)
{
return 1;
}
}
skip_stride = skip[(unsigned char)buf[b_idx]];//根據壞字元規則計算跳躍的距離
shift_stride = shift[p_idx];//根據好後綴規則計算跳躍的距離
b_idx += (skip_stride > shift_stride) ? skip_stride : shift_stride;//取大者
}
return 0;
}
⑨ BM演算法好後綴問題
BM演算法,是Berlekemp_Massey演算法嗎!?
沒上面那麼費勁吧?
想要的話,明天把我的給你.....
說明我只是為了求出結果,並沒有考慮其它的因素,所以比較簡單
暈,我以為是移位寄存器里的BM演算法....
⑩ 下面是BM演算法的C語言源碼,小弟看的不是太懂,求高手在重點位置加點標注既對每行代碼解釋一下,謝謝。。。
Dijkstra演算法--c++源代碼--by 偉偉豬 [轉貼 2005-12-15 20:21:00 ] 發表者: 偉偉豬
/***********************************************
設G=(V,E)是一個每條邊都有非負長度的有向圖,有一個特異的頂點s稱為緣。
單源最短路徑問題,或者稱為最短路徑問題,是要確定從s到V中沒一個其他
頂點的距離,這里從頂點s到x的距離定義為從s到x的最短路徑問題。這個問題
可以用Dijkstra演算法解決。下面我給我了c++下的源代碼! --by 偉偉豬
************************************************/
#include<iostream.h>
void main()
{
int infinity=100,j,i,n,k,t,**w,*s,*p,*d;
cout<<"input the value of n:";
cin>>n;
cout<<endl;
d=new int[n];
s=new int[n];
p=new int[n];
w=new int*[n];
for(i=0;i<n;i++)
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>w[i][j];
for(s[0]=1,i=1;i<n;i++)
{
s[i]=0;d[i]=w[0][i];
if(d[i]<infinity) p[i]=0;
else p[i]=-1;
}
for(i=1;i<n;i++)
{
t=infinity;k=1;
for(j=1;j<n;j++)
if((!s[j])&&(d[j]<t))
s[k]=1;//point k join the S
for (j=1;j<n;j++)
if((!s[j])&&(d[j]>d[k]+w[k][j]))
}
cout<<"從源點到其它頂點的最短距離依次如下:";
for(i=1;i<n;i++) cout<<d[i]<<" ";
}
/*********
頂點個數用n表示,這里給出的例子n=6
100 1 12 100 100 100
100 100 9 3 100 100
100 100 100 100 5 100
100 100 4 100 13 15
100 100 100 100 100 4
100 100 100 100 100 100
具體例子見 電子工業出版社 《演算法設計技巧與分析》148頁
************/