2012-08-31 42 views
3

有10個按鈕。如果按正確的順序按下這些按鈕可以解鎖(5次按下)。每按鈕一次按下觸發器解鎖檢查。需要幫助構建高效的窮舉搜索算法

示例: 「密碼」 是123456,我按下按鈕0 1 2 3 4 5 6 I解鎖從第六按鈕按壓鎖。

我需要設計算法試圖以最有效的方式,所有可能的組合(應該按下按鈕即最小量)。

我可以解釋按鈕號碼作爲數字和順序數字位置按下按鈕的數量,然後嘗試在試圖以解除鎖定所有99999點的組合,但我覺得有一個更有效的算法來做到這一點。

有什麼我可以做這個搜索優化?

+3

都能跟得上 - 窮舉搜索有關搜索所有的可能性。你的解決方案似乎沒有冗餘(沒有組合檢查兩次),並且很簡單。整數的使用也是有效的。 – amit

+0

如果例如11223是有效的組合,則可能是優化的一件事情。如果不是的話 - 您可以嘗試用重複的數字修整數字。 – amit

+0

@amit 112233是一個有效的組合。 –

回答

6

爲了優化上的鎖蠻力攻擊,你可以使用De Bruijn sequences

該序列可用於縮短對沒有「輸入」鍵並接受輸入的最後n個數字的類似PIN的密碼鎖的暴力攻擊。例如,具有4位代碼的數字門鎖將具有長度爲10,000的B(10,4)解決方案。因此,只有最多10,000 + 3 = 10,003(因爲解決方案是循環的),需要按下才能打開鎖。單獨嘗試所有代碼將需要4×10,000 = 40,000印刷機。

+0

謝謝,這正是我需要的。 –