Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Kami Boleh Menjana Semua Kata Laluan Yang Mungkin dalam Panjang Tertentu dengan Cekap?
Menghasilkan Semua Kemungkinan Kata Laluan dalam Panjang Tertentu dengan Cekap
Apabila cuba untuk meretas kata laluan secara kasar, adalah penting untuk menjana semua kombinasi yang mungkin dengan cekap . Untuk mencapai matlamat ini, kami akan meneroka pendekatan yang mengelak daripada menyimpan semua kata laluan dalam ingatan secara serentak dan membenarkan panjang kata laluan berubah-ubah.
N-ary Cartesian Product
Tugas di tangan melibatkan penjanaan produk Cartesian n-ary bagi satu set dengan dirinya sendiri. Pertimbangkan masalah menjana semua kata laluan 3 aksara menggunakan aksara 'a' dan 'b' dengan n = 3.
Pembinaan Berulang
Kami boleh membina secara berulang yang dikehendaki produk dengan terlebih dahulu mendapatkan produk n-1, kemudian menambah setiap elemen set awal pada setiap satu produk.
Contoh dengan Dua Aksara
Untuk menggambarkan konsep ini, mari kita pertimbangkan proses menjana semua kata laluan 3 aksara daripada set {a, b}:
Pelaksanaan dalam Go
Fungsi Go berikut melaksanakan pembinaan berulang teknik:
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 }
Pengoptimuman Prestasi
Penyelesaian yang dibentangkan mempunyai ruang untuk penambahbaikan jika menjana kata laluan pelbagai panjang diperlukan. Untuk mengelakkan pengiraan semula, anda boleh mengubah suai kod untuk mengambil produk (n-m) arbitrari dan memperoleh produk n-ary secara rekursif.
Atas ialah kandungan terperinci Bagaimanakah Kami Boleh Menjana Semua Kata Laluan Yang Mungkin dalam Panjang Tertentu dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!