SINH CÁC HOÁN VỊ VÀ TỔ HỢP

Một phần của tài liệu giáo trình toán rạc phần 1 (Trang 53 - 56)

5) Giả sử trong một nhóm 6 người mỗi cặp hai hoặc là bạn hoặc là thù. Chứng tỏ rằng trong nhóm có ba người là bạn lẫn nhau hoặc có ba người là kẻ

3.4. SINH CÁC HOÁN VỊ VÀ TỔ HỢP

Có nhiều thuật toán đã được phát triển để sinh ra n! hoán vị của tập

{1,2,...,n}. Ta sẽ mô tả một trong các phương pháp đó, phương pháp liệt kê các hoán vị của tập {1,2,...,n} theo thứ tự từ điển. Khi đó, hoán vị a1a2...an

C52 C47

C42 C37

C . C

. C

. C

C

n

C

được gọi là đi trước hoán vị b1b2...bn nếu tồn tại k (1  k  n), a1 = b1, a2 = b2,..., ak-1

= bk-1 và ak < bk.

Thuật toán sinh các hoán vị của tập {1,2,...,n} dựa trên thuật toán xây dựng hoán vị liền sau. Hoán vị nhỏ nhất là {1,2,..n} và hoán vị lớn nhất là {n, n-1,... 2,1}

theo thứ tự từ điển.

Thuật toán sinh hoán vị liền sau : Bước 1: hoán vị ban đầu {a1 a2 ...an};

Bước 2: đi từ phải sang trái tìm ai đầu tiên thỏa mãn điều kiện ai <ai+1. Nếu không tìm được thuật toán kết thúc ;

Bước 3: tìm aj nhỏ nhất trong đoạn từ i+1 đến n thỏa mãn điều kiện aj>ai ; Bước 4: đổi chỗ aj cho ai ;

Bước 5: đảo ngược đoạn từ i+1 đến n.

Ví dụ: Tìm hoán vị liền sau theo thứ tự từ điển của hoán vị 4736521. Cặp số nguyên đầu tiên tính từ phải qua trái có số trước nhỏ hơn số sau

là a3 = 3 và a4 = 6. Số nhỏ nhất trong các số bên phải của số 3 mà lại lớn hơn 3 là số 5.

Đặt số 5 vào vị trí thứ 3. Sau đó đặt các số 3, 6, 1, 2 theo thứ tự tăng dần vào bốn vị trí còn lại. Hoán vị liền sau hoán vị đã cho là 4751236.

Procedure Hoán vị liền sau (a1, a2, ..., an) ; Begin

i := n  1;

while (ai > ai+1) and (i>0) do i := i  1;

if (i=0) then exit; j := n;

while (ai > aj) do j := j -1;

tg:=ai ; ai:=aj; aj:=tg;

d := n; c := i + 1;

while (d<c) do begin

End;

end;

tg:=ad ; ad:=ac; ac:=tg;

d := d + 1 ; c := c-1;

3.4.2. Sinh các tổ hợp

Làm thế nào để tạo ra tất cả các tổ hợp chập k của một tập hữu hạn có n phần tử? (n>=k). Vì tổ hợp chính là một tập con, nên ta có thể dùng phép tương ứng 1-1 giữa các tập con của {a1,a2,...,an} và xâu nhị phân độ dài n.

Ta thấy một xâu nhị phân độ dài n cũng là khai triển nhị phân của một

số nguyên nằm giữa 0 và 2n  1. Khi đó 2n xâu nhị phân có thể liệt kê theo thứ tự tăng dần của số nguyên trong biểu diễn nhị phân của chúng. Chúng ta sẽ bắt đầu từ xâu nhị phân nhỏ nhất 00...00 (n số 0). Tại mỗi bước để tìm xâu liền sau của nó, kết thúc sẽ là xâu nhị phân lớn nhất 11…11 (n số 1)

Thuật toán tìm xâu nhị phân liền sau:

Bước 1: đi từ phải sang trái tìm phần tử 0 đầu tiên (giả sử tại vị trí i).

Nếu không tìm được thuật toán kết thúc;

Bước 2: thay giá trị tại vị trí i bằng 1; trong đoạn từ i+1 đến n thay các giá trị bằng 0.

Ví dụ: 01001111 xâu liền sau là 01010000

Ta thấy với độ dài n sẽ có 2n xâu nhị phân và đây cũng chính là số tập con của tập có n phần tử. Vận dụng thuật toán trên chúng ta có thể đưa ra tất cả các tập con của tập n phần tử, nếu coi tại vị trí thứ i bằng 1 thì phần tử ai sẽ xuất hiện trong tập con và ngược lại nếu vị trí thứ i bằng 0.

Thuật toán tìm tổ hợp chập k từ n phần tử:

Mỗi tổ hợp chập k của n phần tử có thể biểu diễn bằng một xâu tăng. Khi đó có thể liệt kê các tổ hợp theo thứ tự từ điển, bắt đầu từ tổ hợp nhỏ nhất

{1,2,…,k}. Ví dụ với n=4; k=3 ta có các tổ hợp chập 3 của 4 theo thứ tự từ điển sẽ là:

{1,2,3}; {1,2,4}; {1,3,4};{2,3,4}.

Ta dễ dàng nhận thấy giá trị cực đại của phần tử ai là (n  k + i). Từ đó thuật toán xây dựng tổ hợp liền sau tổ hợp a1a2...ak như sau:

Bước 1: hoán vị ban đầu {a1 a2 ...ak};

Bước 2: đi từ phải sang trái tìm ai đầu tiên thỏa mãn điều kiện chưa đạt giá trị cực đại. Nếu không tìm được thuật toán kết thúc;

Bước 3: tăng ai lên 1 đơn vị; trong đoạn j từ i+1 đến k tính lại giá trị aj thay aj = ai + ji+1. (các giá trị tương ứng liền kề của ai ).

Ví dụ: Tìm tổ hợp chập 4 từ tập {1, 2, 3, 4, 5, 6} đi liền sau tổ hợp {1, 2, 5, 6}.

Ta thấy từ phải qua trái a2 = 2 là số hạng đầu tiên của tổ hợp đã cho thỏa mãn điều kiện ai  6  4 + i. Để nhận được tổ hợp tiếp sau ta tăng ai lên một đơn vị, tức a2 = 3, sau đó đặt a3 = 3 + 1 = 4 và a4 = 3 + 2 = 5. Vậy tổ hợp liền sau tổ hợp đã cho là {1,3,4,5}.

Một phần của tài liệu giáo trình toán rạc phần 1 (Trang 53 - 56)

Tải bản đầy đủ (DOCX)

(63 trang)
w