模式匹配

2024-06-07

模式匹配(精选12篇)

模式匹配 篇1

摘要:在长度为N的主串S中查找是否存在长度为M的模式串T, 叫模式匹配问题。对于N和M均非常大的情况, 概率算法求解此问题的效率比朴素算法和KMP算法要高。通过比较两个长度均为M的串的关联数是否相同, 来确定这两个串是否相同。如果某它们的关联数不同, 则这两个串一定不同;如果它们的关联数相同, 则它们不同的概率很小, 可忽略认为它们相同, 也可将它们按位比较以便准确判断它们是否相同。本文计算长度为M的串的关联数的算法复杂度为O (1) 。

关键词:概率算法,模式匹配,关联数,主串,模式串,时间复杂度

1 前言

给定的符号模式是否出现在是一个很长的文本中, 通常将此问题称为模式匹配。分析DNA序列和其他各种基因相关项目的结果, 涉及的算法学上的核心问题是模式匹配问题。求解模式匹配问题的常用算法有朴素算法和KMP算法。朴素算法的效率很低, 时间复杂度为O (n*m) [1,2,3,4,5]。KMP算法仅当主串与模式间存在许多“部分匹配”的情况下才能显示出它的高效率O (n+m) [1,2,3,4,5]。本文使用概率算法求解模式匹配问题, 此算法特别适用于模式串非常长的情形。

2 模式匹配问题的概率算法

2.1 算法的基本思想

模式匹配问题具体描述为, 在长度为N的主串S中查找是否存在长度为M的模式串T。概率算法求解模式匹配问题的基本思想是, 将主串S中每个长度为M的符号串关联一个数, 然后随着算法穿过S, 依次考虑每M个符号的块所关联的数与模式串T所关联的数是否相同。若某相邻M个符号所关联的数与模式串T所关联的数不相同, 则它们一定不同;如果它们所关联的数相同, 则它们不相同的概率很小, 完全可将其忽略, 认为它们是相同的。[6]为了使概率算法的时间复杂度尽可能小, 每M个符号的块所关联的数必须满足以下条

件: (1) 要比M短, 理想情况下为logM。 (2) 计算这个数所需的时间不能超过O (M) , 理想情况下为常量时间。可见, 简单地将M个符号的块翻译成数字是不能满足这两个条件的。

我们可以随机产生一个长度为logM的素数Prim, 用M个符号的块直接翻译成的数字除以Prim, 所得的余数就是M个符号的块所关联的数。可以看出, 这样所求的关联数满足上述条件 (1) , 因为M个符号的块直接翻译成的数字除以素数Prim的余数位于0到Prim-1之间, 所以它的长度不超过Prim的长度logM。下面重点看一下它是否满足上述条件 (2) 。

假定主串S和模式串T都是由26个英文字母组成的, 将它们分别看作一个很长的二十六进制数, 每位数的可能取值分别A、B、…、Z, 其中A相当于数值0、Z相当于数值25。一般情况下, 计算M位数除以某个素数Prim的余数所需的时间, 和M有关。但是, 可以利用已计算出余数的M位数, 来计算下一个M位数除以Prim的余数。为此, 需从主串S的最后一个字符开始, 即首次取出的M位数是S的倒数第M到倒数第1个字符组成的, 第2次取出的M位数是S的倒数第 (M+1) 到倒数第2个字符组成的。例如, 考虑S=“A C E F S D S E C W U YTWVBNMCCXZDEFRGGLKPOIU…..”, 令T的长度M=8, 假设我们已经到达第5个位置, 数SDSECWUY除以随机产生的素数prim的余数已经计算出来, 接下来要计算FSDSECWU除以prim的余数。因为FSDSECWU=FAAAAAAA+ (SDSECWUY-Y) ÷26, 所以FSDSECWU除以Prim的余数可通过FAAAAAAA除以Prim的余数和SDSECWU除以Prim的余数经过简单加减运算而求得。FAAAAAAA中的实际上是F×267, 这样的数共有25个, 所以可提前将它们除以P r i m的余数计算出来并存放在一个数组中。而SDSECWU除以Prim的余数可通过SDSECWUY除以prim的余数、此余数的最后一位数字及商的最后一位数字经过简单算术计算而求得。可见, 计算M个数字的数除以Prim的余数可在常数时间内完成。

总上所述, 随机产生一个长度为LogM的素数, 将每M个字符的块直接翻译成一个数, 然后用这个数除以素数所得余数, 就是M个字符的块所关联的数。而且此关联数的计算可在常数时间内完成。

2.2 算法的具体步骤

根据2.1中概率算法的基本思想, 这里给出概率算法的具体实现过程。

在长度为N的主串S中查找是否存在长度为M的模式串T的概率算法的具体步骤如下: (1) 随机产生一个含LogM位数字的二十六进制素数, 将其按位存放在数组prim中;

(2) 计算模式串T直接翻译成的数除以prim的余数, 并存放于数组tmod中;

(3) 定义整型变量s_location, 并令s_location=N-M+1;

(4) 事先计算出A×26M-1, B×26M-1, C×26M-1, ……, Z×26M-1除以prim的余数, 并存放于二维数数组mid (26行M列) 中;

(5) 将主串S的第s_location至第s_location+M-1个符号取出, 存放于字符串ss中;并计算ss直接翻译成的二十六进制数除以prim的余数, 存放于数组smod中;

(6) 判断smod与tmod是否相同, 如果不同, 转7) ;否则, 按位比较字符串ss和T, 判断ss和T是否相同, 如果相同, 说明在S中找到了T, 算法结束, 否则转7) ;

(7) s_location=s_location-1;

(8) 如果s_location等于0, 说明在S中不存在模式串T, 算法结束;否则转9) ;

(9) 取出主串S的第s_location个字符, 并将其赋给变量num;

(10) 如果主串S的第s_location+M个字符大于数组smod的最后一个元素, 则将它们的差赋给变量x;否则将它们的差加26赋给变量x;

(11) 根据x的值和prim的最后一个元素的值, 可得出前面的M个字符直接翻译成的数除以prim的商的最后一位数y;

(12) 将y*prim+smod按位赋给数组remain;并将remain的最后一位删除掉;

(13) 如果mid[num-‘A’]+remain>prim, smod=mid[num-‘A’]+remain-prim;否则smod=mid[num-‘A’]+remain;转6) 。

上述算法中的加减运算均在26进制下进行。

注意, 上述算法的前提条件是, 主串和模式串均由二十六个字母组成, 所以每M个符号所关联的数是一个二十六进制数。如果主串与模式串中的字符不止有26个可能的取值, 是一个比较大的数, 则本文的算法就不再方便了;如果主串与模式串中的字符不足26种, 例如是10种, 那么随机产生的素数就是十进制数, 而且每M个字符的块所关联的数也是十进制数了。比如, DNA序列中只有T、G、C、A四种字符, 所以如果模式匹配的是DNA序列, 每M个符号的块所关联的数就可以是四进制数。

其实, 算法中的运算均是按位进行的。所以, 是几进制数关系并不大。

3 概率算法与朴素算法比较

朴素算法的基本运算是比较。使用朴素算法最坏情况下需比较 (N-M+1) *M次。如果M非常大, 如为十亿, 则朴素算法的执行速度会非常慢。概率算法的基本运算是算术加或减。概率算法的一个核心操作是计算M个字符所关联的数, 即将M个字符直接翻译成某进制数, 并求此数除以随机素数的余数。此核心操作最坏情况下需进行算术加或减C*logM* (M-logM+1) 次, 这里C是常数, 表示数制。此核心操作在整个概率算法中最多进行C+1次, 一次是求模式串所关联的数;一次是求主串的最后M个字符所关联的数;其余是求形如“常数×CM-1”的数除以那个素数的余数。概率算法余下的操作是根据已求得的M个字符所关联的数来计算下一个M个字符的块所关联的数, 此操作最多进行N-M次, 每次需进行基本算术运算最多4* (logM+1) 次。[1,2,3,4,5]

从上面的分析可以看出, 如果M和N不很大, 本文的概率算法没有朴素算法有效;但是M和N越大, 本文的概率算法的使用价值越大。

参考文献

[1]鲁宏伟, 魏凯, 等.一种改进的KMP高效模式匹配算法[J].华中科技大学学报 (自然科学版) , 2006, 34 (10) :41-43.

[2]张治, 施鹏飞.一种有效的贪婪模式匹配算法[J].计算机研究与发展, 2007, 44 (11) :1903-1911.

[3]THATHOO R, VIRMANI A, et al.A fast exact pattern matching al-gorithm for biological sequences[J].Current Scence, 2006, 91 (1) :47-53

[4]Sheik S S, Aggarwal S K, et al.A fast pattern matching algorithm[J].Journal Chemical Information and Computer Science, 2004, 44 (4) :1251-1256.

[5]许峰, 满振梅, 等.数据集成领域中的模式匹配技术研究[J].计算机工程, 2006, 32 (6) :40-41.

[6]朱起定.有限元概率算法的基本理论[J].湘潭大学自然科学学报, 2001, 23 (2) :121-133.

模式匹配 篇2

一、简介

模式指在字符串中寻找的特定序列的字符,由反斜线包含:/def/即模式def,其用法如结合函数split将字符串用某模式分成多个单词:@array = split(/ /, $line);

二、匹配操作符 =~、!~

=~检验匹配是否成功:$result = $var =~ /abc/;若在该字符串中找到了该模式,则返回非零值,即true,不匹配则返回0,即false。!~则相反。这两个操作符适于条件控制中,如:

代码如下:

if ($question =~ /please/) {

print (“Thank you for being polite!n”);

}

else {

print (“That was not very polite!n”);

}

三、模式中的特殊字符

PERL在模式中支持一些特殊字符,可以起到一些特殊的作用。

1、字符 +

+意味着一个或多个相同的字符,如:/de+f/指def、deef、deeeeef等。它尽量匹配尽可能多的相同字符,如/ab+/在字符串abbc中匹配的将是abb,而不是ab。当一行中各单词间的空格多于一个时,可以如下分割:@array = split (/ +/, $line);

注:split函数每次遇到分割模式,总是开始一个新单词,因此若$line以空格打头,则@array的第一个元素即为空元素。但其可以区分是否真有单词,如若$line中只有空格,则@array则为空数组。且上例中TAB字符被当作一个单词。注意修正。

2、字符 []和[^]

[]意味着匹配一组字符中的一个,如/a[0123456789]c/将匹配a加数字加c的字符串。与+联合使用例:/d[eE]+f/匹配def、 dEf、deef、dEef、dEEEeeeEef等。^表示除其之外的所有字符,如:/d[^deE]f/匹配d加非e字符加f的字符串。

3、字符 *和?

它们与+类似,区别在于*匹配0个、1个或多个相同字符,?匹配0个或1个该字符。如/de*f/匹配df、def、deeeef等;/de?f/匹配df或def。

4、转义字符

如果你想在模式中包含通常被看作特殊意义的字符,须在其前加斜线“”。如:/*+/中*即表示字符*,而不是上面提到的一个或多个字符的含义。斜线的表示为//。在PERL5中可用字符对Q和E来转义。

5、匹配任意字母或数字

上面提到模式/a[0123456789]c/匹配字母a加任意数字加c的字符串,另一种表示方法为:/a[0-9]c/,类似的,[a-z]表示任意小写字母,[A-Z]表示任意大写字母。任意大小写字母、数字的表示方法为:/[0-9a-zA-Z]/。

6、锚模式

锚 描述

^ 或 A 仅匹配串首

$ 或 Z 仅匹配串尾

b 匹配单词边界

B 单词内部匹配

例1:/^def/只匹配以def打头的字符串,/$def/只匹配以def结尾的字符串,结合起来的/^def$/只匹配字符串def(?)。A和Z在多行匹配时与^和$不同。

例2:检验变量名的类型:

代码如下:

if ($varname =~ /^$[A-Za-z][_0-9a-zA-Z]*$/) {

print (“$varname is a legal scalar variablen”);

} elsif ($varname =~ /^@[A-Za-z][_0-9a-zA-Z]*$/) {

print (“$varname is a legal array variablen”);

} elsif ($varname =~ /^[A-Za-z][_0-9a-zA-Z]*$/) {

print (“$varname is a legal file variablen”);

} else {

print (“I don‘t understand what $varname is.n”);

}

例3:b在单词边界匹配:/bdef/匹配def和defghi等以def打头的单词,但不匹配abcdef。/defb/匹配def和 abcdef等以def结尾的单词,但不匹配defghi,/bdefb/只匹配字符串def。注意:/bdef/可匹配$defghi,因为$并不被看作是单词的部分。

例4:B在单词内部匹配:/Bdef/匹配abcdef等,但不匹配def;/defB/匹配defghi等;/BdefB/匹配cdefg、abcdefghi等,但不匹配def,defghi,abcdef。

7、模式中的变量替换

将句子分成单词:

$pattern = “[t ]+”;

@words = split(/$pattern/, $line);

8、字符范围转义

转义字符 描述 范围

d 任意数字 [0-9]

D 除数字外的任意字符[^0-9]

w 任意单词字符 [_0-9a-zA-Z]

W 任意非单词字符 [^_0-9a-zA-Z]

s 空白 [ rtnf]

S 非空白 [^ rtnf]

例:/[da-z]/匹配任意数字或小写字母。

9、匹配任意字符

字符“.”匹配除换行外的所有字符,通常与*合用。

10、匹配指定数目的字符

字符对{}指定所匹配字符的出现次数。如:/de{1,3}f/匹配def,deef和deeef;/de{3}f/匹配deeef;/de{3,}f/匹配不少于3个e在d和f之间;/de{0,3}f/匹配不多于3个e在d和f之间。

11、指定选项

字符“|”指定两个或多个选择来匹配模式。如:/def|ghi/匹配def或ghi。

例:检验数字表示合法性

if ($number =~ /^-?d+$|^-?0[xX][da-fa-F]+$/) {

print (“$number is a legal integer.n”);

} else {

print (“$number is not a legal integer.n”);

}

其中 ^-?d+$ 匹配十进制数字,^-?0[xX][da-fa-F]+$ 匹配十六进制数字。

12、模式的部分重用

当模式中匹配相同的部分出现多次时,可用括号括起来,用n来多次引用,以简化表达式:/d{2}([W])d{2}1d{2}/ 匹配:

12-05-92

26.11.87

07 04 92等

注意:/d{2}([W])d{2}1d{2}/ 不同于/(d{2})([W])121/ ,后者只匹配形如17-17-17的字符串,而不匹配17-05-91等。

13、转义和特定字符的执行次序

象操作符一样,转义和特定字符也有执行次序:

特殊字符 描述

模式内存

+ * ? {} 出现次数

^ $ b B 锚

| 选项

14、指定模式定界符

缺省的,模式定界符为反斜线/,但其可用字母m自行指定,如:

m!/u/jqpublic/perl/prog1! 等价于//u/jqpublic/perl/prog1/

注:当用字母‘作为定界符时,不做变量替换;当用特殊字符作为定界符时,其转义功能或特殊功能即不能使用。

15、模式次序变量

在模式匹配后调用重用部分的结果可用变量$n,全部的结果用变量$&。

代码如下:

$string = “This string contains the number 25.11.”;

$string =~ /-?(d+).?(d+)/; # 匹配结果为25.11

$integerpart = $1; # now $integerpart = 25

$decimalpart = $2; # now $decimalpart = 11

$totalpart = $&; # now totalpart = 25.11

四、模式匹配选项

选项 描述

g 匹配所有可能的模式

i 忽略大小写

m 将串视为多行

o 只赋值一次

s 将串视为单行

x 忽略模式中的空白

1、匹配所有可能的模式(g选项)

代码如下:

@matches = “balata” =~ /.a/g; # now @matches = (“ba”, “la”, “ta”)

匹配的循环:

while (“balata” =~ /.a/g) {

$match = $&;

print (“$matchn”);

}

结果为:

代码如下:

ba

la

ta

当使用了选项g时,可用函数pos来控制下次匹配的偏移:

代码如下:

$offset = pos($string);

pos($string) = $newoffset;

2、忽略大小写(i选项)例

/de/i 匹配de,dE,De和DE。

3、将字符串看作多行(m选项)

在此情况下,^符号匹配字符串的起始或新的一行的起始;$符号匹配任意行的末尾。

4、只执行一次变量替换例

代码如下:

$var = 1;

$line = ;

while ($var < 10) {

$result = $line =~ /$var/o;

$line = ;

$var++;

}

每次均匹配/1/。

5、将字符串看作单行例

/a.*bc/s匹配字符串axxxxx nxxxxbc,但/a.*bc/则不匹配该字符串。

6、在模式中忽略空格

/d{2} ([W]) d{2} 1 d{2}/x等价于/d{2}([W])d{2}1d{2}/。

五、替换操作符

语法为s/pattern/replacement/,其效果为将字符串中与pattern匹配的部分换成replacement。如:

代码如下:

$string = “abc123def”;

$string =~ s/123/456/; # now $string = “abc456def”;

在替换部分可使用模式次序变量$n,如s/(d+)/[$1]/,但在替换部分不支持模式的特殊字符,如{},*,+等,如s/abc/[def]/将把abc替换为[def],

替换操作符的选项如下表:

选项 描述

g 改变模式中的所有匹配

i 忽略模式中的大小写

e 替换字符串作为表达式

m 将待匹配串视为多行

o 仅赋值一次

s 将待匹配串视为单行

x 忽略模式中的空白

注:e选项把替换部分的字符串看作表达式,在替换之前先计算其值,如:

代码如下:

$string = “0abc1”;

$string =~ s/[a-zA-Z]+/$& x 2/e; # now $string = “0abcabc1”

六、翻译操作符

这是另一种替换方式,语法如:tr/string1/string2/。同样,string2为替换部分,但其效果是把string1中的第一个字符替换为string2中的第一个字符,把string1中的第二个字符替换为string2中的第二个字符,依此类推。如:

$string = “abcdefghicba”;

$string =~ tr/abc/def/; # now string = “defdefghifed”

当string1比string2长时,其多余字符替换为string2的最后一个字符;当string1中同一个字符出现多次时,将使用第一个替换字符。

翻译操作符的选项如下:

选项 描述

c 翻译所有未指定字符

d 删除所有指定字符

s 把多个相同的输出字符缩成一个

如$string =~ tr/d/ /c;把所有非数字字符替换为空格。$string =~ tr/t //d;删除tab和空格;$string =~ tr/0-9/ /cs;把数字间的其它字符替换为一个空格。

七、扩展模式匹配

PERL支持PERL4和标准UNIX模式匹配操作所没有的一些模式匹配能力。其语法为:(?pattern),其中c是一个字符,pattern是起作用的模式或子模式。

1、不存贮括号内的匹配内容

在PERL的模式中,括号内的子模式将存贮在内存中,此功能即取消存贮该括号内的匹配内容,如/(?:a|b|c)(d|e)f1/中的1表示已匹配的d或e,而不是a或b或c。

2、内嵌模式选项

通常模式选项置于其后,有四个选项:i、m、s、x可以内嵌使用,语法为:/(?option)pattern/,等价于/pattern/option。

3、肯定的和否定的预见匹配

肯定的预见匹配语法为/pattern(?=string)/,其意义为匹配后面为string的模式,相反的,(?!string)意义为匹配后面非string的模式,如:

代码如下:

$string = “25abc8”;

$string =~ /abc(?=[0-9])/;

$matched = $&; # $&为已匹配的模式,此处为abc,而不是abc8

4、模式注释

PERL5中可以在模式中用?#来加注释,如:

代码如下:

if ($string =~ /(?i)[a-z]{2,3}(?# match two or three alphabetic characters)/ {

...

}

现以简表总结如下:

一 文字处理模式中,/pattern/常用到的语法

/pattern/

结果

.

除了换行字符n外,找寻只有一个字符的字符串

x?

找寻0个或是1个x字符

x*

找寻0个或是0个以上的x字符

.*

找寻0个或是0个以上的任何字符

x+

找寻0个或是1个以上的x字符

.+

找寻1个或是1个以上的任何字符

{m}

找寻刚好是m个个数指定的字符

{m,n}

找寻在m个数个数以上,n个个数以下指定的字符

{m,}

找寻m个个数以上指定的字符

[]

找寻符合[]内的字符

[^]

找寻不符合[]内的字符

[0-9]

找寻符合0到9的任何一个字符

[a-z]

找寻符合a到z的任何一个字符

[^0-9]

找寻不符合0到9的任何一个字符

[^a-z]

找寻不符合a到z的任何一个字符

^

找寻字符开头的字符

$

找寻字符结尾的字符

d

找寻一个digit(数字)的字符,和[0-9]语法一样

d+

找寻一个digit(数字)以上的字符串,和[0-9]+语法一样

D

找寻一个non-digit(非数字)的字符,和[^0-9]语法一样

D+

找寻一个non-digit(非数字)以上的字符,和[^0-9]+语法一样

w

找寻一个英文字母或是数值的字符,和[a-zA-Z0-9]语法一样

w+

找寻一个以上英文字母或是数值的字符,和[a-zA-Z0-9]+语法一样

W

找寻一个非英文字母,数值的字符,和[^a-zA-Z0-9]语法一样

W+

找寻一个以上非英文字母,数值的字符,和[^a-zA-Z0-9]+语法一样

s

找寻一个空白的字符,和[ntrf]一样

s+

找寻一个以上空白的字符,和[ntrf]+一样

S

找寻一个非空白的字符,和[^ntrf]一样

S+

找寻一个以上非空白的字符,和[^ntrf]+一样

b

找寻一个不以英文字母,数值为边界的字符串

B

找寻一个以英文字母,数值为边界的字符串

a|b|c

找到符合a字符或是b字符或是c字符的字符串

abc

找到一个含有abc的字符串

(pattern)

()这个符号是会记忆所找寻到的字符,是一个很实用的语法

第一个()内所找到的字符串变成$1这个变量或是1变量

第二个()内所找到的字符串变成$2这个变量或是2变量

以此类推,笔者会在下一小节中详细介绍它的用法

/pattern/i

i这个参数是代表忽略英文大小写的意思,也就是在找寻字符 串的时候,不会去考虑英文的大小写

如果要在pattern模式中找寻一个有特殊的意义的字符,要在 这个字符前加上这个符号,这样才会让这个特殊字符失效

二 文字处理模式(Regular Expression)的简单范例

看了上一小节文字处理模(Regular Expression)之的,初学者对于这个语法的应用可能还不是很清楚,所以笔者会在这一小节中,举出一些在文字处理模式中常用的范例给大家看看:

范例

说明

/perl/

找到含有perl的字符串

/^perl/

找到开头是perl的字符串

/perl$/

找到结尾是perl的字符串

/c|g|i/

找到含有c或g或i的字符串

/cg{2,4}i/

找到c后面跟着2个到4个g,再跟着i的字符串

/cg{2,}i/

找到c后面跟着2个以上g,再跟着i的字符串

/cg{2}i/

找到c后面跟着2个g,再跟着i的字符串

/cg*i/

找到c后面跟着0个或多个g,再跟着i的字符串,如同/cg{0,1}i/

/cg+i/

找到c后面跟着一个以上g,再跟着c的字符串,如同/cg{1,}i/

/cg?i/

找到c后面跟着0个或是一个g,再跟着c的字符串,如同/cg{0,1}i/

/c.i/

找到c后面跟着一个任意字符,再跟着i的字符串

/c..i/

找到c后面跟着二个任意字符,再跟着i的字符串

/[cgi]/

找到符合有这三个字符任意一个的字符串

/[^cgi]/

找到没有这三个字符中任意一个的字符串

/d/

找寻符合数值的字符串

可以使用/d+/来表示一个或是多个数值的字符串

/D/

找寻符合不是数值的字符串

可以使用/D+/来表示一个或是更多个非数值的字符串

/w/

找寻符合英文字母,数值的字符串

可以使用/w+/来表示一个或是更多个英文字母,数值的字符串

/W/

找寻符合非英文字母,数值字符的字符串

可以使用/W+/来表示一个或是更多个非英文字母,数值的字符串

/s/

找寻符合空白的字符串

可以使用/s+/来表示一个或是更多个空白字符的字符串

/S/

找寻符合不是空白的字符串

可以使用/S+/来表示一个或是更多不是空白的字符的字符串

/*/

找寻符合*这个符号的字符串,因为*在文字处理模式中有它的特殊意思,所以要在这个特殊符号前加上这个符号,这样才会让这个特殊字符失效

/abc/i

找寻符合abc的字符串而且不考虑这些符合字符串的大小写

三 文字处理模式(Regular Expresion)相关的运算符及函数

有关KMP模式匹配算法的探索 篇3

关键词:KMP;改进;模式匹配算法;字符;分析;算法

中图分类号:TP309

随着计算机技术的不断发展,需要处理的数据内容不断呈现出大量化的特点。近年来,在计算机研究领域内模式匹配问题受到了极大的关注。在串处理系统中,子串在主串中的定位操作是一种重要的过程中,称之为串的模式匹配。随着计算机网络搜索引擎技术的发展、病毒技术的进步以及数据压缩方面的不断发展,模式匹配算法在计算机应用系统中得到了广泛的应用。目前主要的匹配算法有BF算法、KMP算法与一些改进的算法,从方式上,可以分为精确匹配、模糊匹配、并行匹配等。本文重点对KMP算法进行分析,另外对于改进的KMP算法进行研究与展望。

1 简单的模式匹配算法

现代计算机技术不断发展,人们的工作、生活与互联网有着密切的联系,同时网络内容也不断丰富,每一个终端几乎都有可能会上传与下载数据,造成网络上的类似相信也非常多,如何能够从大量的信息中进行查找同样的信息,则需要经过一定的算法。[1]这种典型的应用系统将会使用到匹配算法。简单的模式匹配算法主要是一种查找过程,给出一个特定的字符串P,在一大型的文本中进行查找,从而确定出P是否在大型文本中出现过,如果存在,同时给出相应的出现位置。在以上的算法定义中,为了对数学模式进行简单描述,进行以下符号定义。模式串为P,需要匹配的大型文本主串为T,模式串的长度为m,需要匹配的大型文本主串长度为n,在模式串中首字符与末字符分别为P1与Pm,而需要匹配的主串文本首字符与末字符分别为T1与Tn。文本字符串T与模式字符串P分别是由字符组成的一种集合,强行搜索模式实质上就是把模式P与文本T进行自左向右的挨个搜索,如果模式字符串P在某一点的匹配失败,则立即将T向右移动一个字符的位置,继续从模式字符串P的第一位向右来搜索。[2]这种算法基本上是最符合原理的,但同时它的工作量十分巨大,体现出的效率并不高,需要进行m(n-m+1)次的字母匹配运算,往往给过程浪费大量的时间。现代社会是高效社会,一旦在网络搜索中速度过慢,用户将会失去耐心。目前更多的手持设备在应用搜索时一般是即时搜索,对时间的要求较高,运算量太大的低效搜索模式已经不再满足现代需求。每个网站的用户数量都在不断增大,形成的用户名与密码都需要进行数据储存,利用模式匹配法可以对账户与密码进行匹配,从而判断是否可以登入,否则就进行拒绝,有效提高时间,保护网站利用与用户隐私。这是模式算法的典型应用,随着算法的不断进步,将会在多个网络领域内得以广泛应用。[3]

2 KMP算法

KMP算法目前已经经过了多年的发展,最早是由克努特、莫里斯与普照拉特同时发现,是一种改进的字符串匹配算法,在这种算法中,对主串指针回溯进行了消除,利用已经得到的部分匹配结果把模式串右行一段较远的距离,再次进行比较与匹配,从而使算法的效率得到大幅地提升。这主要是因为在前期的匹配过程经验总结中,一旦某字符不符合模式串的匹配要求,在附近的一段文本中也将不会出现匹配的对象。[4]

KMP的算法思想是当Ti与Pj匹配完成时,主串的指针i与模式的串指针j将会分别加1,不断向后面进行再次匹配,如果Ti与Pj匹配不成功时,主串的指针i保持不动,模式的串指针j将不会回到第一个位置,而是回到一个合适的位置,一旦j回到了第一个位置,将有可能会对需要匹配的文本字符进行错过。主串的指针i保持不动时,算法的关键就在于模式的串指针j指回到了哪一个位置。模式的串指针j不可右移太大的距离,避免错过有效匹配,同时也要右移尽可能地大,以提高匹配效率。在某次字符匹配时,一旦不匹配,模式的前j-1个字符能够匹配,则在下一次匹配时,可以把模式串向右移动j-s-1个字符位置,从而使P1与Tj-s对齐,需要从P3+1开始进行匹配情况检查。为了避免遗漏问题,在以上的首字串必须是最长的,自匹配的部分字串是唯一的,与模式自身结构有关。当模式的第j个字条与主串里的该字符进行比较位置时,它的值主要是取决于模式本身,与主串无关。这时关键是要选择模式的适当位置。

3 改进的KMP算法

模式匹配的KMP算法有效地避免了BM算法中频繁回溯的问题,极大地提高了模式匹配的效率,但这种算法并不是最优秀的。经过长时间的探索与分析,KMP算法中的扫描部分仍然可以进一步改进。[5]

在改进的KMP算法中,当某一次匹配失败时,i指针不需要进行回溯,而是使用已经匹配到的结果,查看是否对i的调整进行必要性评估,之后再决定与向右滑动的位置模式进行比较。主串指针i的有效变化可以有效提高匹配的效率。在进行第一次匹配结束时,j=6处,无法进行匹配时,i指针将会定为6,j指针为6,当模式串向右移动三个位置时,开始进行第二次的匹配,i的指针为9,而j的指针值为3,也就是说从主串的第九位开始进行比较,i值的不断增加也就加快了模式匹配的进度,提高了工作效率。

4 利用改进算法进行多次模式匹配

与单模式匹配算法相比,多模式匹配算法的优势在于一趟遍历可以对多个模式进行匹配,从而大大提高了匹配效率。对于单模式匹配算法,如果要匹配多个模式,那么有几个模式就需要几趟遍历。当然多模式匹配算法也适用于单模式的情况。在入侵检测系统中,一条入侵特征可能匹配或部分匹配很多条规则,如果采用单模式匹配,在匹配每条规则时都需要重新运行匹配算法,效率很低。然而,日益增多的网络攻击使得入侵检测的规则数目仍在不断增长。

在实际的应用中,模式串与主串一般需要多次的匹配,才能找到主串中是否有多次存在相同的子串,如在数据库中进行查找。[6]通过多次模式的匹配可以实现多个子串在文本中的位置,同时可以进行标记,有利于现代计算机庞大数据量的数理与分析。我国人口众多,网民数量庞大,姓名与用户名很可能会出现重复的情况,所以需要提前在数据库中进行查找,以确定是否可用,另外对匹配但其他特性不符的对象进行排除。

5 结束语

随着现代计算机技术的不断发展,越来越多的新技术得以应用与改进。网络安全发展形势也要求提高网络入侵检测系统的性能。模式匹配的效率问题引起了足够的重视。通过对传统的KMP模式匹配算法与其发展状况进行分析,明确未来发展思路,为其实践应用奠定理论基础。

参考文献:

[1]李桂玲.一种改进的KMP模式匹配算法[J].吉林工程技术师范学院学报,2009(10):75-77.

[2]杨战海.KMP模式匹配算法的研究分析[J].计算机与数字工程,2010(05):38-41.

[3]陈冬文,张帆,王斌,周启海.模式匹配算法——KMP算法的改进[A].2008中国信息技术与应用学术论坛论文集(一)[C].成都:西南财经大学信息技术应用研究所,2008.

[4]明廷堂.BF与KMP模式匹配算法的实现与应用[J].电脑编程技巧与维护,2013(23):24-28+34.

[5]范洪博.快速精确字符串匹配算法研究[D].哈尔滨:哈尔滨工程大学,2011.

[6]赵森严,黄伟,李阳铭.一种改进的KMP入侵检测的模式匹配算法[J].井冈山大学学报(自然科学版),2013(01):55-57.

作者简介:张燕飞(1992-),男,江苏泰兴人,本科,计算机科学与技术专业;李亚琼(1992-),女,贵州凯里人,本科,计算机科学与技术专业。

地址与资源匹配模式的探讨 篇4

对于基于有线网络的电信业务而言, 公众业务受理中, 资源确认是影响业务受理最重要的环节, 而地址与资源的匹配则是资源确认的关键入口。

对于用户而言, 只是提供自己的业务安装地址, 提出自己的业务需求;而对于业务受理人员而言, 则必须根据上述条件, 快速完成资源确认:确定该安装地址是否具备接入资源;资源能力是否能够满足业务需求;是否可以推荐用户使用与资源更匹配的业务。

从目前的业务受理场景来看, 固定电话业务的资源确认相对简单, 而宽带业务 (包含基于宽带的其他业务, 如网络视讯等) , 由于接入方式的多样性[ (ADSL (非对称数字用户环路) 、LAN (局域网) 、EPON (以太网无源光网络) 等], 业务与设备、线路性能的强关联 (带宽与线路长度、业务与终端类型) , 造成了资源确认的复杂化, 直接影响到业务的快速、正确受理。

一般来说, 地址 (装机地址) 和资源 (线路接入设备) 匹配有3种方式:

·文本匹配:基于文本描述;

·图形匹配:基于地理定位 (GIS) ;

·编码匹配:基于预先编码。

1 标准地址库

在业务支撑系统 (BSS) 中, 涉及到大量的地址数据, 如客户信息中的所在地址、通信地址, 安装地址中的装机地址, 设备安装地址、设备覆盖地址等。

将地址的描述, 按市、区 (县) 、路 (街) 、建筑群、建筑、单元 (楼层) 、户号等的等级关系, 分层规范, 形成的地址, 称为标准地址。

标准地址库是指独立的按标准层级化描述的地址表。它的数据可以为其他地址描述所引用。

一般来说, 为了实现自动配线配号, 在BSS中, 设备覆盖地址只能从标准地址库中选择, 因此, 从某种意义上说, 标准地址库也是设备覆盖安装地址的集合。

用户装机地址、设备安装地址可以在尽可能小的层级上保持与标准地址库匹配的一致, 但并不一定在标准地址库中。特别是用户装机地址, 往往比标准地址的层级更加细化, 在标准地址库建立的时候, 很难被建立。

分线盒、楼道交换机、ONU (光网络单元) 等线路设备, 其覆盖地址, 可以对应标准地址库中的一条记录 (归纳型描述, 一对一) , 也可以对应标准地址库中多条记录 (枚举型描述, 一对多) , 例如:

1) 分线盒编码:77HF00102014。

安装地址:南京市建邺区河西大街87号朗诗国际街区中园11栋 (幢) 3单元1层。

覆盖地址:南京市建邺区河西大街87号朗诗国际街区中园11栋 (幢) 3单元。

2) 分线盒编码:35DF00100008。

安装地址:南京市鼓楼区中央路19号金峰大厦7层。

覆盖地址:南京市鼓楼区中央路19号金峰大厦6层;

南京市鼓楼区中央路19号金峰大厦7层;

南京市鼓楼区中央路19号金峰大厦8层。

标准地址的规范确立, 标准地址库的建立, 其积极意义在于统一了电信运营商内部的资源管理规范, 理顺了自身的网络资源管理的基础空间资源。从网络资源管理的角度而言, 标准地址的建立和维护, 是一项重要的基础性工作。

2 文本匹配

基于用户装机地址的文本匹配, 是现行最普遍的一种业务受理方式。

业务受理人员, 根据用户的描述, 将用户装机地址按标准地址的规范录入BSS, 同时BSS给出相应层级标准地址列表, 以供录入时参考选择。当用户装机地址落入某个线路接入设备的覆盖地址集合内, 即完成了地址与资源的匹配工作。

该方式简单易行, 为各大电信运营商所一直沿用。它不仅在资源确认阶段中使用, 而且成为系统实现自动配线配号功能的基本技术手段。

该方式要求网络资源建设和维护部门在资源数据录入时, 资源实体地址相关属性录入必须规范化, `并尽力确保枚举或特征性归纳的覆盖地址全面和完整。由于地址本身也可能发生变更, 特别是在大规模城市改造的背景下, 资源建设阶段录入的相关地址数据, 一旦发生现实变化, 很难有一个实时机制来保证它的同步更新。

同一地址, 不同个体, 对于它的描述也难以统一, 用户并不会了解电信运营商内部标准地址的概念, 因而造成用户对自身地址的文本描述, 往往不在电信运营商的标准地址数据库中, 即便有业务受理人员的引导, 效果也难以确保。

在实际应用中, 文本匹配模式很难真正做到地址和资源的精确匹配, 以支撑全程自动配线配号。当用户对地址描述发生偏差时, 业务受理人员也很难去判别, 常常造成整个业务受理过程的反复, 拖延整个业务放装时长。

3 图形匹配

对于一个地址, 会有多样的文本描述, 但是基于电子地图、基于GIS (geographic information system, 地理信息系统) , 地址便有了明确的着落关系, 邻近的设备资源也可以直观发现, 基本不会产生偏差。

各大电信运营商在建立BSS的同时, 对于自身的线路资源管理也有GIS (如武汉中地GIS、杭州新思维GIS等) 。因此, 基于GIS的图形匹配方式也有着实际应用的系统基础。

广东深圳电信从2006年开始, 就有基于GIS图形化匹配方式业务受理的尝试, 包含在深圳电信业务受理的“一台清”模式中。

“一台清”指的是结合管线GIS具有全市精确的电子地图数据 (1∶1000) 和地名定位功能、线路资源 (含交接设备, 如分线盒) 按实际地理位置管理等特点, 以提升客户满意度、实现“即时答复用户可否装机”服务承诺、进一步压缩固话 (含ADSL) 装/移机业务流程时长为目的, 利用管线GIS作为辅助工具, 在营业前台面对客户一次性完成固话 (含ADSL) 装/移业务流程中业务受理、地址确认、资源查勘、资源配置、选号收款等环节的工作模式。

基于GIS的图形匹配方式用直观的图形界面, 结合Google搜索框式的定位入口, 使得用户和业务受理人员关于装机地址的定位, 有了一个共同认可的交集, 从而可以最直接地选择到该用户地址对应的线路设备。在这种方式下, 业务受理人员对用户地址的标准化描述, 也有了明了和准确的参照。

图形匹配方式人性化、显性化了业务受理入口, 将资源的确认与配置更紧密地与业务受理结合起来, 是业务受理整体效能提升最为有效的方式。同时, 这样的工作方式, 也促进了RMS (资源管理系统) 与BSS的融合。

另一方面, 图形匹配方式对于业务受理人员的技能、网络资源数据的质量提出了更高的要求, 而且, 对于电子地图本身的精度及更新及时性, 甚至包括有关服务器和业务受理终端的配置, 也有着更高的要求。

4 编码匹配

目前, 电信线路设备的建设, 通常是作为房屋建设弱电系统的一部分配套同步进行的。因此, 在房屋建设完成时, 线路设备的能力覆盖情况也基本明确, 这也就是在文本匹配方式中的设备覆盖地址的概念。

文本匹配方式存在的最大弱项是对于同一地址, 用户和运营商可能会有不同描述。图形匹配方式虽然可以最大程度地缩小双方对于地址和资源关联的确定, 但仍属于事后确认方式。如果事先存在一个用户和电信运营商都认可的中间编码 (以下简称地址ID) , 对应特定的地址与资源, 那就可以做到地址和资源的真正精确匹配。

公共事业的业务受理, 通常采取在房屋交付或交接时, 提供缴费卡的方式, 如电费卡、水费卡、煤气费卡等, 这个卡 (卡号) , 就成为了用户地址和运营商资源的沟通桥梁。用户办理业务时, 卡号成为业务受理入口, 即使发生房屋地址、产权的变更, 该卡号一般也不会变动。

文本匹配、图形匹配都属事后匹配方式, 而基于地址的编码匹配方式, 则属于事前匹配方式。就笔者了解, 目前该种方式尚未在电信运营商中采用, 因此, 有关的场景, 模拟如下:

1) 电信完成接入网络建设, 录入相关线路设备信息。由于设备的覆盖地址可以是一对多的关系, 因此, 地址ID实际是按设备覆盖地址, 以户号为单位编制的。此种方式下, BSS数据库中, 新增了一张地址ID与线路设备的对应关系表。

2) 市场部门为房屋住户在房屋交接时统一发放标准的电信业务手册、电信业务卡 (地址ID号) 。业务手册上, 可考虑将电信的各类业务做分类的介绍, 并告知用户凭业务卡即可办理电信业务。

3) 用户申请电信业务时, 提供其业务卡 (地址ID号) , 系统根据业务卡 (地址ID号) , 精确匹配其其所属线路设备, 业务受理人员在录入客户相关地址信息的同时, 系统根据匹配关系, 完成自动配线配号。

4) 对于同一个用户地址, 有多种设备能力覆盖的情况, 如某个用户地址, 同时可以由ADSL、LAN、EPON方式接入宽带, 同样在地址ID与线路设备的对应关系表中增加相关记录。即:在地址ID与线路设备的对应关系表中, 既可能存在着1个地址ID对应多个线路设备的情况, 也可能存在1个线路设备对应多个地址ID的情况。

5) 设备发生割接时, 地址ID号也将同步进割接删改。

总而言之, 采用基于地址的编码匹配方式, 其积极意义在于:

1) 在用户未使用电信业务前, 即分配其业务号 (地址ID号) , 提供标准的电信业务手册, 提升了用户感知。

2) 屏蔽了同一地址, 用户与运营商的描述不同问题, 实现了自动配线配号, 提升了业务受理的整体效率。

3) 无论地址描述在实际中如何变化, 只要设备不发生变化, 编码 (地址ID) 都不需要更新。

必须认识到, 基于地址的编码匹配方式, 也有其现实的一些问题:

1) 该方式主要针对规整的新建成形小区或建筑物, 需要细化到最小装机单元 (户) , 且并不针对存量问题及类似某些门面房等无法预先分配地址ID的场合。

2) 该方式需要BSS对其进行系统功能开发支撑。

5 对匹配方式应用的建议

总而言之, 为了更好地受理基于有线网络的电信公众业务, 每个电信运营商都在不断地探索相关路径, 优化流程 (合理设定岗位、完善流程) , 改善数据 (梳理标准化地址、提升数据质量) 。在资源确认的关键环节, 本文所探讨的3种匹配方式, 其实是一个相辅相成, 层次递进的关系:

·文本参照:大致对应;

·图形定位:精确对应;

·编码对应:一一对应。

面对海量的存量数据和快速增长的新量数据, 我们不能指望用一种方式解决所有问题, 因此, 建议如下:

1) 对于以上3种方式, 应当根据实际的资源情况, 在适当的场合分别采用。

2) 电信运营商内部的标准地址库建设, 应当作为一个基础性工作长期进行, 确保新量线路设备相关安装地址、覆盖地址地数据, 从标准地址库中引用, 而非新建;在3~5年的时间内, 结合日常的业务放装、障碍修复、设备巡检, 完成存量地址数据的标准规范化。

3) 以有高精度电子地图的区域为示范区域, 制定计划, 提升原有GIS线路设备数据质量, 开始基于GIS的地址和资源匹配的区域试点, 并逐步拓展。目前, 上海电信、江苏电信开展的CSS (协同支撑系统, 基于GIS) 建设, 也是该种匹配方式的最佳推动力。前端市场网格经理要求在电子地图的网格 (网格, 即由道路、建筑边界勾勒的营销区域) 中, 准确了解资源和用户分布, 这种需求的实质, 就是要求做到地址和资源的精确匹配。

4) 在与开发商、物业部门成功沟通的前提下, 对于新建的成形小区和建筑物, 只要能够明确户号对应线路设备的, 就尽量开展编码匹配方式, 逐步培养用户使用电信业务卡的行为习惯。一方面这是提早市场切入的需求;另一方面, 更是为了真正实现资源的自动配置, 提升业务受理的整体效能。当然, BSS中有关功能支撑问题, 除了要满足地址和资源的对应, 还需要从市场营销角度综合考虑, 使之更加完善。

5) 无论何种方式的采用, 都是基于资源建设到位的基础之上, 对于无资源或资源能力不能满足业务的情况, 作为BSS, 则应当有着更完善的信息收集机制, 更友善的预约受理机制, 更全面的资源建设情况反馈机制, 以真正满足电信用户的多样需求, 真正做到电信运营“用户至上, 用心服务”。

摘要:有线网络的电信业务受理中, 地址与资源的匹配是资源确认的关键入口。由于接入方式的多样性以及业务与设备、线路性能的强关联, 造成了资源确认的复杂化, 直接影响到业务的快速、正确受理。标准地址的规范确立, 标准地址库的建立, 其积极意义在于统一电信运营商内部的资源管理规范, 理顺自身的网络资源管理的基础空间资源。探讨了资源确认的文本匹配、图形匹配、编码匹配等3种匹配方式, 并对匹配方式的应用提出了建议。

模式匹配 篇5

“人岗匹配”,就是按照“岗得其人”“人适其岗”的原则,根据不同的人个体间不同的素质将不同的人安排在各自最合适的岗位上,从而做到“人尽其才,物尽其用”。众所周知,企业与个人是一个利益共同体,企业是个人职业生涯的舞台,为岗位挑选合适的人;人适合干什么,就尽量安排他到适合的岗位,充分发挥他的才能。只有这样,人才能在舞台上尽心表演,舞台才会精彩。

“人岗匹配”一方面,对人的职业发展有莫大的好处,另一方面对公司而言,把人才的作用最大化了,公司也会得到相应的回报,企业和个人才能实现真正的双赢。那么,如何实现在企业实现“人岗匹配”呢?

笔者认为:真正有效的“人岗匹配”至少需要经历:知岗、知人、匹配三步曲。

知岗:工作分析

“人岗匹配”的起点应该是知岗,因为只有了解了岗位的我们才能去选择适合岗位的人,这样才能实现“人岗匹配”。如果脱离了岗位的要求和特点,“人岗匹配”就成会成为“空中楼阁”,失去根本。

知岗最基础也是最重要工具就是工作分析。所谓工作分析,是对某项工作,就其有关内容与责任的资料,给予汇集及研究、分析的程序。

要做的“人岗匹配”,就必须对工作人员的素质先行订立标准,而为了建立人员的素质标准,就必须对工作的职务与责任加以研究。经过工作分析所产生的岗位说明书是人力资源管理科学化的基础,在“人岗匹配”中它至少有以下四个作用:1、明确岗位所需人员的条件;2、确定岗位招聘人员所需的资历;3、根据其岗位职责确定其岗位薪资;4、根据岗位所需技能制定该岗位现有人员的培训发展计划。

工作分析的内容主要包括:1、岗位名称,用简洁准确的文字对岗位的工作任务作概括。2、岗位工作任务分析,就是调查研究企业中各岗位的任务性质、内容、形式、执行任务的步骤、方法、使用的设备、器具等。3、岗位职责分析,包括工作任务范围、岗位责任大小、重要程度分析等。4、岗位关系分析,就是分析相关岗位之间有何种协作关系,协作内容是什么?他受谁监督指挥,他又去监督指挥谁?这个岗位上下左右关系如何?岗位升降平调路线方向如何?5、工作环境分析。6、岗位对员工的知识、技能、经验、体力等必备条件的分析。

工作分析是一项复杂而又细致的工作,其工作程序主要包括准备、调查、分析总结三个阶段七个步骤:1、收集背景资料:包括机构或企业现有的背景资料,如业务项目、组织图、各部门职责等。2、设计岗位调查方案,明确调查目的,调查对象和单位,确定调查项目,调查表格和填写说明,调查时间地点和方法。3、进行思想动员,说明这项工作的意义和目的,建立友好合作关系,确保大家有良好的心理准备。4、制定行动计划,根据工作分析的任务和程序,分解成若干工作单元和环节,以便逐项完成。5、试点先行,组织有关人员先行一步,学习并掌握岗位调查的内容,熟悉具体实施步骤和方法,先抓一两个重点岗位,进行试点,取得经验。6、开展全面调查,根据调查方案,对岗位进行认真细致的调查研究。7、分析总结定稿,对岗位调查结果进行深入分析和全面总结,形成岗位说明书。

工作分析的常用方法有:观察分析法、自我记录分析法、主管人员分析法、访谈分析法、记录分析法、问卷调查分析法等。

知人:胜任素质

当我们知道了岗位的特点和要求,我们就应该进入“人岗匹配”的关键环节―知人。知人的方法有很多,如履历分析、纸笔考试、心理测验、笔迹分析、面试交谈、情节模拟、评价中心技术等等。但它们或基于人,或基于事,对“人岗匹配”的帮助都不是非常明显。

在企业管理和咨询的实践中,笔者发现在知人方面,“胜任素质(Competency method)”是帮助企业实现最佳“人岗匹配”的有效工具。

胜任素质的应用起源于21世纪50年代初,著名的心理学家,哈佛大学教授麦克里兰 (McClelland) 博士是国际上公认的胜任素质的创始人。当时,美国国务院感到以智力因素为基础选拔外交官的效果不理想,

许多表面上很优秀的人才,在实际工作中的表现却令人非常失望。在这种情况下,麦克里兰博士应邀帮助美国国务院设计一种能够有效地预测实际工作业绩的人员选拔方法来解决这一难题,实现“人岗匹配”。在项目过程中,麦克里兰博士应用了奠定胜任素质方法基础的一些关键性的理论和技术。例如:抛弃对人才条件的预设前提,从第一手材料出发,通过对工作表现优秀与一般的外交官的具体行为特征的比较分析,识别能够真正区分工作业绩的个人条件。

那么企业应如何通过“胜任素质”来知人,进而实现“人岗匹配”呢?笔者认为可以通过建模、定标、评价、知人四个步骤来完成。

第一步:建模

根据自身的企业文化和业务发展,建立起了符合公司自身特点的岗位胜任素质模型。胜任素质是从品质和能力层面论证个体与岗位工作绩效的关系,是个体的态度、价值观和自我形象,动机和特质等潜在的深层次特征,是将某一工作(或组织、文化)中表现优秀者和表现一般者区分开来的基础。具体方法:1、根据岗位说明书和职位评估系统归纳总结岗位关键胜任要素,形成岗位胜任素质模型框架;2、通过管理访谈、管理层研讨,对模型框架做有针对性的调整和修正,并细化胜任特质的典型行为;在初步的胜任素质模型基础上,形成评估要素列表,制订评估框架并选择、组合评估方法,从而建立起完整的胜任素质模型。

第二步:定标

根据胜任素质模型评估各个岗位应该具备的能力。通过外部专家、内部管理人员以及需评价岗位的直接上司、在岗人员及其下属共同对对该岗位所需要的胜任素质水平做出评估,同时,参考同类组织对相应岗位的要求,建立企业所有岗位的胜任素质标准。

第三步:评价

通过对公司的管理诊断和评估,建立发展评价中心,包括心理测验(包括能力倾向测验、职业兴趣测验、动机测验、管理风格测验)、情境模拟(包括文件筐、无领导小组讨论、角色扮演、管理游戏、案例分析等)和专家面谈(包括结构化面谈、半结构化面谈和非结构化面谈)。

第四步:知人

以“人岗匹配”为原则,根据所建立胜任素质模型,应用已经建立的发展评价中心,对现有关键岗位进行人员素质评估,根据胜任素质模型和参照标准,在胜任素质的各个维度上进行比较,对不能达到任职要求的人员进行了调整和有针对性的培训。从而保证了组织调整的顺利完成,并建立起了自身独立的知人系统,将岗位胜任素质变成企业的核心竞争力之一。

匹配:知人善任

知人善任是实现“人岗匹配”的最后一步,也是能不能发现并最大限度地利用员工的优点,把合适的人放在合适的位置,尽量避免人才浪费的最关键的一步,“没有平庸的人,只有平庸的管理”。每个人都有自己的特点和特长,知人善任,让自己的下属去做他们适合的事情,这样才能充分发挥他们的工作潜能,实现人才的有效利用。

许多成功的管理者都善于识人,并把人才放在适当的位置上。

汉高祖刘邦就是一个知人善任的高手,他善于发现每一个人的特长,根据人才的特长,将其安排到合适的岗位,“人岗匹配”,让他们最大限度地、充分地发挥自己的积极性和作用,真正做到了“职得其人”“人适其职”,如用韩信带兵,张良出谋,萧何保后,都安排得有条不紊,正如他所说的:“运筹帷帐之中,决胜千里之外,吾不如子房;镇国家,抚百姓,给馈赏,不绝粮道,吾不如萧何,连百万之众,战必胜,攻必取,吾不如韩信。”这是刘邦在楚汉相争中最后获胜的根本原因。

作为一名管理者,首先要对员工的才能、兴趣等了然于胸,有了透彻的了解,才能针对某项特定的岗位选择适合的人选,让合适的人做合适的事,这样才能“岗得其人”“人适其岗”,达到人岗匹配的效果。当然,善任不是管理者的随心所欲,而是要按规律办事,在最适合的时机把最适合的工作分配给最适合的人,达到“人尽其才,才尽其用”。

牛根生曾经说过:从人本管理的角度看,人人都是人才,就看放的是不是地方,这是一个人岗匹配的问题。所以,在蒙牛选卫生工的时候,不会选那些文化程度高的,或者是家庭条件特别好的,因为这样的人对自己职业的目标绝对不是一个卫生工,也许他关心的是世界经济的发展,也许他想知道人民币汇率升降对国内投资者的影响……唯独不关心工厂的卫生,从而导致他们不会把自己全部的精力放在简单的卫生工作上。蒙牛选择的是老实敦厚的农村妇女,因为这份工作对平常基本上没有什么经济收入的农村妇女来说显得弥足珍贵,重视自己的工作,才有可能将工作做好。这才有了蒙牛工厂纤尘不染的卫生状况,才有了每天生产的“安全、卫生、营养、健康”的蒙牛食品走向全国,甚至漂洋过海。

模式匹配 篇6

【关键词】人职匹配 职业生涯管理 校企联合

【中图分类号】G645 【文献标识码】A 【文章编号】2095-3089(2016)36-0004-02

随着社会的发展与进步,高校毕业生就业问题必然从以往的注重就业数量转向注重就业质量。随着就业制度的深化改革,高校与企业对毕业生的职业生涯管理方式也必然会从“临时抱佛脚”式的择业指导转向更为科学化、全程化的职业生涯规划,而人职匹配理论是职业生涯规划的重要组成部分,是新形势下实现高校、企业、毕业生三赢的新方法、新途径。

一、人职匹配模型

1909年“职业辅导之父”帕森斯在《选择职业》一书中第一次系统的阐述了“人职匹配”理论,而后霍兰德的性格类型论,施恩的职业锚理论,廖泉文的能岗匹配理论,从不同的角度解释了个体特征与职位特征之间的匹配关系:将个人的人格、个性、兴趣、价值观、能力、素质等主观条件与与工作世界的职业岗位相对照、相匹配,使二者达到最佳适合度,从而选择一种契合度高的职业。该模型可以由图1来表示。

二、高校毕业生职业生涯管理校企联合模式

人职匹配模型是职业生涯规划的核心,为高校毕业生职业生涯管理奠定了理论基础,指明了方向,具体方法就是建立高校毕业生职业生涯管理校企联合模式。

高校毕业生职业生涯管理联合模式是学校和企业共同帮助毕业生制定职业生涯决策、规划、设计、发展及开发等内容,帮助其职业生涯发展的一系列活动。一方面高校毕业生在校期间通过全面认识自我及企业状况,依据个人性格、兴趣、能力、价值观来选择企业及职位步入职业生涯,并借助企业资源实现个人职业发展目标;另一方面,企业通过招募、甄选及职业生涯评估,来确定新入职员工的职业路径、培养方式及职业目标,从而使员工在企业内实现自我价值,从而推动企业目标的实现和持续发展。该模型可由图2来表示。

1.高校毕业生校内职业生涯规划

高校学生校内职业生涯规划应该与整个大学的学习同步,实现完整的职业生涯规划。

大一:导入期——个体职业分析期。主要是职业理想、职业道德教育。①基于职业生涯规划课程引导学生树立科学的三观,对学生的个性、性格、兴趣、能力、素质进行全方位测评使学生全面了解自己的特质。②采取多种形式进行专业介绍,使学生对专业的培养目标有初步了解,为职业素质、职业能力的培养打下基础,形成初步的职业生涯规划。

大二:深入期——职业认识培养期。主要是职业素质教育,包括职业意识、职业能力、职业素养三个要素。①教授学生职业岗位对口的专业知识和应用能力。②对学生进行专业素质拓展教育,使其在全面自我了解的基础上,对将来职业方向有一个全面的认识。

大三:调整期——职业定位教育期。职业生涯规划不是静止的,而是一个不停地调整的状态。①在职业生涯规划课程中,引入人职匹配理论,引导学生进行个人的职业SWOT分析。②鼓励学生参加职业相关的培训和实践,通过专家及企业家讲座、专业技能大赛、校企联合培养活动等形式使学生近距离了解未来职业,形成自己的职业核心竞争力。③引导学生正确认识自己,并制定适合自己的短期易实现的短期目标。

大四:选择期——职业实践期。主要是职业选择与职业适应,让学生找到适合自己的工作,融入职业环境。①为学生搭建社会实践平台,安排学生进行专业实习。②入职前培训,通过就业形势讲座、求职技巧讲座,使学生了解就业形势,掌握面试技巧,增加就业机会。③建立平台,直接快速发布招聘信息。

2.高校毕业生校外职业生涯规划

高校毕业生入职后,需要完成从“高校学生”到“企业员工”的角色转变,帮助他们适应职业环境、熟练工作流程、完成工作定位,处理人际关系可以增强新入职员工对企业的归属感,实现顺利过渡。为此,企业需要从高校手中接过“接力棒”为毕业生制定校外职业生涯规划。高校毕业生在企业中需要经历适应阶段、创新阶段、再适应阶段,分别对应企业人力资源管理的员工招聘与录用阶段、员工保留阶段、员工发展阶段。

(1)适应阶段——员工招聘与录用。①进行新入职员工评估分析和定位,以方便根据人职匹配的理论为员工分配岗位并提供指导。②配备导师指导新岗位技能,使员工以最高的效率融入工作的状态。③帮助员工设立职业目标,进行职业定位,增强其工作动力,提高工作绩效。

(2)创新阶段——员工保留。这一时期高校毕业生基本完成入职过渡,成为成熟、稳定的企业员工。这一时期员工需要进行职业决策,企业可以帮助员工用SWOT分析方法及企业可以提供的机遇制定职业生涯规划,使员工进一步提高工作能力,探索自己的职业发展道路。

(3)再适应阶段——员工发展。这一时期企业员工进入职业发展停顿期,一方面渴求更广阔的发展空间,另一方面工作态度、工作能力停滞不前,需要重新调整职业生涯规划,确立适合自己的生涯目标。企业可以运用多种职业生涯管理策略①规划多重发展通道。②进行工作轮岗。③进行职业教育与职业培训。

三、高校毕业生校内、校外职业生涯规划的相互作用

高校毕业生职业生涯管理校企联合模式具备完善、有效的反馈机制。一方面通过职业生涯规划增加高校毕业生就业率,提高毕业生就业质量,毕业生就业满意度高,学校会更加重视职业生涯规划,并最终通过就业率、就业质量提高——高校职业生涯规划调整——毕业生就业质量进一步提升这一影响链条便会反映在应届毕业生和企业上。另一方面,企业通过对接毕业生职业生涯规划,招募到契合度更高的员工,推动该企业的进一步发展,并最终通过企业发展——员工职业生涯规划——员工满意度上升这一影响链条,反作用于企业职业生涯管理策略的变化上;第三方面,通过实施职业生涯规划,提高员工就业率并促使其发展,并最终通过员工发展——高校毕业生职业生涯管理调整——企业员工职业生涯管理——员工职业发展需求调整这一影响链条,反作用于学校及企业的毕业生职业生涯管理策略的变化上。

四、高校毕业生职业生涯管理校企联合模式的保障措施

高校和企业从性质、运行机制、利益取向等各方面都不行同的两种组织,两者的联合是建立在利益共赢的基础上,需要高校、企业、教育部门、人事部门等多方的协调。

1.樹立大职业生涯规划视野,树立校企一体化的职业生涯规划理念。

职业生涯规划从高校学生大一入校开始,直至顺利适应入职企业,把学校和企业作为有机的整体,围绕校企合作,找到适应高校毕业生的职业生涯规划方法。

2.人员保障。高校与企业的职业生涯规划的相关部门设立职业生涯指导顾问。学校职业生涯指导师的责任班助学生认知自我、认知专业、了解职业,进行自我定位;企业主要依托人力资源部门聘请职业生涯指导顾问研究高校毕业生的聘用和管理问题。

3.信息保障

高校毕业生职业生涯规划是一个随着阅历、能力、环境、及组织因素变化而发生变化的一个动态过程,因此要做好职业生涯规划管理,掌握信息至关重要,通过对信息的使用,可以增强毕业生与企业的契合度,可以提高高校就业率,也可以提升组织的效率。

参考文献:

[1]廖泉文.人力资源管理[M].高等教育出版社,2003:227-234.

[2]曲振国.大学生就业指导与职业生涯规划[M].:北京:清华大学出版社,2008.

[3]吴宏伟.人职匹配理论在高校就业指导工作中的应用[J].呼伦贝尔学院学报.2006,(14):16-18.

[4]叶江峰,朱群.基于人职匹配理论大学生入职HRM的职业准备[J].科技和产业,2007,(10):71-73.

[5]刘天祥.IT产业知识型员工职业生涯管理研究[D].2009.

基于模式匹配的智能稳定评估方法 篇7

暂态稳定评估(TSA)是电力系统安全运行中的关键问题,也是学术研究的持续热点之一。到目前为止,电力系统暂态稳定评估仍然是以故障的时域仿真枚举为主、暂态能量函数类方法为辅的技术架构。基于人工智能技术的暂态稳定评估方法虽然已经有近20年的研究历程,但并未脱出时域仿真法辅助筛选工具的定位,也未能获得良好的工程应用。

时域仿真法突出的优点是分析可靠性高,因此长期以来一直作为其他分析方法的检验标准。但其缺点也很突出,只能给出一个个样本的模拟,需要一次次试探性地修改扰动参数、观察计算结果,才能由稳定变化趋势给出系统暂态稳定水平的判断。因此,时域仿真法不能有效地支持智能预防控制决策的实现。

暂态能量函数法(或称直接法)积分时间短,计算速度快,能给出稳定裕度的度量。但是,一方面它对系统模型的复杂性适应能力较差,对多摆失稳问题的评估精度不足;另一方面,其评估依靠的仍然是时域仿真积分到扰动切除时刻的动态信息,因此同样无法指出运行方式变化对稳定性的影响信息,难以用于预防控制决策。

随着新能源发电的加入,大电网的不可预测性不断增强,系统结构和运行工况日益复杂,单纯依靠人的经验进行判断和决策已经难以驾驭大电网的安全运行[1,2]。基于人工智能技术的观点,系统暂态稳定性与某些描述系统运行状态的特征量之间具有某种映射关系[3,4,5,6],若能找出这些特征量,受扰动后的系统暂态稳定性评估可以归结为模式识别问题。离线仿真可以提供反映这种内在映射关系的样本,一旦通过样本学习提取出这种函数关系,就可以对新运行状态下的系统暂态稳定性进行评估[7]。所以,人工智能和模式识别技术的结合为大型电力系统的快速稳定评估提供了一种新的求解方法。

国内外学者对于基于人工智能技术的暂态稳定评估方法已经开展了大量的研究并形成了基本的算法框架[8]。文献[9,10]选取系统受扰后的动态变量作为输入特征,其最大局限性在于只能判断稳定与否,而不能指出运行方式中的哪些因素影响了稳定水平以及如何调整潮流分布有助于改善系统稳定水平。文献[8]给出选取输入特征的另一种方法,即用稳态潮流信息及其组合量并计及网络拓扑、网络规模及扰动地点的影响构成输入特征集。文献[11]提出的观点为输入特征的选择提供了新思路,即以受扰严重机组的稳定性决定全系统的稳定为理论依据,围绕这些机组构造输入特征。文献[12]提出选择极限切除时间作为评估输出,将稳定评估视为一类回归问题,与传统的稳/失稳的二值输出相比能提供稳定裕度等其他信息。

本文主要研究基于最短路的主导失稳机群辨识方法,无需稳定仿真直接基于电网结构和运行信息识别电网暂态失稳模式和机群划分,在此基础上研究功角稳定评估关键特征与拓扑的关系,提出基于拓扑的功角稳定评估算法。通过本文研究有助于建立电网运行方式、拓扑结构与稳定水平的关联关系,并为构建电网智能预防控制决策支持模型打下基础。

1 主导失稳机群辨识方法

1.1 方法思路

本文提出的基于最短路的主导失稳机群辨识方法,无需稳定仿真,直接基于电网结构和运行信息识别电网暂态失稳模式和机群划分。首先计算主导失稳发电机辨识指标对发电机进行排序,通过二分类聚类方法筛选出受扰严重的发电机集合;然后对图形式的电力网络,利用最短路搜索算法得到发电机间最短路长度构成的无故障最短路矩阵W和考虑故障点的最短路矩阵WF,利用最短路长度对受扰严重发电机集合进行拓扑分群;最后辨识主导失稳机群。该方法可为多种需要失稳分群信息的电力系统暂态稳定评估和稳定控制方法提供支持。方法的具体流程图如图1所示。

1.2 主导失稳辨识指标

1.2.1 短路电压与主导失稳机群的关系

以单机-无穷大系统模型为例分析短路电压与不平衡功率的关系,并对短路电压与主导失稳机群的关系进行机理分析。对简单的发电厂模型,即发电机经过升压变压器、2条输电线路与无穷大母线相连,忽略发电机、变压器及输电线路的电阻。

假设单回输电线路上某点发生带小电抗三相短路故障,改变故障点所在位置,使故障点沿单回线路移动,计算故障瞬间发电机的输出功率与稳态功率之比p=Pe(sc)/Pe(0)、机端电压幅值UG=UG(sc),并得到两者的关系。

仿真结果显示,发电机功率与机端电压幅值是单调递增关系,机端电压越低,输出功率越低。机端电压幅值大小可以反映发电机短路瞬时功率大小。由于调速器动作速度较慢,可以认为故障持续期间机械功率PT维持不变,等于稳态时的电磁功率Pe,即PT(sc)=Pe(0)。由此,故障期间发电机转子上的不平衡功率ΔP=PT(sc)-Pe(sc)=Pe(0)-Pe(sc),而Pe(sc)与短路电压有单调递增关系,则不平衡功率与短路电压有单调递减关系。

1.2.2 主导失稳发电机辨识指标

定义主导失稳发电机辨识指标DI:

其中,Pe(0)为发电机稳态有功功率标幺值;UG(sc)为短路瞬间机端电压幅值标幺值;Tj为发电机转子的惯性时间常数。不平衡功率ΔP与机端电压UG(sc)存在单调递减关系,所定义指标DI中的因子Pe(0)(1-UG(sc))即表征了这一关系。另一方面,发电机转子具有惯性,一般惯性越大,稳定性越好,指标DI以1/Tj的方式考虑了惯性。所以,指标DI充分反映了故障对发电机的冲击,依据指标DI可以对主导失稳机组进行辨识。

1.3 二分类聚类分析

对由指标DI构成的预聚类集合L进行聚类分析。聚类分析把样本分为几个类别,目标是使同一类别中的样本尽量相似,不同类别的样本尽可能相异。本节所采用的K-means聚类分析算法流程可以参考文献[13],本文不再介绍。

计算指标DI,进行二分类聚类分析得到受扰严重发电机集合M的方法流程如下:

a.计算每台发电机的指标DI,统计发电机数量N;

b.依据指标DI对发电机进行排序;

c.选取指标DI最大的n=k N台发电机构成预聚类集合L,设L={G1,G2,…,Gn},且有DI(G1)≥DI(G2)≥…≥DI(Gn);

d.利用K-means聚类算法基于指标DI对L进行二分类聚类分析,聚类1为受扰严重发电机群类,聚类2为稳定机群类。

通常主导失稳机群所含发电机数量不多,对于规模较大的系统(发电机数量多于100台),本文认为短路故障下系统的加速失稳机群内发电机数量不超过总数的10%,k建议取为0.1,这样就不会遗漏可能失稳的发电机,同时可以提高后续的聚类效率。对于小型的电力系统(发电机数量少于20台),k建议取为1。

1.4 最短路识别

1.4.1 电力网络规范化

进行最短路辨识,首先需要将电力网络用图论中规范的网络形式进行描述,对故障前的图形式的电力网络拓扑,写出无故障邻接矩阵。具体包括:(1)将网络中的节点转换成图论中的节点;(2)将多回平行线路等效成单回线路;(3)将输电线路和变压器用图论中的边来表示,边的权值取线路电抗值或变压器电抗值;(4)移除串联电容补偿装置,把串联补偿容抗归到相邻支路中;(5)根据节点和边信息形成邻接矩阵。

完成图的规范化后,为适应电力网络的研究,本文定义电力网络中连接2点的距离为最短路所包含的边的权值和,即最短路长度。网络的平均距离定义为所有节点对的距离平均值。

1.4.2 最短路矩阵

将电力网络转化为规范的图形式后,利用Dijkstra最短路搜索算法可以得出机组间的最短路,最短路能反映扰动前发电机之间的耦合关系强度。对于一个含有g个发电机节点的电力网络,可形成发电机节点间的最短路矩阵W=[wij],其中wij为发电机节点i和发电机节点j之间的最短路长度。

矩阵W的对角元素表示节点与节点本身间的距离,规定为无穷大。

定义发电机间平均距离为发电机节点间的最短路长度的平均值,即:

由于故障的存在会使故障所在节点从原来的网络拓扑中分离出来,并严重影响与故障节点相连支路的功率传输能力,为考虑这一影响,还需要计算考虑故障点影响的最短路矩阵WF=[wfij]。计算方法是:首先将与故障点相连的边权值设为无穷大,然后再利用最短路搜索算法求解最短路。

1.5 拓扑分群

发电机节点间的最短路长度在一定程度上表征了发电机节点之间的电气距离,可以反映2台发电机间的耦合程度。拓扑分群的目的就是根据耦合强弱,得出在故障持续期间与受扰严重发电机有较强电气耦合的机组,并根据机组间电气联系的强弱进行分群。

拓扑分群的实现步骤如下。

(1)对受扰严重机群M={G1,G2,…,Gp}中的发电机Gi,取i=1,分群号q=1。

(2)取分群Aq={Gi},判断WF第i行的每一个元素,若,取Aq=Aq∪{Gj},并进一步判断,若GjM,则M=M-{Gj};遍历第i行后转步骤(3)。

(3)判断Gi是否为M的最后一个元素,若是,则结束分群搜索;否则,取i=i+1,q=q+1,转步骤(2)继续执行搜索。

记拓扑分群得到的机群为GP={A1,A2,…,Am}。

上述分群方式仅考虑了发电机之间的最短路长度。采用的分群原则是:若2个发电机节点间的最短路小于最短路平均距离的50%,则这2台机组划分为同一机群。

1.6 主导失稳机群辨识

对主导失稳机群的识别还需要进一步计及受扰严重程度和故障消失后机群之间同步能力的影响,本文方法最后一个关键步骤———主导失稳机群辨识的步骤如下。

(1)计算GP={A1,A2,…,Am}中每一个分群Ai中所有发电机的辨识指标DI的平均值,并按这一平均值对GP中的分群进行从大到小排序,排序后的分组集合仍记为GP={A1,A2,…,Am}。

(2)如果GP中只有一个分群,则取主导失稳机群的预选机群AI为AI=A1;否则,判断是否成立,如果成立,取主导失稳机群的预选的机群AI为AI=A1∪A2,不成立则取AI=A1。其中,DIS(A1,A2)为A1分群中指标DI最大的发电机与A2分群中指标DI最大的发电机之间的最短路长度,可由故障前最短路矩阵W获得。

(3)对预选机群AI中的发电机,按辨识指标DI值从高到低进行排序,记指标DI最大的机组为GI1,根据DI大小其他机组依次标记为GI2、GI3、…、GIp,各机组对应的指标DI记为DI(GI1)、DI(GI2)、DI(GI3)、…、DI(GIp)。

(4)记为除AI的其他所有参与二分类聚类的发电机的指标DI的平均值。

(5)记主导失稳机群为I,初始化设I={GI1}。按GI2、GI3、…、GIp依次选择发电机GI j,并判断是否成立。如果成立,则I=I∪{GI j},取j=j+1,继续测算下一台发电机,直至AI内所有发电机均测试完毕或搜索停止;否则,停止搜索,输出主导失稳群I。

经过上述搜索过程,在以故障持续期间电气联系强度为依据获得的初始分群基础上,进一步考虑了故障消失后机群间电气联系强度和受扰程度的影响,改善了主导失稳发电机群的辨识精度。

2 关键特征选取

系统的分离并不依赖于全系统的能量,而是趋向于从系统其余部分分离出来的单机或成组机组的暂态能量,这些机组的稳定决定了全系统的稳定。在本文中,这样的机组被定义为主导失稳机群。若能在线推断或从离线分析结构事先知道某一故障下的主导失稳机群,就可以围绕这些机群构造反映系统稳定水平的指标。本文选取的关键特征如下:

(1)主导失稳机群是引起系统失稳的关键机群,因此选取辨识所得的主导失稳机群的稳态有功功率作为关键特征量之一,记这类特征量为A;

(2)功角失稳表现为主导失稳机群和其余机群在功角轨迹上的分离,故把主导失稳机群以外的发电机的总稳态有功功率作为关键特征,记这类特征量为B;

(3)系统稳定性与运行方式、网络拓扑有密切联系,故选取主导发电机到故障点之间k条最短路所含的支路以及与故障点相连的各条线路作为关键支路,并选取这些关键支路的稳态有功功率作为关键特征,记这类特征量为C。

3 基于实例的功角稳定评估算法

在功角稳定评估上,基于实例的学习算法有一定的应用[14,15]。基于主导失稳机群的功角稳定评估算法步骤如下。

(1)按照故障点位置和主导失稳机群对数据库中的训练样本进行分类。提取关键特征A、B、C和极限切除时间(CCT)构成训练样本集,记故障点为F、主导失稳机群为GP的训练样本子集为D(F,GP),对属于D(F,GP)的对象d,记d=[Ad,Bd,Cd],d对应的极限切除时间为CCT(d);

(2)对待评估样本进行主导失稳机群辨识,提取关键特征A、B、C,形成特征向量z,z=[Az,Bz,Cz];

(3)将z和D(F,GP)作为输入,使用KNN算法评估z的极限切除时间。

4 算例分析

以南方电网2014年丰大极限方式等值网为例,对南方电网“西电东送”主通道故障情况下的机群失稳模式进行识别和暂态稳定评估,验证本文方法的有效性。2014年丰大极限方式等值网,共有89台发电机,其中包含50台等值机和39台保留机组;共有380个节点,其中225个500 k V节点、19个220 k V节点;360条500 k V线路,138台电厂升压变压器,13台500 k V/230 k V主变压器。

以故障点500 k V节点(南宁)为例。南宁发生三相瞬时性短路故障,故障地点局部网络接线图如图2所示。

(1)计算所有发电机的主导失稳辨识指标并二分类聚类分析,得到受扰严重发电机集合。

对2014年丰大极限方式等值网的89台发电机,计算发电机的指标DI并按DI对发电机进行排序,得到指标DI最大的前10台发电机,如表1所示。根据指标DI进行机组二分类聚类,得到受扰严重机组集合为M={EQG111,EQG107}。

(2)搜索发电机间最短路并计算长度,并形成无故障最短路矩阵W和故障期间最短路矩阵WF,对受扰严重发电机集合中的发电机进行拓扑分群。

对受扰严重发电机集合M={EQG111,EQG107}中的发电机EQG111,取分群A1={EQG111}。故障期间最短路矩阵WF中EQG111所在节点对应行的每一个元素都大于,因此A1={EQG111}。

对M中发电机EQG107,取分群A2={EQG107}。故障期间最短路矩阵WF中EQG107所在节点对应行的每一个元素都大于,因此A2={EQG107}。

拓扑分群结果为:GP={{EQG111},{EQG107}}。

(3)对拓扑群进行主导失稳机群辨识。

因为

,即机群{EQG111}和机群{EQG107}的最短路距离大于全网发电机间平均距离的一半,说明在故障消失后,机群{EQG111}和机群{EQG107}电气联系较弱,不容易发生同调失稳,所以最终的主导失稳机群辨识结果是{EQG111}。

通过时域仿真,发现当故障持续时间tF为15个周期时,系统失稳,表现为EQG111相对于其他发电机加速失稳。可见,南宁节点发生故障情况下,本文所提方法准确识别了主导失稳发电机EQG111,辨识效果理想。

(4)功角稳定评估。

基于以上的辨识结果,可知南宁故障情况下主导失稳发电机是EQG111,利用所提特征提取规则,可以得到用于该故障暂态稳定评估的3类关键特征量为:发电机EQG111的稳态有功功率;所求指标DI最大的前10台发电机中,除主导机EQG111外其余发电机的稳态总有功功率;主导失稳发电机EQG111到南宁2条最短路组成支路以及与故障点相连的支路的稳态有功功率之和。

调整故障点附近发电机的出力,生成350个互异样本,取其中301个样本作为训练样本,余下的49个作为测试样本。

应用稳定评估算法对测试样本的极限切除时间进行预测,49个测试样本的极限切除时间预测结果与实际极限切除时间对比如图3所示。

5 结论

暂态稳定评估是电力系统运行中的重要问题之一,本文针对基于模式匹配的智能稳定评估方法进行了具体的介绍和算例分析,得到主要结论如下。

(1)提出了一种主导失稳机群辨识方法,通过电网结构和基本参数信息、运行方式信息,结合故障时刻的短路电压,初步实现对主导失稳机群的识别。通过机组间以及机组与故障点间拓扑联接关系的描述指标来反映发电机之间通过网络形成的动力学特性的关联性和同步特性,从而指导主导失稳发电机分群方式的辨识,进一步提高辨识的准确性。

(2)围绕主导失稳机群和网络拓扑给出了智能稳定评估,所选用的暂态稳定评估特征均为稳态特征量,不依赖时域仿真和训练样本,物理概念清晰,可以从系统运行状态直接获得。结合关键特征和基于实例的学习算法实现了对电力系统故障极限切除时间的预测。

(3)与神经网络、支持向量机等人工智能方法相比,本文方法所采用的基于实例的稳定评估方法训练过程简单且计算量非常小,新加入训练样本时无需对原有样本和实例学习算法做任何修改,样本可以动态更新并自动被下一次预测利用。

一种大容量模式匹配算法 篇8

随着模式匹配技术在入侵检测、病毒扫描和网络内容过滤方面的广泛应用,模式匹配算法的研究逐步成为深度包检测研究的重点。但随着网络技术的飞速发展,模式匹配技术也面临着巨大的挑战。10 Gb/s级网络速率的到来要求模式匹配算法必须实现网络数据的线速处理。同时,网络中病毒、蠕虫、木马等网络攻击的不断增多,要求模式匹配算法能够支持更多规模的模式集。深度包检测需要对网络数据包负载进行搜索,匹配位置的不确定性增加了算法的复杂度,并已成为制约网络内容检测系统发展的瓶颈。三态内容可寻址寄存器(TCAM)是一类能够对存储内容进行并行查找,并在较短的确定时间内给出结果的高速存储器。深度包检测领域已有一些基于TCAM模式匹配算法的研究[1,2,3]。由于TCAM存储资源有限,因此,压缩存储表项是基于TCAM模式匹配算法的一个研究重点。

1 现有算法的不足

TCAM利用并行比较的方法实现存储内容的快速搜索,但TCAM存在表项位宽限制,长模式需要切割为多个短模式进行存储。TCAM与一般CAM的区别在于其存储内容可以有“0”,“1”或“-”(无关项)三种形式,因此,对于长度小于TCAM位宽的表项可以用无关项填充,搜索时,无关项将对应位置掩掉进行比较。长模式切法为多个短模式后只有连续命中子串序列才能匹配该长模式。Fang Yu等人提出了一种“TCAM+SRAM”的实现方案[1],TCAM匹配输入字符串,SRAM存储命中表项信息,通过在搜索过程中不断更新已匹配信息实现长模式匹配。然而,该方案在一个TCAM查询周期内移动一个字符,造成命中列表极为庞大,增加了很多不必要的计算量。文献[2]将模式进行移位存储,实现搜索一个周期内移动若干字节,但是算法资源利用率低,前后两次查表存在依赖性,流水实现时需要使用多级TCAM。两级TCAM模式匹配算法[3]利用利用第一级TCAM匹配字符串,第二级TCAM匹配命中表项编号序列,从而实现长模式匹配,但算法每次搜索只能向前移动一个字节。文献[4]通过第一个子串的移位存储实现周期内多个字节的移动,但该算法在匹配后续子串失败时,必然回溯若干字节确定模式的开始位置。文献[5,6]利用TCAM的掩码特性在包分类中合并多条相似表项从而提高资源利用率,但模式匹配需要动态地确定所有可能发生的匹配,从而产生大量的交叉转移。

2 基于TCAM的模式匹配算法

2.1 算法思想

设置TCAM位宽为w字节,基于TCAM的模式匹配算法先将模式移位,然后按w字节将移位的模式切分为若干个子串。存储时,所有子串存入第一级TCAM中,位宽小于w字节则进行填充,第二级TCAM存储所有合法的编号序列。搜索模式时,第二级TCAM根据前端命中表项的编号序列组成输入编号,并输出命中表项对应的长模式,算法的硬件结构图如图1所示。

2.2 表项存储与模式搜索

为了匹配到出现在数据任何位置的模式串,算法先将模式进行进行w次右移。然后按w字节切分模式,共产生3类子串,即第一个子串、若干中间子串和最后一个子串,分别称为头串、中间串和尾串。头串和尾串的长度可能不足w字节,且两类子串的无关项位置不同,从而造成两者之间的表项冲突,头串是一个模式的开始,可能出现在数据的任何位置,而中间串和尾串只能出现在头串之后。同时,TCAM的分片功能可以限制查表区域。因此,存储字符串时,将头串单独存入高地址分区,中间串和尾串按字符串长度存入低地址的分区,同时,利用TCAM的分块特性,将头串与中间串、尾串分块存储。算法从头串开始每次移动w字节,直至一次匹配过程结束,同时由于尾串长度不足w字节,因此,命中尾串表项后的移动距离应该尾串长度。SRAM表项信息包括命中表项是否为短串、下次搜索的移动距离和表项编号三部分。表项存储时,按照最长匹配原则进行存储,将长字符串存在低地址。

当TCAM位宽w=4 B时,模式“ABABAD”的切分和存储情况如图2所示,首先按4 B切分模式,然后将头串存入块2,中间串和尾串存入块1。头串用于确定模式的起始位置,所以块2为默认匹配区域,当后缀搜索失败时,利用块2再次确定模式位置。

模式匹配时,按如下过程进行搜索:

(1) 向块2输入长度为w字节的字符串,若命中表项,则移动w字节执行(2),否则,移动w字节后继续执行(1);

(2) 输入下一个w字节,搜索块1和块2,若命中表项,移动相应距离然后执行(2),否则,移动相应距离,然后执行(1)。

TCAM_2存储所有可能的编号序列,通过匹配输入编号搜索长模式。第一级TCAM匹配之后,向第二级TCAM输入匹配表项编号,TCAM_2将合法编号序列连接起来,从而实现长模式匹配。如果TCAM_1没有表项命中,则输出一个约定的无效标识。

2.3 表项压缩

在第一级TCAM中,子串长度从一个字节到w字节不等,因此,表项之间存在大量的包含关系,从而造成TCAM_2匹配一个长模式可能需要大量的表项,大大地限制了算法支持的模式集规模。中间串长度为w字节,不存在包含关系,因此,头串和尾串编号的包含关系造成TCAM_2存储表项数目的膨胀。利用TCAM的掩码特性,将TCAM_2的头串和尾串编号掩掉若干位,存储编号空间,查表时,只要编号属于该区间,则命中该表项。

TCAM_2中 w字节的子串编号为一个确定值,而长度小于w字节的子串用编号段代替,因此,应按子串长度和包含关系分配子串编号。一个w字节的子串可能同时与头串和尾串具有包含关系,且比较位置不同,因此,这类具有双重包含关系的子串应分配两个编号,一个作为头串编号,一个作为后缀编号。由于第二级TCAM匹配时,只有第一个编号才是头串编号,所有子串只有处于编号序列头部是才使用头串编号,其他时候使用后缀编号。子串集合划分时,按相同方向逐字节比较,具有相同字符的子串划分为同一集合,编码过程如图3所示。图3为头串编号编码过程,具有相同前缀的子串为同一集合,并采用统一的编码,相应地,尾串编号编码时比较字符从后向前移动。编码过程实质是集合切分过程,子串长度越短,则编号范围越大,应作为集合切分的父集;相应地,子串长度于越长,则编号范围越小,应作为集合切分的子集。编码之后,TCAM_2采用“0--”便可以表示“---A”,并将三条表项压缩为一条表项。

3 算法性能分析

由于存储空间资源昂贵,模式集规模大,空间复杂度是衡量基于TCAM的模式匹配算法性能的重要指标,空间复杂度越低意味着算法占用存储空间越少,利用率越高。TCAM_1位宽为w字节,模式规模为N,模式平均长度为m,经i次移位后,产生子串的数目为:

Ci=|m+iw|

去除相同表项,TCAM_1的总表项数:

Ν1Νi=0w-1|m+iw|

因此,TCAM_1的空间消耗:

Μ1Νwi=0w-1|m+iw|Νi=0w-1(m+i)=Νw(w-12+m)

最长模式为L字节,则编号序列的长度:

ΝC=|L+w-1w|

每个编号占用n比特,则TCAM_2位宽的字节数:

wb=nΝC/8

随着w的增加,第一级TCAM的表项数增加,而编号序列的长度减小;随着跳跃距离w的增加,模式移位次数增加,两级TCAM的表项数均会随之增加。因此,两级TCAM的空间利用率将随着w的增加而降低。

传统模式匹配算法只能逐字节移动,对模式移位操作后,算法的单次最大安全移动距离为w字节。搜索过程中,若命中头串和中间串,则可以安全移动w字节;若命中尾串,搜索指针只能移动到字符串结束位置。因此,算法的移动距离与命中情况直接相关。

4 实验仿真

仿真实验中,匹配模式来自2008年1月的Snort[7]规则库的2 247个单模式,数据来源于互联网数据分析协会及美国应用网络研究国家实验室[8]。

4.1 编码压缩性能仿真

算法提出了一种编码压缩方法,将具有包含关系的表项压缩到一段连续的编号空间,压缩第二级TCAM表项数目。在不同的TCAM位宽下,对模式集的压缩性能仿真如图4所示。

从图4可以看出:在不同位宽条件下,对TCAM_1的表项编码后,TCAM_2表项规模存在明显下降。同时,虽然随着表项规模的增大,压缩后的表项数目也有所增加,但表项规模越大压缩性能越好。

4.2 空间复杂度实验仿真

算法采用两级TCAM匹配的方式,存储资源消耗分为两部分,实验在不同位宽条件下,对算法的空间消耗仿真如图5所示。

从结果中可以看出:算法的两级TCAM空间消耗均随位宽的增大而增加,但TCAM_1比TCAM_2的空间消耗增加更为明显,且呈阶段性增加趋势,这是由模式长度分布和不同位宽条件下划分子串的相关性决定的。

4.3 搜索速率实验仿真

算法每次的移动距离根据前一次匹配结果而定,采用实验数据得到搜索速率仿真结果如图6所示。

从仿真结果可以看出:随TCAM位宽的增加,搜索速率也逐步增加,但提升幅度逐渐减小。

5 结 语

本文针对现有模式匹配算法的不足,提出了两级TCAM的模式匹配算法并利用移位存储实现快速匹配。该算法利用TCAM特性提出一种子串编码方法,压缩第二级TCAM表项。通过分析和仿真, 表明算法具有较高搜索速率的同时也提高了空间利用率。

参考文献

[1] YU Fang, KATZ Randy H, LAKSHMAN T V. Gigabit rate packet pattern-matching using TCAM [C]. Berlin: Proceedings of the 12th IEEE International Conference on Network Protocols, 2004.

[2] SUNG Jung-Sik, KANG Seok-Min, LEE Young-Seok, et al. A multi-gigabit rate deep packet inspection algorithm using TCAM [C]. St.Louis Mo: GLOBECOM 2005-IEEE Global Telecommunications Conference, 2005.

[3]GAO Ming,ZHANG Kenong,LU Jia-hua.Efficient packetmatching for gigabit network intrusion detection usingTCAMs[C].Vienna:Proceedings of the 20th InternationalConference on Advanced Information Networking and Appli-cations,2006.

[4]Alicherry,MUTHUPRASANNA M,KUMAR M.Highspeed pattern matching for network IDS/IPS[C].Califor-nia,USA:The 14th IEEE International Conference on Net-work Protocols(ICNP),2006.

[5] MEINERS C R, LIU A X, TORNG E. TCAM Razor: a systematic approach towards minimizing packet classifiers in TCAMs [C]// Proc. ICNP. Beijing: IEEE, 2007: 266-275.

GIS数据库模式匹配技术研究 篇9

1 实施框架

GIS数据库中对于空间实体的存储, 划分为点、线、面三种遵循拓扑关系的要素类型。假设待匹配的两个空间数据中各有M和N个空间要素 (包括点要素、线要素与面要素) , 如果直接采取两两比较的方式来判断其中是否存在同名实体, 不仅需要极大的比较次数 (M*N) , 而且对于不同种类的实体, 很难设计它们之间的比较规则。因此, 首先要对待匹配空间数据进行各自独立的要素分组, 将点、线、面要素分别归类, 以减少算法时间消耗, 简化对象匹配规则。

2 模式匹配与流程

所谓模式匹配, 即是通过指定的匹配算法, 对两个模式中的每一个元素进行一一对应的分析和比较, 通过对元素间相似程度的判断, 来确定2个模式是否描述同一地理对象, 以达到方便数据流通与共享等目的。

匹配流程大概可以分为下面几个步骤:

2.1 模式树的生成

GIS空间数据库中, 描述相同地理对象的数据文件在形式组织上可能千差万别, 但是其模式结构却相互类似:包含与被包含是两个层次间元素基本的关系, 于是将模式结构转化成一个清晰无异意的模式树, 以方便各个元素的遍历, 进一步进行2个模式相应元素之间的匹配。

模式树通过算法生成, 具体描述如下:

模式树生成之后, 即可以设定规则与算法, 对2个GML实例模式进行匹配了。

2.2 模式树的遍历与元素匹配

模式树的匹配, 主要是通过对两棵树的遍历, 对其每个节点元素进行一对一的对比过程。对于分别处在2棵树中的2个节点, 对其进行相似度的判断。若节点之间的相似程度满足所给定的条件 (大于阈值) , 则建立相互映射关系。若全部节点判断后2棵树满足匹配范围, 则相互匹配, 并生成匹配后的集成模式。

算法采用层序遍历 (逆序遍历算法同样可行, 遍历次序优劣讨论在此省略) 的方式对两棵树进行比较, 对于规范中定义的基本类型, 可以直接进行匹配。首先导入两棵模式树, 然后从树的最底层开始比较, 计算出这一层节点的相似度, 如果其相似度大于给定的最小结构相似度, 则继续往上一层进行匹配。这样逐层往上, 直到树的根节点。

算法简单描述如下:

在算法中, 计算两个树节点的相似度d, 正是整个模式匹配的核心参数。也就是说, 对于两个模式中任意的元素, 如何判断其是否相似, 相似程度如何, 是解决整个模式匹配的关键。

2.3 相似度与阈值

在进行模式匹配时, 通过比较两个输入模式相关元素的相似度, 找出其中相互匹配的元素, 推导出这些元素间的映射关系, 再根据用户给出的模式的最小相似度 (阈值) 来进行判断。如果它们的相似程度大于这个阈值, 则认为它们为同一个地理对象;反之, 则认为它们不是同一个地理对象。

在元素与元素之间的相似度, 具体表现于两个方面:语意相似度和结构相似度。所谓语意相似度, 包括三个方面:元素命名中是否包含同义词、近义词的成分;元素命名是否有缩写与简写关系;元素本身数据类型是否相同。而结构相似度, 则是结构匹配所获取的相似系数, 具体在模式树中, 表现为2个元素分别在各自模式中与其他元素所处的上下位置是否相似, 二者在两个模式树中的父子节点是否相同或相近。

语意相似度的判断, 可以通过匹配函数的方式来定义。定义匹配函数:D=F (ei, ej) , 它的定义在集合M={ ( ei , ej) | ei , ej分别为2个模式中待匹配的对应元素}上, 值域为[0, 1], 则有:

若元素ei、ej在模式中所属元素命名完全相同, 则D1=F1 (ei, ej) =1;否则D1=0。

若元素ei、ej在模式中元素数据类型完全相同, 则D2=F2 (ei, ej) =1;否则D2=0。

若元素ei、ej在模式中元素名称为同、近义词或缩写简写, 则D3=F3 (ei, ej) =1;否则D3=0。

在实际匹配过程中, 根据具体情况不同, 可以由用户自行给定各个函数之间的权值与优先次序;在是否有同、近义词或缩写简写名称的识别过程中, 则需要借助查询同义词库。这个同义词库是根据用户需求自定义的, 并可以在多次匹配过程中进行不断的完善。

结构相似度是结构匹配所获取的相似度系数, 基于模式中元素的上下文以及它的父子节点对两个模式元素进行匹配, 确定结构相似度。结构相似度取值范围为[0, 1], 以T表示。

结构匹配是一个动态的过程, 在进行匹配的过程中, 一个模式中的某一元素的父子节点和另一个模式中的某特定元素的父子节点的结构相似度可能会发生变化, 则这两个元素的结构相似度也会发生相应的变化。在匹配中, 单独使用一个结构匹配算法来计算相关元素间的结构相似度。

确定了语义相似度和结构相似度后, 对其进行加权求和来取得两模式中相关元素间最终的相似度值V, 权值用W表示。则有:

V= W*D + (1-W) *T

匹配者可以根据自己的需要决定在进行匹配时更注重哪一方面的相似性。权值W是匹配者根据自己需要定义的, 具有很大的灵活性。

2.4 集成数据模式

两个数据模式进行匹配后, 用户可以根据需要选取其中的任意一个模式文件来作为它们的集成模式文件, 也可以通过运用以上匹配算法生成的映射, 生成集成模式。算法输入是模式匹配算法中生成的映射, 根据映射关系, 算法自动生成包含树中的叶节点层次, 并在各个映射中生成存在映射关系的元素。这些生成的元素被包含在一个用户自定义的新的数据模式中, 作为匹配结果输出。

经过以上步骤的具体实现, 匹配得以基本完成。具体匹配流程, 如图1所示。

3 匹配不确定性因素分析

模式匹配的关键, 在于对两个模式元素之间相似程度的判断。具体在操作中, 与判断法则密切相关。就目前可行的匹配算法与匹配器中, 面向空间信息集成的模式匹配还并不完善, 基于其他数据集成领域的模式匹配算法仍有一定的参考的价值。

对于语意相似度的判断, 一般会有一个比较明确的结果。无论是对元素命名或元素数据类型的相似度判断, 都可以得到一个明确的取值, 假设定义为T, T=1时, 代表相似, T=0时, 则代表不相似。加入条件之间的权重, 可以简单的得到语意相似度的取值。

对于结构相似度, 判断条件则非常复杂, 并且, 随着匹配的进行, 受到不同匹配模型的影响, 一个模式中的某一元素的父子节点和另一个模式中的某特定元素的父子节点的结构相似度可能会随匹配进程发生变化, 使相似判断成为一个动态的过程。为此, 提出这样的假设:将叶节点元素的语意相似度判断引入结构相似度判断:对于两棵树中的叶节点, 如果它们的语意高度相似, 则可认为它们在结构上相似;对于两棵树中的非叶节点, 如果它们的孩子节点全部或部分高度相似 (取决于匹配精确程度要求) , 也认为他们结构相似。

在实际匹配过程中, 结构相似度是一个需要慎重考虑的问题。因为往往在不同的模式, 由于用户操作、习惯的不同, 对元素的语意命名产生的随机性, 对语意相似度的判断所产生的负面影响, 可以通过字库词库的不断完善而逐渐减小;但是由于两个模式之间的空间关系, 空间信息组织方式等条件的不同, 对结构匹配效果产生的影响, 则很难完全通过算法进行完美的解决。这一点, 正是匹配存在不确定性因素的根本原因。

对于此, 语意相似度和结构相似度反差很大的情况下, 权重的取值就非常重要。两个模式需要历经二次匹配乃至多次匹配, 调整不同的权重与阈值设置, 才可能得到理想的匹配结果。

4 结束语

利用模式匹配技术, 可以基本准确的判断两个模式文件是否定义的是同一个地理对象, 并在匹配通过的基础上生成它们的集成模式文件, 有利于模式文件的流通与共享。但是, 由于现实世界地物特征的高复杂程度而造成的复杂描述, 以及人们在描述同一特征时的主观性差异, 对模式匹配的精确程度仍然会产生一定的影响, 因此, 有关空间数据模式匹配还有大量的工作有待于进一步的研究。

参考文献

[1]李俊, 关佶红, 李玉珍.GML空间数据存储映射模型研究[J].武汉大学学报 (信息科学版) , 2004, 29 (12) :1071-1074.

[2]关佶红, 虞为, 安扬.GML模式匹配算法[J].武汉大学学报 (信息科学版) , 2004, 29 (2) :169-174.

[3]李由, 刘东波.基于数据实例分布特征的自动模式匹配方法[J].计算机科学, 2005, 32 (7) :11-15.

[4]简睿, 俞勇.基于形式化概念分析的XML Schema映射[J].上海交通大学学报, 2005, 39 (4) :531-534.

一种改进的单模式匹配算法 篇10

日前,绝大多数网络入侵检测系统都依旧是采用精确的模式匹配技术[1],据公安部计算机信息系统安全产品质量监督检测中心的报告,国内送检的入侵检测产品95%是属于基于入侵规则模式匹配的特征检测产品[5]。当使用轻量级网络入侵检测系统snort 1.6.3对87, 000, 000数据包约超过1G byte的网络数据进行测试时,其测试结果表明,模式匹配过程是系统运行过程中代价最昂贵的部分,约占整个系统的31%[4]。显然,模式匹配在网络入侵检测系统中占有相当重要的地位,也极易成为系统性能瓶颈。

本文在分析BM、BMH算法的基础上,从概率论角度提出了改进的单模式匹配算法I-BMH (Improved-BMH) ,从整体上提高滑动窗口的最大平均值,从而提高匹配效率。

2. 背景知识简述

堪称经典之作的单模式匹配算法是BM (Boyer-Moore) [2]和BMH (Boyer-Moore-Horspool) [3]。

BM算法是首先使模式串Pat和主串Text的左端对齐,然后从右至左逐个匹配,若失配,根据启发策略操作,尽可能使模式串右移,使得Text失配字符与Pat中最右的相应字符对齐。

根据算法BM启发策略的不同,可将其分为坏字符移动和好后缀移动。坏字符移动是指,若该策略匹配过程中在Text[i]处匹配失败,如果存在最右的Pat[j]=Text[i],将Pat[j]和Text[i]对齐,否则,使Pat[1]和Text[i+1]对齐,然后,继续下一轮比较;好后缀移动是指为充分利用失配时已成功匹配的字符串u,右移Pat使得Pat的某一最大子串v等于u的最大后缀u',并且Pat[v]之前的字符不等于Pat[u']之前的字符。

算法BMH是利用算法BM的坏字符移动启发策略,当失配时,无论失配位置在何处,都以Pat最后一个字符所对应的当时Text的字符Text[i]为参考字符,Pat右移使得存在最右的与Text[i]相等Pat[j]同Text[i]对齐,否则,右移Pat使得Pat[1]同Text[i+1]对齐。

3. 单模式匹配算法的改进

为方便论述,本文设Pat=a1a2…aL为匹配的模式串,Text=b1b2…bn为匹配的文本串,Pat长度为L, Text长度为n, shift为模式匹配失配时Text指针右移距离,定义delta1 (char) 为[2]:

3.1 I-BMH (Improved-BMH) 算法

在采用坏字符启发策略时,无论是算法BM还是BMH,发生失配时每次右移距离均取决于失配时所选参考点Text中字符对应的delta1值。为了提高匹配效率,须尽量保证每次右移的shift值最大且尽量降低选取max{delta1}的比较次数,从而获得更佳的匹配效率。

从概率论的角度看,为获取最大平均右移距离,应降低失配参考字符/串S在Pat中出现的概率。|S|值越大S串出现在Pa中概率越小,但在实际应用中,为统一公式必须选取合适的|S值。

因此,本文提出了改进的算法I-BMH,并且选取|S|=2。下面论证公式的统一性、求法与|S|=2的必要性。

(Ⅰ)公式的统一性及求法

(1) 当delta1 (Text[i]) ∈[1, L-1]时,字串符Text[i]Text[i+1]须在下一次匹配过程中与Pat中某字符比较。若该字符串]出现在Pa中,则找出delta3 (Text[i]Text[i+1]) ,使得Text失配字符与Pat中最右的相应字符对齐。显然,若Text[i]≠Text[i+1],delta3 (Text[i]Tex[i+1]) =delta1 (Text[i]) ,否则,delta3 (Text[i]Text[i+1]) =delta1 (Text[i]) +1;

(2) 当delta1 (Text[i]) =L时,字符串Text[i]Text[i+1]中的Text[i将不出现在下一次匹配过程中,此时Text[i]Text[i+1]也一定不出现在Pat中。显然,delta3 (Text[i]Text[i+1]) =L=delta1 (Text[i]) ;

由 (1) (2) 可知,当取|S|=2时,I-BMH算法的delta3 (Pat[i]Pat[i+1]) 取值情况为:若Pat[i]≠Pat[i+1],delta3 (Pat[i]Pat[i+1]) =delta1 (Pat[i]) ,否则,delta3 (Pat[i]Pat[i+1]) =delta1 (Pat[i]) +1。与此同时,所有未出现在模式Pat中的排列Text[j]Text[k]对应的delta3值均为L。显然,满足公式统一且仅与模式串Pat本身相关。

(Ⅱ)|S|=2的必要性

为保障(Ⅰ)公式的统一性,须选取|S|=2。若取|S|=n, (L>n≥3) 则函数delta3必出现断点,因存在漏配现象的可能性而无法使公式统一。

因此,应选取|S|=2。

图1是I-BMH的一个匹配实例:

3.2 I-BMH算法优越性

因失配时决定主、从串右移距离的算法I-BMH总不小于BMH。所以,I-BMH平均性能优于BMH。

文献[5]采用改良的坏字符启发策略,文献[6]仅从数学平均期望值的角度获取算法BM和BMH中取值较大的为失配时的右移距离。文献[5]、[6]做法存在以下不足:

(1) 失配时多次查询匹配

文献[5]首先看Text[fail]与Pat关系,其次看Text[i-1]与Pa关系以及当Text[i-1]=Pat[j]时Pat[j-1]与Pat[fail]的关系,额外增加多次比较开销;文献[6]若要避免shift=max{delta1_BM[Pat[i]], delta1_BMH[Pat[i]]}选取比较开销,需要提前计算出相应的shift值,显然,此时的计算量要稍大于I-BMH的相应工作;

(2) 期待失配字符不在Pat中最大移动距离的平均概率偏低

设字符集∑长度为|∑|,从平均概率的角度看,Text[i]不出现在Pat中的概率为1-L/|∑|,而Text[i]Text[i+1]不出现在Pat的概率变为1-L/|∑|2。显然,若选取Text[i]Text[i+1]为shift值决定字符,Pat移动距离为L的概率比Text[i]或Text[i+1]大 (1-L/|∑|2) - (1-L/|∑|) =L* (|∑|-1) /|∑|2。

因此,算法I-BMH平均性能优于BMH以及文献[5]、[6]中阐述的两种坏字符启发策略。

4. 算法时间复杂度分析与实验结论

4.1算法时间复杂度分析

时间复杂度包括右移动次数shiftn和每次回溯比较次数cmpn,总比较次数即为shiftn*cmpn。

若每一轮比较已开始便失败且shift右滑模式长度L,算法I-BMH获最好性能,时间复杂度为O (n/L) ;若每一轮比较直至匹配完整个模式长度L的最后一个字符失败且shift右滑长度为1,算法I-BMH获最坏性能,时间复杂度为O (n*L) 。那么,它的平均性能时间复杂度如何呢?

对于主串Text的任一字符bi,要么出现或要么不出现在模式串Pat中。所以,失配时平均右移距离为:

因此,匹配过程中shift向右平均移动总次数为n/shift_aver。每次右移前发现失配情况出现需要进行的平均比较次数为cmp_aver= (1+L) /2。所以,算法I-BMH总的平均比较次数total为:

4.2 实验及结论

本文实验机配置:Pentinum (R) 4 CPU 2.66GHZ,内存512MB,硬盘80G,操作系统Redhat9.0, Linux C;根据参考文献[2][3]及本文实现算法,选取RFC2461.txt (约223KB) 的IPv6邻居发现协议作为测试数据源,以ASCII字符集为模式串构造源随机构造模式规则数,统计总时间,实验结果如右表所示。

结果表明,算法I-BMH平均匹配效率得到一定程度提高。

5. 小结

本文在分析单模式匹配算法BM及BMH的基础上,从概率论的角度论述了如何最大限度的保障匹配失配时,模式串向右滑动距离总和的平均值最大,以及如何选取恰当的参考模式串长度。实验结果表明,改进后的算法平均匹配效率得到一定程度的提高。

摘要:本文在分析单模式匹配算法BM和BMH的基础上, 从概率论的角度分析了如何保障匹配失效时最大限度的滑动模式串, 以及如何选取参考滑动模式串的长度, 提出了改进的单模式匹配算法I-BMH。实验结果表明, 改进后的模式匹配算法平均效率得到一定程度的提高。

关键词:模式匹配,BM,BMH,I-BMH

参考文献

[1]CHEN Xun-xun, FANG Bin-xing.Optimizing of large-number-pat-terns string matching algorithms based on definite-state automata[J].Journalof Harbin Institute of Technology, 2007, 14 (2) :236-239.

[2].Boyer RS, Moore JS.A fast string searching algorithm[J].Communicationof the ACM.1997, 20 (10) :762-772

[3].R.Nigel Horspool.Practical fast searching in strings.Software Practiceand Experience.1980, 10 (6) :501-506

[4].Mike fisk, George Varghese, Fast content-based packet handling for in-trusion detection[R].UCSD Technical Report CS2001-0670.2001-05

[5].宋明秋等.IDS中新的快速多模式匹配算法及其设计[J].计算机工程与应用.2005 (21) :159~162

利用“匹配颜色” 篇11

这是一张拍摄于中午时分的照片(如图1)。

这是另一张,用做润色的素材照片(如图2)。

在Photoshop中打开这两张照片(如图3)。

选择拍摄的中午时分的照片,点击“图像”菜单,在“调整”子菜单中选择“匹配颜色”命令(如图4)。

在“匹配颜色”命令对话框里的“图像统计”中“源”项目的下拉菜单中选择“颜色.jpg”文件(“颜色”为图2的文件名),这时图被蒙上了一层黄颜色(如图5)。

接下来,调整图像的颜色。在“匹配颜色”命令对话框的“图像选项”项目下,分别有“透明度”、“颜色强度”和“渐隐”三个滑块。首先调整“渐隐”滑块,减淡图像中的黄颜色(如图6)。

将“明亮度”的滑块向右侧移动,使照片整体调子变亮(如图7)。

向右移动“颜色强度”滑块,加强一些颜色的色彩饱和(如图8)。

完成后,点击确定按钮。通过“匹配颜色”命令,将照片的颜色进行了润饰,加强了黄昏光的效果(如图9)。

接下来,点击“图像”菜单,“调整”子菜单中的曲线命令(快捷键“Ctrl+M”),将曲线调整成“S”型,增加照片整体的对比和层次(如图10)。

在“曲线”命令对话框中,点击“通道”下拉菜单,选择蓝色通道。将蓝色曲线稍微提高一些,加强照片中的蓝色,让黄昏的效果更加真实(如图11)。

点击确定按钮,这样就用简单的“颜色匹配”命令,将一张中午拍摄的照片变成了黄昏时候的照片。

模式匹配 篇12

基于图像处理的交通安全监控应用越来越广,主要包括闯红灯自动拍照、逆向行驶、道路违章、压线越线违章、车速监控、关口自动登记收费等。所有这些技术都是通过安置在道路上的监控设备抓拍的图像信息,进行图像的自动分析处理提取有效的特征信息。随着智能交通的发展,对道路违章技术的自动检测也越来越重视。但是,道路违章检测技术相对于其他的检测技术难度较大,因为道路违章识别的对象明显更复杂。比如有些路段仅限小车通过,各种卡车通过的话则属于道路违章。此时就要求违章检测系统能够实时地判断出当前通行的车辆类型,然后才能判别其是否属于道路违章。

1 车辆道路违章监控系统

如图1所示,基于视频的车辆道路交通违章违章检测系统主要由3个部分组成:前端数据采集与监测部分、数据传输部分以及后台处理部分。

1)前端基于视频的车辆道路交通违章违章检测部分

前端违章检测部分由摄像机、镜头、视频采集卡和工控机以及运行在其上面的软件等的组成,主要负责基于视频的车辆道路交通违章违章检测、抓拍等工作,是整个系统的核心部分。

2)传输部分

传输部分通常分无线传输、光纤传输和电话线传输等几种方式,一般由光纤收发器、光纤或者电话线、调制解调器等组成,主要负责从前端违章检测设备到后台管理系统之间违章数据和从后台管理系统到前端违章检测设备之间控制指令的传输。

3)后台管理部分后台管理部分

由后台数据库服务器、数据录入和违章处罚工作站等组成,主要负责违章数据录入、违章处罚、违章查询等工作。

2 白天道路违章车型识别算法

道路交通违章检测系统所遇到的新问题主要为:1)背景更为复杂,道路上运动车辆运行速度快,要求检测算法能够快速地对车型进行判断;2)车辆运行轨迹有可能不断变化,甚至出现不规则的轨迹,要求检测算法能够消除因车型轨迹不同而产生的误判;3)车辆阴影在阴雨雾天,判别难度大,这种情况下人眼也很容易误判,因此对自动判别算法要求更高。

2.1基于边缘特征的提取算法

图象的边缘位置往往伴随着灰度值的剧烈变化,因此边缘检测利用图象的这一特征进行提取。但是由于信号的高频分量很难和噪声区分开来,这就使得看似很简单的边缘检测问题变得很难。边缘检测的难度也是集中在如何将边缘信息和高频噪声信息区分开来。

线边缘结构检测法,其依据是如果仅仅是车辆阴影覆盖车型框架,那么车型轮廓的线结构依然比较完整;而如果是存在车辆道路交通违章违章,则车型轮廓的线结构被完全破坏。

如何判断线结构是否完整?对于车型框架必然存在边缘轮廓,表现在二值化图片上为图像的某行存在“1010……01”特征。所以可以对捕获的图片的车型框架进行二值化处理,然后逐行横向扫描,根据扫描的结果,与预先存储的车型框架进行匹配,当匹配程度高于某一阈值,则认为当前车辆属于该类型的车辆,否则与其他类型的车辆轮廓进行匹配。若一直没有匹配的车型,则可通过连续多张照片,重复判别加以修正结果,如果一直没有得到匹配结果,则可将该车辆定为待定车型,由人工进行识别。识别流程如图2所示。

这种方法在图像质量较高,车型框架较清晰的情况下,有很高的检测准确率,也能部分克服光线的影响,但是当图像质量较差,或者在晚上光线严重不足时,识别效果非常差,因此需要专门研究夜晚条件下车辆类型识别技术。

3 夜间道路违章车型识别算法

通过以上的探讨,可以发现道路违章检测中,光线不足是影响判别结果的关键因素,可能引起了很多误判。另外,道路违章检测的工作环境变化复杂,各种检测方法有其优缺点,一种方法可能在某种情况下效果良好但是在其他情况下效果不佳,无法适用于全部情况。像车辆轮廓检测法在图像质量较高时效果不错而在图像质量不佳时其性能大大降低,因此本文专门设计了夜间环境下的道路违章车型识别算法。

若为夜晚,则认为图片质量较差,采用灰度帧差统计法,首先对车型框架图像预处理,进行滤波,灰度化。然后逐行求该行灰度平均值,将当前处理图像的该值与背景图像的该值做比较,若差值大于灰度门限,则认为属于车辆轮廓,记cha[i]=1,否则记为cha[i]=0。最后统计描绘出车辆的大致轮廓,与预设的车型库进行匹配查找。

白天和夜间的时间区段可以预先设定,一般取白天为7:00至20:00,夜晚为20:00至7:00。检测系统根据检测时刻的时间,自动调用白天或者夜间的检测程序进行识别。识别流程如图3所示。

4 算法的实现

根据算法的设计流程。下面将对算法的具体实现环节进行详细的介绍。

1)对车型框架进行图像预处理,包括中值滤波、灰度化等。

摄像机拍摄的图片画面较大,对整个图像进行处理显然会消耗大量的运算,所以这里我们在架设摄像机的时候就根据镜头角度等在图像中找定一个车型框架,所有的运算只在此区域内进行。

为了抑制噪声,我们通常我们选用低通滤波器,但是由于在线结构检测法车辆违章检测中,边缘包含大量的高频信息,所以,过滤噪声的同时,必然使边界变模糊。反之,为了提升边缘,我们通常使用高通滤波器,但同时噪声也被加强了。中值滤波就是一种既能保护边缘信息,又能过滤噪声的图像增强办法。

中值滤波的原理就是用一个窗口W在图像上扫描,把窗口内包含的图像像素按灰度排序,取灰度值居中的像素灰度为窗口中心像素灰度。

灰度化则是通过以下公式得出:

2)求边缘二值化,得出车型轮廓边缘。

图像边缘是图像的重要特征之一。图像边缘保留了原始图像中相当重要的部分信息,而又使得总的数据量减小了很多,所以在图像处理和图像识别中,图像边缘化具有重要的意义。要给图像的边缘下一个定义还挺困难的,从人的直观感受来说,边缘对应于物体的边界。图像上灰度变化剧烈的区域比较符合这个要求,我们一般会以这个特征来提取图像的边缘。用于图像识别的边缘提取往往需要输出的边缘是二值图像,即只有黑白两个灰度的图像,其中一个灰度代表边缘,另一个代表背景。比较常用的边缘化算子包括拉普拉斯算子,索贝尔算子,罗伯特算子等。

因为车辆轮廓信息特殊,其边缘有很强的方向性,虽然摄像机镜头角度问题会导致有少许失真,但是通过几何矫正,车辆轮廓与背景图案区别还是很明显。为了准确、清晰地提取出图像的边缘,本文采用的是9×9的边缘化算子。

3)借助模板除噪

通过分析边缘二值化后的效果图,发现有时车型轮廓虽然非常清晰,但是在车型框架仍然存在很多的噪声点。这些噪声点对我们后继的横向扫描,寻求正确的车型匹配影响较大,所以需要有效的方法对其进行消除。考虑到车型轮廓的特征,本文对不处于轮廓最外层的噪声点都进行了过滤。

4)逐行扫描,检测轮廓是否完整。

这一步主要对得到的二值图像的每一行进行横向扫描,检测其轮廓的最外侧边缘是否完整。

5)断点修复。

对于列向量Length[],由于噪声的影响,不能完全反映车型框架是否准确,导致对车辆违章情况也判别出错。因此,需要在轮廓不完整的地方,进行预测修复,修复的策略可以通过再次采集若干张图片进行拼接处理。

6)对得到的车辆轮廓进行模式匹配,判断当前车辆的类型。

7)查找该车辆类型的允许通行情况,判定其是否违章,如果违章,则记录下该车的照片,否则,放行。进行新的图像处理。

5 测试及结论

本系统在某路进行了试运行,测试环境如下:

测试硬件环境:PC主频1.7GHz,MC30视频采集卡、CCD摄像机,三可变(可调光、调焦、变焦)摄像头。

测试软件环境:Windows2000,Microsoft VisualC++6.0

由于白天和晚上运行的算法不相同,因此分别进行了测试,测试数据如表1,表2所示:

总体而言,白天的测试效果要优于夜间测试效果,这主要是由于白天的光线效果比夜间要好很多。而卡车和小轿车识别率较高,主要是由于其车型特征比较明显,而面包车、小型客车和大型客车这3种车型之间差别不是特别大,识别时比较容易发生混乱。但是,在夜间小轿车的识别率明显下降,主要是由于小轿车深色车辆居多,夜间其反光效果差,对识别率影响非常明显。

本文研究了道路交通违章检测问题,分析了图像检测算法的原理思想,并比较分析了各自的优缺点,提出了一种白天夜间自动识别的混合检测方法,即在白天图片质量较好时,采用结合HSV颜色空间分析车辆轮廓检测算法,该算法利用车型框架的边缘结构特征作为依据检测是否存在车辆或阴影道路交通违章,并且加入了HSV颜色空间分析来检测车辆边缘轮廓区域,若获得的车辆轮廓达到预先设定的一定阈值,则判定其车辆类型;在夜晚图片质量下降的时候,采用灰度差值法。此方法用前后帧差法检测,算法简单,虽然误判率较高,但是在图像质量差时能继续工作。本算法的实现过程中用到了中值滤波、方向性模板除噪、预测补偿和HSV颜色空间分析等图像处理算法,与灰度帧差统计法和色度帧差统计法相比,能够有效克服天气等噪声的影响。在实际测试中取得不错的效果。

参考文献

[1]任述明,向怀坤,刘建伟,席锋.基于视频图像的车速检测研究[J].交通与计算机,2007,25(1):90-93.

[2]刘肃亮,李劲华.违章逆行智能视频监控系统设计[J].计算机工程与设计,2007,28(3):732-734.

[3]Mao-Chi Huang Shwu-Huey Yen A real-time and color-based computer vision for traffic monitoring system[J].IEEE ICME5/04 2004.

[4]Tomas Rodirguez Adaptive real-time segmentation in traffic scenes[J].Machine Graphics&Vision vol.13 no.1/2 2004.

[5]朱双东,张懿,陆晓峰.三角形交通标志的智能检测方法[J].中国图象图形学报,2006,11(8):1127-1131.

[6]林广宇,魏朗.基于数字图像的汽车驾驶员行驶状态判别[J].计算机工程,2007,33(22):193-194,197.

[7]胡炜炜,李树广,吴舟舟.序列图像的自适应背景提取及车型分类[J].计算机工程与应用,2007,43(12):239-242.

上一篇:三年级起步作文的教学下一篇:瑞士中小企业生存之道