C 對 byte 陣列進行模式搜尋

2021-09-26 16:30:23 字數 2274 閱讀 8689

最簡單的方法是進行數值判斷,但是**最少是使用linq ,效率比較高是使用 boyer-moore 演算法,下面就告訴大家幾個演算法的**

class

bytearrayrocks

for(

int i = start; i < source.length; i++

)yield

return i;}}

private

static

readonly

int[

] empty =

newint[0

];private

static

bool

ismatch

(byte

array,

int position,

byte

candidate)

for(

int i =

0; i < candidate.length; i++)}

return

true;}

private

static

bool

isemptylocate

(byte

array,

int start,

byte

candidate)

}

這是最簡單的方法,參見

這個方法的**最少

class

linqarraysearch}}

}

這是最快的方法

class

boyermoorehorspool

if(pattern ==

null

)long valuelength = source.longlength;

long patternlength = pattern.longlength;if(

(valuelength ==0)

||(patternlength ==0)

||(patternlength > valuelength)

)var badcharacters =

newlong

[256];

for(

var i =

0; i <

256; i++

)var lastpatternbyte = patternlength -1;

for(

long i =

0; i < lastpatternbyte; i++

)long index = start;

while

(index <= valuelength - patternlength)

} index +

= badcharacters[source[index + lastpatternbyte]];}}}

參見:

測試了三個方法的效能,請看下面

benchmarkdotnet=v0.10.14, os=windows 10.0.17134

intel core i7-6700 cpu 3.40ghz (skylake), 1 cpu, 8 logical and 4 physical cores

.net core sdk=2.1.202

[host] : .net core 2.0.9 (coreclr 4.6.26614.01, corefx 4.6.26614.01), 64bit ryujit

defaultjob : .net core 2.0.9 (coreclr 4.6.26614.01, corefx 4.6.26614.01), 64bit ryujit

method

mean

error

stddev

linq

13,332.8 us

251.782 us

466.694 us

bytearrayrocks

371.3 us

7.327 us

14.462 us

boyermoorehorspool

108.3 us

1.153 us

1.079 us

其他方法請看下面

使用不安全**的 boyer moore 演算法 c# high performance boyer moore byte array search algorithm

lucene 對搜尋結果進行排序

1 在indexsearcher類中包含了幾個可過載的search方法,有乙個對結果進行排序的search方法宣告為 search query,sort public classsortingexample private directory directory public sortingexam...

對json資料進行排序和搜尋

在使用ajax獲取資料時後台返回的大部分都是json資料,在進行程式開發時有時會需要直接對這些json資料在js程式中再進行一定的操作,如排序 搜尋等,而不是通過ajax請求由資料庫進行這些操作。今天我就教給大家如何使用陣列的方法來實現這些操作 假設json就是後台傳過來的json資料 var te...

php對多維陣列進行排序

data id 13,name arthur dent id 22,name ford prefect id 5,name trillian astra 對多維陣列進行排序,就是這麼簡單!沒錯,就上面一句話就解決問題了!try catch pdoexception e sql select comp...