2009-12-14 42 views
3

我想查找模式並按照HEX文件中的出現次數對它們進行排序。查找十六進制模式和出現次數

我不是在尋找一些特定的模式,只是爲了對發生的事件進行一些統計並對它們進行排序。

DB0DDAEEDAF7DAF5DB1FDB1DDB20DB1BDAFCDAFBDB1FDB18DB23DB06DB21DB15DB25DB1DDB2EDB36DB43DB59DB32DB28DB2ADB46DB6FDB32DB44DB40DB50DB87DBB0DBA1DBABDBA0DB9ADBA6DBACDBA0DB96DB95DBB7DBCFDBCBDBD6DB9CDBB5DB9DDB9FDBA3DB88DB89DB93DBA5DB9CDBC1DBC1DBC6DBC3DBC9DBB3DBB8DBB6DBC8DBA8DBB6DBA2DB98DBA9DBB9DBDBDBD5DBD9DBC3DB9BDBA2DB84DB83DB7DDB6BDB58DB4EDB42DB16DB0DDB01DB02DAFCDAE9DAE5DAD9DAE2DAB7DA9BDAA6DA9EDAAADAC9DACADAC4DA92DA90DA84DA89DA93DAA9DA8CDA7FDA62DA53DA6EDA 

這就是HEX文件的摘錄,並作爲一個例子,我想獲得:

XX發生BDBDBD的

XX出現B93D

的是有辦法挖掘該文件以生成該輸出?

+0

你在尋找6或4個字符模式,或者兩者兼而有之。如果您正在尋找任意長度的模式,則任務要複雜得多。如何重疊模式? – pavium 2009-12-14 21:42:29

+0

這個作業幫助嗎? – GrayWizardx 2009-12-14 21:55:54

+0

我正在尋找對長度模式(2,4,6 ...)。沒有重疊的模式。該文件大約700Kb,因此我認爲這個程序的效率沒有太大的問題。 – 2009-12-14 21:57:01

回答

2

當然。使用sliding window來創建計數(該鏈接用於Perl,但它似乎足以理解該算法)。你的模式被命名爲N-grams。儘管如此,你將不得不限制最大模式。

+0

謝謝,這解決了我的問題! – 2009-12-14 23:06:01

0

您可以使用正則表達式來創建模式來搜索。

所需的正則表達式非常簡單。只需使用您正在搜索的確切短語。然後,應該使用您正在使用的語言(您沒有指定)的正則表達式函數來計算匹配的數量。

使用它來創建一個簡單的計數器。

+0

抱歉沒有指定語言。這可能是Objective-C/Cocoa或PHP,這兩者是我可以編寫代碼的東西。 – 2009-12-14 21:44:41

1

這是一個非常經典的CS問題。一般而言,代碼實現起來並不重要,因爲它需要對序列進行至少一次完整的解析,並且根據您的效率和內存/處理器的限制可能需要幾次。見here

您將需要以某種方式對輸入字符串進行分區,以確保您獲得一個很好的子序列。

如果有一個特定的問題,我們可以幫助更多,但總體戰略是在上面的維基百科文章。

+0

你能告訴我CS的意思嗎? – 2009-12-14 21:46:02

+3

呃 - 哦!休斯頓,我認爲我們有一個問題。 – pavium 2009-12-14 21:49:00

+0

計算機科學 – 2009-12-14 21:54:19