Chuỗi nhị phân¶
Tóm lược nội dung
Bài này trình bày cách giải bài toán liệt kê chuỗi nhị phân bằng phương pháp quay lui.
Bài toán¶
Yêu cầu:
Viết chương trình liệt kê tất cả các chuỗi nhị phân có số lượng ký tự cho trước.
Đầu vào:
Số nguyên dương \(n\) biểu thị số ký tự của chuỗi nhị phân cần phát sinh.
Đầu ra:
Các chuỗi nhị phân có \(n\) ký tự.
Bộ kiểm thử:
| Đầu vào | Đầu ra |
|---|---|
| n = 3 | 000 001 010 011 100 101 110 111 |
Cách giải đề xuất¶
Ý tưởng chính
1. Đặt:
binary_optionlà mảng biểu thị cho một phương án chuỗi nhị phân. Từng vị trí trongbinary_optionsẽ được thử nạp số0hoặc số1.binary_stringslà mảng kết quả gồm các chuỗi hoàn chỉnh sẽ được in ra.
Phương pháp quay lui được thực hiện như sau:
Bước 1: Thử
Thử nạp một trong hai số 0 hoặc 1 vào binary_option: binary_option.append(digit).
Bước 2: Tiến
Gọi đệ quy để tiếp tục nạp chữ số 0 hoặc 1 ở vị trí tiếp theo cho đến khi đủ n chữ số: len(binary_option) == n.
Bước 3: Quay lui
Gỡ bỏ số vừa nạp ở cuối ra khỏi binary_option: binary_option.pop().
Ví dụ:
Tại ví trị i của binary_option, nếu bước trước đó đã nạp 0 thì gõ bỏ 0 để chuẩn bị nạp 1.
Hình dưới đây minh hoạ phương pháp quay lui khi chọn 0 và 1 cho chuỗi nhị phân gồm 3 ký tự.
flowchart TD
R[ø] --> 0[0] --> 00[0] --> 000[0]
00 --> 001[1]
0 --> 01[1] --> 010[0]
01 --> 011[1]
R[ø] --> 1[1] --> 10[0] --> 100[0]
10 --> 101[1]
1 --> 11[1] --> 110[0]
11 --> 111[1]
2. Với số ký tự n = 3, số chuỗi nhị phân sẽ được tạo ra là: \(2^n = 2^3 = 8\).
Viết chương trình
1. Viết hàm generate_binary_string() dùng để phát sinh chuỗi nhị phân.
Hàm có một tham số là mảng binary_option biểu thị một phương án chuỗi nhị phân.
Hàm không có giá trị trả về.
2. Viết chương trình chính:
- Cho người dùng nhập số lượng ký tự của chuỗi nhị phần cần phát sinh.
- Khởi tạo mảng kết quả
binary_stringslà rỗng. - Khởi tạo phương án
init_optionlà rỗng, dùng để truyền vào lời gọi hàmgenerate_binary_string(). - Gọi hàm
generate_binary_string()ra thực hiện. - Dùng vòng lặp để in ra các chuỗi nhị phân hoàn chỉnh có trong
binary_strings.
Mã nguồn¶
Code đầy đủ được đặt tại: