2009-10-22 62 views
2

我目前正在進行一個項目。在這個項目中,我有一組數據遵循特定的算法。我必須找到模式。在這些數字中查找模式

1 355138022809833 RUPQ730562P 247001 20578330 70175500  
2 355138022809841 RUPQ730563D 247001 72754950 71957850  
3 355138023475287 RVSQ831978E 247001 39374170 25101090  
4 355138023475295 RVSQ831979F 247001 06260280 87190670  
5 355138023475303 RVSQ831980L 247001 05025410 26440510  
6 355138023475352 RVSQ831985Y 247001 96637700 48209200  
7 355138023475360 RVSQ831986A 247001 27362620 70790740  
8 355138023475378 RVSQ831987P 247001 16576600 30002180  
9 355138023475386 RVSQ831988D 247001 74778020 98010580  
10 355138023475402 RVSQ831990M 247001 25716170 97946520  

第一列是序列號。接下來的3列是將給出的輸入。接下來的2是算法的輸出。

所以基本上

我有3個變量x,y和z(第二,第三,上述數據的第4列)

而且

y1 = f1(x, y, z) 

y2 = f2(x, y, z) 

y1爲上述數據

的第5列

y2是以上數據的第6列

我有以上數據。現在我需要找到函數f1和f2。

我應該遵循什麼程序?必須採取哪些措施?

EDIT 1奎師那康德·夏爾馬

我張貼了這個問題不要問了應答算法。我只是要求採取必要的措施來解決這些問題,當我們在變量中也有字母時。按照我的經驗,這是第一次,一小部分的stackoverflow社區都像封閉式的人一樣行事。什麼是整個stackoverflow點?我們在這裏幫助彼此理解和解決問題。當我們有些人需要時,請伸出援助之手。那麼爲什麼我們不停止在技術純粹性(比如字母不是字母字符)方面跳動,並解決主要問題。

更多數據

11 355138023475436 RVSQ831993L 247001 07481830 49057990 
12 355138023475444 RVSQ831994T 247001 65090950 87729430 
13 355138023475451 RVSQ831995B 247001 06689330 60021180 
14 355138023475469 RVSQ831996K 247001 05784310 69836640 
15 355138023475477 RVSQ831997Z 247001 13157740 35850670 
16 355138023475485 RVSQ831998Y 247001 68658020 77311320 
17 355138023475501 RVSQ832000N 247001 01567780 26994970 
18 355138023475519 RVSQ832001E 247001 43775370 58120770 
19 355138023475527 RVSQ832002F 247001 42463550 55145190 
20 355138023475535 RVSQ832003R 247001 85766840 15491950  
+0

f1和f2應該怎樣處理參數?輸出y1和y2? ...在這裏有很少的格式問題以及列對齊。修復會很好。 – 2009-10-22 14:18:47

+0

2個詞語:受過教育的猜測:) – cwap 2009-10-22 14:18:54

+3

請原諒我的懷疑態度,但這聽起來像是在嘗試對某些東西進行逆向工程。聽起來像是在某些數據中「尋找模式」的奇怪要求。或者這是一種難題/謎語? – 2009-10-22 14:20:27

回答

4

對不起,但我認爲你所問的是不可能的(從計算的角度來看)。

這個數據來自能夠做的,說系統,

SELECT Y1, Y2 FROM my_secret_data WHERE Col1 = x AND Col2 = Y and Col3 = Z; 

my_secret_data包含不計算得出的值。

所以,除非你有基礎表,你永遠無法找到解決它(除非你有輸入和輸出的每一個可能的組合 - 那麼這將意味着重建整個表)的算法

外計算,所有我認爲你可以做的是查找模式,並嘗試找出輸入/輸出值代表什麼,並看看你需要的地方。

編輯:

所有未在某些情況下丟失;如果輸入,輸出和算法使用是連續的任何函數(給定的輸入是字母數字,這並不看這裏的情況)

如果他們成功了,你可以(可能)發現通過interpolating算法(事情會有所不同也許是一個神經網絡),但在這些情況下,考慮到這些值,我認爲你需要更多的樣本數據。

+0

感謝您的幫助,DanSingerman。 – 2009-10-22 16:16:15

+0

他們看起來幾乎都是連續的......這些作品相當重要,但輸出似乎在整個空間中傳播開來! – 2009-10-22 19:50:58

3

看行5和6的所有3個輸入參數是相同的,但輸出是不同的。我不認爲這是可能的解決只有你給我們的數據。

+1

很好的發現!除非rownumber也是一個輸入變量,否則這可能無法解決。 – pyrocumulus 2009-10-22 14:22:53

+0

好眼睛德米特里。事實上,如果在相同的輸入下得到不同的結果,它違背CS原則。有沒有參數丟失?有沒有一個暫時的組件? – 2009-10-22 14:23:10

+0

對不起。數據中有錯誤。我現在更新了它。 – 2009-10-22 14:24:52

5

你應該採取的第一步是瞭解這個輸入數據的背景是什麼。然後,您可以選擇對結果列的可能性以及在該上下文中通常使用的算法/函數進行假設。

接下來的一點是分析你自己的輸入數據尋找模式,並與現實世界的東西匹配(例如郵政編碼,序列號,日期等)。因此,你應該看看不同部分的輸入,但也在類似的輸入塊。

如果您以前沒有成功,除了試驗和錯誤之外,您別無選擇。您仍然可以整理出一些功能或算法通過查看輸入數據(例如字母將呈現典型的數學函數沒用的,所以也許它的一些散列函數)。

爲了進一步瞭解您的輸入數據的一些光:

  • x(也是y)的最後一個字符看起來像一個校驗和字符,所以如果你尋找模式檢查沒有最後一個字符的數字/文本
  • y中的字母可能是一些常見的貨幣縮寫,商業進程或其他東西
  • 結果列中的最後0也可能是一些檢查這個char或者取決於z列(沒有足夠的數據來說明)

我想在輸入數據的某些組合上嘗試一些(通用)哈希函數,它們產生8位數的結果並查找結果。

+0

感謝您的幫助,MicSim。 – 2009-10-22 16:15:41

0

你總是可以定義一個分段函數:

F1(355138022809833,RUPQ730562P,247001)= 20578330個 F1(355138022809841,RUPQ730563D,247001)= 72754950

等你不需要連續性。

+0

沒有,這不會工作。我們無法與他們一起找到未知數。 – 2009-10-22 16:22:49

+1

無論你的函數值是以固定點爲準,它可能在其他點上取任意值。 – Jaska 2009-10-22 16:25:15

0

鑑於z值在樣本數據中沒有變化,可以將其刪除。如果你只有數據,那麼真的沒有通用的方法來解決這個問題。另一方面,如果你有能力用你自己設計的任意輸入來測試函數,你可以使用類似於差分密碼分析的技術。

0

這似乎是一個神經網絡最好解決的問題。希望你可以得到一個更大的數據集來訓練!

0

如果你確定有一種模式,你可以嘗試machine learning技術。但是用於設置和訓練「機器」的數據集非常小(每個只有10個)。進一步你需要一個預測,所以幾種算法不適合你,比如聚類,分類,關聯挖掘。神經網絡將是這樣一種技術。這是您可以嘗試的選項。不幸的是,我不是機器學習/數據挖掘專家,不能告訴你方式。對於Java看看WEKA

+0

這幾乎肯定是徒勞的。機器學習技術通常提供近似解決方案它們通常通過將參數與預定義的計算(在神經網絡中,這些通常是權重)協同工作,並且如果原始函數不是相同的形式,網絡將無法複製它們。 – 2009-10-22 16:54:15

+0

只是一個嘗試;-) ... – 2009-10-22 19:51:37

2

你在哪裏得到這些,他們如何被使用?

如果使用真正的f1和f2的實體正在使用它們進行認證,並且它們完全智能化,那麼f1和f2將是加密安全功能,並且基本上沒有機會打破它們。如果他們只是校驗和,你可以嘗試通用校驗和算法。我會從維基百科開始。

你能得到多少數據?你能得到任意輸入的f1和f2的值嗎,還是僅限於你能觀察到的?如果您可以觀察一個字符中輸入不同的值,您可以看到這些變化有多大。如果結果大部分相同,這不是一個加密哈希,你有更好的機會。

這對你和你的公司有多重要?我想說,除非我現在看到的情況多,否則你的成功機率很小。任何解決方案極有可能涉及大量的暴力搜索。

順便說一句,在你的解決過程中,不要使用所有的數據。你可以想出某種功能來適應任何數據點。保留一點數據以便測試,看看您的派生函數是否適用於外部數據。

最後,這是否是道德的?你還沒有告訴我們這些數字來自哪裏,看起來似乎是另一家公司爲安全目的而產生的東西,他們的意圖可能是好的或壞的。這是值得思考的事情,如果僅僅是因爲一個對其他人表現不道德的公司可能對其員工表現出不道德的行爲。

+0

那麼說。謝謝。 – 2009-10-22 17:15:53

0

看從不同的角度數據:

  • 什麼值發生,這個數字。

  • 看看差異。這暴露了x和y是連續的,並且當您剝離最後一位數字/字母時,存在緊密的關係。

  • 看看模式。 y1從06開始,05在第4,5和13,14行。序列號減去校驗位的差值爲16.這可能是巧合,也可能不是。

  • 運行統計測試(在這裏沒有太多的數據)。

  • 查看各種數字系統(十六進制,二進制)中的數據。

  • 看看數字的素數分解。

  • 看看數據中的小差異的影響。

  • 您可能最初想要排除前兩行,因爲它們的序列號與其他序列號相差太遠,這可能會掩蓋可能的模式。

儘量找出儘可能多的計算背景。

密碼分析的一些知識也不會太差。

然後編制一些工作假設,如何計算y1和y2值並對其進行測試。例如,我要檢查的第一個問題就是在移位和xor(也許是CRC)或者序列號模10000000的一些線性函數中忽略尾隨零。

沖洗並重復。如果你有足夠的耐心,並且不太難,你可以找到它。