btvn.vn
Tìm kiếm Đăng nhập

Sinh đa thức bằng đổi chỗ và quay lui

Lưu trên thiết bị này
Chuyên đề lựa chọn CS: Kĩ thuật duyệt · Chọn bài khác

Cố định lần lượt từng vị trí

```python def genPolynomials(coefs, k): global count if k == len(coefs): if coefs and coefs[0] != 0: print(format_polynomial(coefs)) count += 1 return used = [] for i in range(k, len(coefs)): if coefs[i] in used: continue used.append(coefs[i]) coefs[k], coefs[i] = coefs[i], coefs[k] genPolynomials(coefs, k + 1) coefs[k], coefs[i] = coefs[i], coefs[k] ``` Ở đầu mức k, các vị trí trước k đã cố định; phần từ k tới cuối còn chờ sắp. Mỗi lần đổi coefs [k] với một vị trí i trong phần còn lại để chọn hệ số cho chỗ k. Gọi đệ quy xử lí k+1 rồi đổi lại đúng hai vị trí để khôi phục dãy. used là danh sách các **giá trị đã thử tại riêng mức này**. Nếu đã thử cùng một giá trị cho vị trí k thì bỏ lựa chọn lặp ấy. Mức đệ quy sau có used mới nên vẫn dùng được lần xuất hiện khác của cùng giá trị. Không dùng quy tắc “hệ số chưa có trong toàn tiền tố” khi đầu vào có hệ số trùng. Tại k==len(coefs), chỉ in khi hệ số đầu khác 0. Hàm format_polynomial của bài trước đổi dãy hệ số thành biểu thức. Sau khi lời gọi gốc kết thúc, dãy đầu vào được khôi phục như trước.

Hai hệ số bằng nhau vẫn cần được dùng đủ

Với [2,2,−1], có ba dãy hệ số khác nhau: | Dãy hệ số | Đa thức | |---|---| | [2,2,−1] | $2x^2+2x-1$ | | [2,−1,2] | $2x^2-x+2$ | | [−1,2,2] | $-x^2+2x+2$ | Mỗi nghiệm có đủ hai hệ số 2. Hai cách đổi chỗ hai lần xuất hiện của số 2 không tạo đa thức mới, nên không in lại. Với [1,1,0], ba hoán vị giá trị chỉ còn hai nghiệm bậc 2 vì [0,1,1] bị loại.

Kiểm số lượng, hệ số và bậc

Chạy: ```text python3 g11-cs-thuc-hanh-quay-lui.py da-thuc 3 0 -2 python3 g11-cs-thuc-hanh-quay-lui.py da-thuc 2 2 -1 ``` Lệnh đầu cho bốn đa thức bậc 2; lệnh sau cho ba đa thức trong bảng. Với hệ số đều 0, không có nghiệm đúng bậc yêu cầu nên tổng số nghiệm là 0. Một hệ số khác 0 cho đa thức hằng bậc 0. Mỗi nghiệm cần giữ cùng các giá trị hệ số và đủ số lần xuất hiện như đầu vào; hệ số đầu khác 0, không in lặp dãy hệ số. Tệp tải nhận tối đa 7 hệ số để thực hành. Dùng số âm như ví dụ và thử cả 0.0,1.0 để kiểm theo giá trị số.

Bài luyện

Vì sao phải đổi lại coefs [k] và coefs [i] sau lời gọi nhỏ?
Chọn một đáp án

Bài luyện

Vì sao used phải riêng cho từng mức đệ quy?
Chọn một đáp án

Bài luyện

Với hệ số [1,1,0], có bao nhiêu đa thức đúng bậc 2 khác nhau?
Chọn một đáp án

Bài luyện

Nếu mọi hệ số nhập đều 0, cần có bao nhiêu nghiệm đúng bậc k theo yêu cầu hệ số đầu khác 0?
Chọn một đáp án

Đang học