Bài toán liệt kê
Thứ tự từ điển
Trong các btừ điển, các từ được liệt kê theo thứ tự được gọi là
th tự từ điển. Cho hai từ dưới dạng xâu của các kí tự
x = x1x2...xm
y = y1y2...yn
Tx được gọi là đứng trước từ y theo thứ tự từ điển nếu tồn tại
chỉ số i, sao cho
xj + 1 đứng trước yj + 1
Chú ý: Nếu j>m thì ta coi xj là kí tự rỗng, tương tự nếu j>n thì
coi yj là kí t rỗng, kí tự rỗng đứng trươc mọi kí tự khác.
[sửa] Liệt kê các hoán vị của tập n phần tử
Việc liệt kê toàn bộ các hoán vị của tập X = {x1,x2,...,xm} được
quy về việc liệt kê tất cả n! hoán vị của tập chỉ số {1,2,...,n}. Ta
sẽ liệt kê các hoán vị của n số tự nhiên {1,2,...,n} theo thứ tự từ
điển. Nhận xét rằng, khi xếp theo thứ tự từ điển, hoán vị đứng
trước tiên sẽ là hoán v(1,2,3,...,n 1,n), hoán vị đứng cuối
cùng sẽ là hoán vị (n,n − 1,...,2,1). Ví dụ với n=5, hoán vị đứng
đầu là (1,2,3,4,5), đứng cuối là (5,4,3,2,1). Trong hoán vị đầu
tiên mỗi số đều nhỏ hơn số đứng ngay sau nó, trong hoán vị cuối
cùng thì ngược lại. Vậy kế tiếp sau hoán vị đầu tiên là hoán v
nào?
[sửa] Hoán v kế tiếp của một hoán vị (theo thứ tự từ điển)
Gi sử có hoán vị
x = (x1,x2,...,xn − 1,xn) của n số 1,2,...,n.
Thuật toán sinh hoán vị kế tiếp
1. Tìm từ bên phải sang chỉ số i sao cho xi − 1 < xi.
2. Nếu không tìm thấy thì trả lời x là hoán vị cuối cùng,
không có hoán vị kế tiếp.
3. Nếu có i như vậy:
sắp xếp các giá trị xi,...,xn theo thứ tự tăng dần.
đổi chỗ xi − 1 cho phần tử lớn hơn xi − 1 gần nhất
trong các giá trxi,...,xn
dụ: với n=5
kế tiếp của hoán vị (1,2,3,4,5) là hoán vị (1,2,3,5,4)
kế tiếp của hoán vị (1,2,3,5,4) là hoán vị (1,2,4,3,5)
kế tiếp của hoán vị (1,2,4,3,5) là hoán vị (1,2,4,5,3)
...
kế tiếp của hoán vị (5,4,3,1,2) là hoán vị (5,4,3,2,1)
[sửa] Thuật toán liệt kê tất cả các hoán vị của n số 1,2,...,n
1. Khới tạo: x = (1,2,...,n)
2. Tìm x' là hoán vị kế tiếp của x
3. Nếu không tìm được thì dừng.
4. Nếu thấy,thay x bằng x' quay lại 2.
dụ: Liệt kê 24 hoán vcủa 1,2,3,4 theo thứ tự từ điển
1234
1243
1324
1342
1423
1432
2134
2143
2314
2341
2413
2431
3124
3142
3214
3241
3412
3421
4123
4132
4213
4231
4312
4321.
=== Liệt kê các tổ hợp chập k của tập n phần tử 1,2,3,4,5,6