高效產生給定長度的所有可能的密碼
當嘗試暴力破解密碼時,有效產生所有可能的組合至關重要。為了實現這一目標,我們將探索一種避免同時將所有密碼儲存在記憶體中並允許可變密碼長度的方法。
N 元笛卡爾積
任務手頭涉及產生一個集合與其自身的 n 元笛卡爾積。考慮使用字元 'a' 和 'b' 且 n = 3 產生所有 3 字元密碼的問題。
迭代構造
我們可以迭代構造所需的密碼首先獲得n-1 個乘積,然後將初始集合的每個元素添加到每個乘積中產品。
兩個字元的範例
為了說明這個概念,讓我們考慮從集合{a, b} 產生所有3 字元密碼的過程:
實作Go
以下Go函數實現了迭代構造技術:
func NAryProduct(input string, n int) []string { if n <= 0 { return nil } prod := make([]string, len(input)) for i, char := range input { prod[i] = string(char) } for i := 1; i < n; i++ { next := make([]string, 0, len(input)*len(prod)) for _, word := range prod { for _, char := range input { next = append(next, word + string(char)) } } prod = next } return prod }
性能最佳化
提出的解決方案有改進的空間如果需要產生各種長度的密碼。為了避免重新計算,您可以修改程式碼以採用任意 (n-m) 元乘積並遞歸地導出 n 元乘積。
以上是我們如何有效地產生給定長度的所有可能的密碼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!