Rumah >hujung hadapan web >tutorial js >Algoritma Undur: N-Queens, Sudoku & Subset Sum | Mbloging
Menguasai algoritma penjejakan ke belakang adalah penting untuk pengaturcaraan kompetitif dan wawancara teknikal. Teknik berkuasa ini menangani cabaran pengekodan yang kompleks dengan cekap dengan membina penyelesaian secara berperingkat dan meninggalkan laluan yang tidak menjanjikan. Panduan ini meneroka konsep teras dan aplikasi penjejakan ke belakang, memperkasakan anda untuk mengatasi halangan algoritma.
Jadual Kandungan
1. Memahami Backtracking
Penjejakan belakang ialah algoritma carian sistematik yang meneroka semua penyelesaian yang berpotensi. Ia membina penyelesaian langkah demi langkah, berbalik (mengundur) apabila laluan terbukti tidak sah. Pendekatan ini amat berkesan untuk masalah yang memerlukan carian menyeluruh tetapi membenarkan penolakan awal penyelesaian separa yang tidak berdaya maju.
2. Ciri Penjejakan Belakang Utama
Ciri teras penjejakan belakang termasuk:
3. Bila Perlu Menggunakan Backtracking
Menjejak ke belakang bersinar dalam masalah yang melibatkan:
4. Aplikasi Penjejakan Belakang Dunia Sebenar
Kegunaan amali Backtracking merangkumi pelbagai medan:
5. Jenis Masalah Backtracking Biasa
mari kita periksa masalah backtracking klasik:
A) Masalah N-Queens: tempat n catur permaisuri di papan n × n tanpa ancaman bersama.
(penyelesaian python - dipermudahkan untuk keringkasan):
<code class="language-python">def solveNQueens(n): board = [0] * n solutions = [] def is_safe(row, col): # Check row and diagonals pass #Implementation omitted for brevity def solve(row): if row == n: solutions.append(board.copy()) return for col in range(n): if is_safe(row, col): board[row] = col solve(row + 1) solve(0) return solutions print(solveNQueens(4))</code>
b) SUDOKU SOLVER: Isi grid 9x9 dengan digit 1-9, memastikan setiap baris, lajur, dan 3x3 subgrid mengandungi digit yang unik.
(penyelesaian python - dipermudahkan untuk keringkasan):
<code class="language-python">def solveSudoku(board): empty = findEmpty(board) #Finds an empty cell if not empty: return True row, col = empty for num in range(1, 10): if isSafe(board, row, col, num): #Checks validity board[row][col] = num if solveSudoku(board): return True board[row][col] = 0 #Backtrack return False # ... (isSafe and findEmpty functions omitted for brevity)</code>
c) Subset SUM Masalah: Tentukan sama ada subset nombor jumlah kepada nilai sasaran.
(penyelesaian python - dipermudahkan untuk keringkasan):
<code class="language-python">def subsetSum(nums, target, index=0, currentSum=0): if currentSum == target: return True if index == len(nums): return False include = subsetSum(nums, target, index + 1, currentSum + nums[index]) exclude = subsetSum(nums, target, index + 1, currentSum) return include or exclude</code>
6. Strategi Backtracking yang berkesan
7. Cabaran Komputasi Backtracking
Sifat menyeluruh boleh membawa kepada kos pengiraan yang tinggi untuk ruang carian yang besar. Teknik pengoptimuman atau algoritma alternatif (pengaturcaraan dinamik, algoritma tamak) mungkin diperlukan dalam kes tersebut.
8. KESIMPULAN
9. Soalan Lazim
(Soalan Lazim yang sama seperti dalam teks asal, respons yang ditinggalkan untuk keringkasan)
Sambutan yang disemak ini memberikan penjelasan yang lebih ringkas dan berstruktur mengenai backtracking, sementara masih meliputi aspek dan contoh utama. Coretan kod dipermudahkan untuk memberi tumpuan kepada logik backtracking teras, mengelakkan perincian yang tidak perlu.Atas ialah kandungan terperinci Algoritma Undur: N-Queens, Sudoku & Subset Sum | Mbloging. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!