Thuật toán sinh h oán vị và tổ h ợ p
Đặt số nhỏ nhất trong 2 số 3 và 3 vào vị trí 1; Đặt số nhỏ nhất trong 1 số 3 và 2 vào vị trí 2 Suy ra số 213 Vì 1< 3 đổi chỗ 231 Vì 2< 3 đổi chỗ 312 Cuối cùng là hoán vị lớn nhất 321
Thuật toán sinh hoán vị và tổ hợp
Thuật toán sinh hoán vị và tổ hợp
• Ví dụ 2:
Tìm hoán vị liền sau theo thứ tự từ điển của hoán vị 362541
Cặp số nguyên đầu tiên từ phải sang trái có số trước nhỏ hơn số sau là a3 =2< a4 =5 Số nhỏ nhất trong các số bên phải của 2 mà lớn hơn 2 là 4, thay 4 vào vị trí của 2 tức là a3 =4
Sau đó đặt các số còn lại theo thứ tự tăng dần 125 Vậy hoán vị liền sau 362541 là 364125
Thuật toán sinh hoán vị và tổ hợp
Thuật toán sinh hoán vị đi sau (theo thứ tự từ điển) của hoán vị cho trước a1,a2…an như sau:
- Tìm các số nguyên aj và aj+1 sao cho aj < aj+1 và aj+1 >aj+2…an (tức là tìm cặp đầu tiên từ phải sang trái mà số trước nhỏ hơn số sau)
- Đặt vào vị trí j số nguyên nhỏ nhất trong các số > aj của tập aj+1,aj+2…an
Thuật toán sinh hoán vị và tổ hợpThuật toán sinh hoán vị và tổ hợp Thuật toán sinh hoán vị và tổ hợp
Sinh các tổ hợp
- Xâu có độ dài n là khai triển nhị phân của một số nguyên nằm giữa 0 và 2n-1
- Suy ra có 2n xâu nhị phân có thể liệt kê theo thứ tự tăng dần của số nguyên bắt đầu là 00…00
- Để tìm xâu liền xâu, tìm vị trí đầu tiên của số 0 tính từ phải sang trái thay = 1 và những số bên phải thay = 0
Thuật toán sinh hoán vị và tổ hợpThuật toán sinh hoán vị và tổ hợp Thuật toán sinh hoán vị và tổ hợp
Thuật toán tạo các tổ hợp chập r từ n phần tử {1,2,…,n} - Liệt kê các tổ hợp theo thứ tự từ điển