Tải bản đầy đủ (.pdf) (78 trang)

Bài giảng toán rời rạc it04 Đại học mở hà nội

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.9 MB, 78 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>Bài 1. TẬP HỢP VÀ ÁNH XẠ </b>

<b>1.1. TẬP HỢP VÀ PHẦN TỬ </b>

Tập hợp và phần tử là những khái niệm toán học nguyên sơ, khơng thể định nghĩa mà ta chỉ có thể mơ tả chúng.

Có 2 cách mơ tả tập hợp:

<b>Cách thứ nhất: </b>

Tất cả những đối tượng có một hoặc một vài tính chất chung nào đó tạo thành một tập hợp (đơi khi nói ngắn gọn là một tập); khi đó mỗi đối tượng là một phần tử của tập hợp đó.

<i>Thí dụ 1. Tập hợp các số nguyên dương tạo nên tập N</i><small>+</small>.

N

<sup></sup>

{1, 2, 3, ..., n, ...}

. Khi đó các số 1, 2, 3, … là các phần tử của N<small>+</small>. Các phần tử của N<small>+</small> có 2 tính chất chung: đó là nguyên và dương.

<i>Thí dụ 2. </i>

A{1, 3, 5, 7, ...}

là tập hợp các số nguyên dương lẻ. Các phần tử của A có 3 tính chất chung là nguyên, dương và lẻ.

Nếu x là phần tử của A ta viết

xA

; nếu x không phải phần tử của A thì ta viết

xA

.

Khi mơ tả tập hợp theo cách này phải đạt được yêu cầu sau đây: Khi đưa ra một đối tượng bất kỳ thì các tính chất chung mà chúng ta nêu lên phải đủ để khẳng định đối tượng đó có phải là phần tử của tập hợp hay khơng.

Trong thí dụ 2: số

15A

; số

16A

vì 16 khơng có tính chất lẻ. Trong trường hợp yêu cầu trên không đạt được ta phải dùng cách khác.

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

<b>1.1.2. Tập rỗng. </b>

Nếu

| A |0

thì A gọi là tập rỗng, đó là tập không chứa một phần tử nào. Việc đưa vào tập rỗng rất có ý nghĩa khi ta nghiên cứu về các phép toán trên tập hợp.

Ta ký hiệu tập rỗng là

.

<b>1.1.3. Sự bằng nhau của hai tập. </b>

Hai tập A và B gọi là bằng nhau (ta viết

AB

) nếu chúng bao gồm những phần tử như nhau, nghĩa là:

x  AxB

<i>Thí dụ. </i>

A{x, 2, 5, 4}

B{5, x, 4, 2}

là hai tập bằng nhau. Thứ tự hay vị trí của các phần tử không quan trọng.

<b>1.1.4. Sự bao hàm và tập con. </b>

Nếu

x  AxB

thì ta nói:

 A bao hàm trong B hoặc A chứa trong B.

 B bao hàm A hay B chứa A.

 Tập rỗng

là tập con của mọi tập A.

Để hình dung quan hệ giữa hai tập người ta dùng sơ đồ Ven để biểu diễn hình học một tập, coi mỗi tập là một vịng phẳng kín, mỗi điểm bên trong là một phần tử của tập đó. Khi đó quan hệ

AB

được biểu thị bởi hình 1 – vịng A nằm trong vịng B.

<b>Hình 1</b>

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

<b>1.1.5. Tập vũ trụ. </b>

Tập vũ trụ ký hiệu là U, đó là tập bao hàm mọi tập khác; khi biểu diễn tập U bằng sơ đồ Ven, người ta dùng 1 hình vng hoặc hình chữ nhật. Khi đó mọi tập khác đều nằm trong hình vng hoặc hình chữ nhật đó (Hình 2).

<b>Hình 2</b>

<b>1.1.6. Tập lũy thừa. </b>

Cho tập A, tập lũy thừa của A ký hiệu là P(A) hay <small>A</small>

2

là tập mọi tập con của A (bao gồm cả tập rỗng và bản thân tập A).

<b>Hình 3</b>

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

Nếu

A  B

thì ta nói rằng A và B là hai tập rời nhau.

<i>Thí dụ: </i>

A{1, 3, 5, 7, 9}, B{2, 4, 6, 8}

là hai tập rời nhau vì

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

<b>Hình 6</b>

<b> Luật De Morgan: </b>

  

ta có: a) A B AB

A(BC)(AB)(AC)

<sup>Luật phân phối </sup>A B AB

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

<b>1.2.5. Phủ và phân hoạch. </b>

Cho

S{A , A , ..., A }

<sub>1</sub> <sub>2</sub> <sub>n</sub> trong đó A (i<sub>i</sub> 1, n) là các tập con của E. Nếu <small>n</small>

thì

S{A , A }

<sub>1</sub> <sub>2</sub> là một phân hoạch của E.

Khái niệm phân hoạch là cơ sở của “nguyên lý cộng” trong bài toán đếm mà ta sẽ nghiên cứu ở chương sau.

<i>Thí dụ 1. Trên tập số thực : </i>

aRb ab

là quan hệ 2 ngơi trên tập số thực.

<i>Thí dụ 2. </i>

E là tập các đường thẳng trên một mặt phẳng P nào đó.

aRba / / b

là quan hệ 2 ngơi.

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

<i>Thí dụ 3. </i>

E là tập các sinh viên trong 1 lớp học nào đó

aRb

”a cùng năm sinh với b” là một quan hệ 2 ngôi. Quan hệ 2 ngôi trên một tập E có thể có các tính chất sau đây:

<i>a) Tính phản xạ: </i>

Quan hệ R có tính chất phản xạ nếu

aRa aE

<i>Thí dụ: </i>

- Quan hệ “cùng năm sinh” có tính phản xạ

- Quan hệ “nhỏ hơn” (a < b) khơng có tính phản xạ vì khơng thể có a < a.

<i>b) Tính đối xứng: </i>

Quan hệ R có tính đối xứng nếu

aRbbRa

<i>Thí dụ. </i>

- Quan hệ “cùng năm sinh” có tính đối xứng

- Quan hệ “nhỏ hơn” (a < b) khơng có tính đối xứng vì từ a < b khơng thể suy ra b < a.

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

<b>1.3.2. Các phương pháp biểu diễn quan hệ 2 ngôi. </b>

<i><b>a) Phương pháp liệt kê. </b></i>

Theo định nghĩa thì mọi quan hệ 2 ngôi R trên tập E đều là tập con của tập tích Đề-các

EE

, nghĩa là ln viết được

R EE

. Do đó một trong những phương pháp biểu diễn R là liệt kê tất cả các phần tử của R trong

EE

.

<i>Thí dụ. Cho </i>

E{a , a , a }

<sub>1</sub> <sub>2</sub> <sub>3</sub> . Tìm trong E một quan hệ 2 ngơi có tính phản xạ, đối xứng nhưng không bắc cầu.

<b>1.3.3. Quan hệ tương đương. </b>

Quan hệ 2 ngôi trên tập E gọi là quan hệ tương đương nếu nó có 3 tính chất: phản xạ, đối xứng và bắc cầu. Dễ dàng thấy rằng:

- Quan hệ “cùng năm sinh” trên tập các sinh viên của một lớp là quan hệ tương đương.

- Quan hệ “song song” trên tập các đường thẳng trong một mặt phẳng nào đó là quan hệ tương đương.

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

- Quan hệ “a < b” trên tập số thực không phải là quan hệ tương đương. Nếu R là quan hệ tương đương thì aRb có thể viết là

ab

.

Các lớp tương đương này rời nhau và tạo nên một phủ của E; do đó nó là một phân hoạch của E.

Việc đưa vào tập E một quan hệ tương đương là một cách tìm một phân hoạch của E, nhờ đó ta có thể tìm số phần tử của E bằng cách tìm tổng số các phần tử của tất cả các lớp tương đương.

<b>1.3.4. Quan hệ thứ tự. </b>

Quan hệ 2 ngôi R trên tập E gọi là quan hệ thứ tự nếu nó có 3 tính chất: phản xạ, phản xứng và bắc cầu. Dễ dàng thấy rằng quan hệ (

ab

) hay (

ab

) là quan hệ thứ tự trên tập các số tự nhiên cũng như trên tập các số thực.

<i><b>a) Quan hệ thứ tự toàn phần. </b></i>

Cho R là một quan hệ thứ tự trên E, nếu

a, bE

ta đều có aRb hoặc bRa thì R gọi là quan hệ thứ tự tồn phần; khi đó mọi phần tử của E được sắp xếp theo một thứ tự xác định theo quan hệ R và E là một tập có thứ tự tồn phần.

<i><b>b) Quan hệ thứ tự khơng tồn phần. </b></i>

Nếu R là một quan hệ thứ tự trên E nhưng khơng phải là quan hệ thứ tự tồn phần thì ta nói R là quan hệ thứ tự khơng tồn phần.

<i>Thí dụ. </i>

- Quan hệ  trên tập số thực là quan hệ thứ tự tồn phần vì với mọi số thực a và b ta ln có

ab

hoặc

ba

, và dó đó tập các số thực là tập có thứ tự tồn phần.

- Quan hệ  trên tập các véc tơ n chiều (trong không gian véc tơ n chiều <small>n</small>

R

) là quan hệ thứ tự không tồn phần vì <small>n</small>

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

- Nếu

f (y)

<sup></sup><sup>1</sup>

 

thì

yf (A)

- Nếu

f (y)

<sup></sup><sup>1</sup>

x

thì x là phần tử duy nhất có ảnh là y.

<i><b>Định nghĩa 3. </b></i>

Cho f là một ánh xạ từ tập A vào tập B. a) f là toàn ánh nếu

f (A)B

b) f là đơn ánh nếu

x , x

<sub>1</sub> <sub>2</sub>

A

x

<sub>1</sub>

x

<sub>2</sub>

f (x )

<sub>1</sub>

f (x )

<sub>2</sub>

c) f là một song ánh nếu f vừa là toàn ánh vừa là đơn ánh.

<i><b>Chú ý. </b></i>

Nếu f là một song ánh từ A lên B thì ta viết

f : AB

. Khi đó

 yB,x

duy nhất

A

để cho

yf (x)

; như vậy sự tương ứng

yx

là một ánh xạ từ B vào A mà ta ký hiệu <small>1</small>

<i>Thí dụ. Ký hiệu R là tập số thực; </i>

R

<sup></sup> là tập số thực không âm.

a)

f : RR

cho bởi

yx

<sup>2</sup> là một ánh xạ nhưng khơng phải là tồn ánh vì các số âm khơng là ảnh của bất kỳ số x nào qua ánh xạ <small>2</small>

yx

; cũng khơng phải là đơn ánh vì hai số x và

x

(với

x0

) có chung một ảnh.

b)

f : RR

<sup></sup> cho bởi

yx

<sup>2</sup> là tồn ánh nhưng khơng phải là đơn ánh. c)

f : R

<sup></sup>

R

<sup></sup> cho bởi

ye

<sup>x</sup> là đơn ánh nhưng khơng phải là tồn ánh vì các số

1

khơng là ảnh của bất kỳ số

x0

qua ánh xạ

ye

<sup>x</sup>.

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

d)

f : RR

cho bởi

yaxb (a0)

là song ánh (vừa là toàn ánh, vừa là đơn ánh). Ánh xạ ngược của nó là:

 yB, zC

sao cho

g(y)z

Do đó

 xA, zC

(qua ánh xạ trung gian f) sao cho

g f (x)z

Vậy có một ánh xạ từ A tới C xác định như sau:

xR yf (x) xRyR zg(y)  y3R

Khi đó ánh xạ hợp:

g f : RR

xác định như sau:

Cho ánh xạ

f : AB

A , A

<sub>1</sub> <sub>2</sub> là 2 tập con bất kỳ của A;

B , B

<sub>1</sub> <sub>2</sub> là 2 tập con bất kỳ của B. Khi đó:

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

<b>Bài 2.BÀI TOÁN ĐẾM </b>

<b>2.1. PHÁT BIỂU BÀI TOÁN </b>

Dạng tổng quát nhất của bài tốn đếm có thể phát biểu ngắn gọn như sau: Cho một tập rời rạc A; tìm bản số |A| của tập A, tức là hãy đếm xem A có bao nhiêu phần tử.

Khi đếm các phần tử của A phải đảm bảo nghiêm ngặt 2 nguyên tắc: Một là: Khơng bỏ sót, nghĩa là phần tử nào cũng được đếm.

Hai là: Không trùng lặp, nghĩa là khơng có phần tử nào được đếm q một lần.

Phương pháp tổng quát để giải bài toán đếm có thể diễn giải như sau: Giả sử A là tập cần đếm,

N{1, 2, 3, ..., n}

là tập n số nguyên dương đầu tiên. Nếu lập được sự tương ứng đơn trị hai chiều giữa các phần tử của A và các phần tử của N; nghĩa là tìm được một song ánh f

f : AN

thì

| A |n

<b> Tuy nhiên có rất nhiều cách cho tập A khác nhau nên phương pháp nêu trên </b>

chỉ có ý nghĩa như một định hướng tổng quát, cịn trên thực tế thì người ta phải căn cứ vào hình thái cụ thể của tập A mà tìm ra một giải pháp thích hợp.

Mỗi phương pháp đếm là một thuật toán, nên trước tiên ta tìm hiểu những khái niệm cơ bản về thuật tốn.

<b>2.2. KHÁI NIỆM THUẬT TỐN 2.2.1. Định nghĩa. </b>

Thuật tốn giải một bài tốn nào đó, có thể hiểu một cách trực quan là một dãy hữu hạn các bước chỉ rõ những thao tác toán học phải thực hiện trên các đối tượng để thu được lời giải của bài tốn.

Thuật tốn có các đặc trưng sau:

<i>a) Tính hữu hạn b) Tính chính xác. c) Tính đơn trị. d) Tính phổ dụng. e) Tính tối ưu. </i>

<b>2.2.2. Biểu diễn thuật tốn. </b>

Có 3 cách biểu diễn thuật tốn, mỗi cách đều có ưu nhược điểm nhất định nên tùy theo từng trường hợp ta lựa chọn sao cho thích hợp.

<i>a) Biểu diễn bằng ngôn ngữ tự nhiên, liệt kê các bước của thuật toán. </i>

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

<i>b) Biểu diễn bằng sơ đồ khối. </i>

Phương pháp này sử dụng các biểu trưng hình học quy ước để diễn đạt các bước và thao tác cần thực hiện trong thuật toán. Ta quy ước có các khối sau:

Nút khởi đầu hoặc kết thúc

Nút thao tác, ghi câu lệnh cần thực hiện

Nút điều kiện, ghi rõ điều kiện cần kiểm tra trong q trình tính tốn

Cung, dùng để chỉ đường đi của thuật toán

<i>c) Biểu diễn bằng ngơn ngữ lập trình. </i>

Để giải một bài tốn bằng máy tính, người ta thường sử dụng một loại ngơn ngữ lập trình nào đó: Đó là một dãy hữu hạn các câu lệnh được viết theo một quy tắc nhất định trên ngơn ngữ lập trình mà ta sử dụng.

<b>2.2.3. Phương pháp quy nạp. </b>

Quy nạp toán học là một phương pháp hữu hiệu để chứng minh một mệnh đề toán học đúng với mọi số tự nhiên n. Để thực hiện điều đó ta phải tiến hành các bước sau:

Bước 1: Chứng minh mệnh đề đúng với

n1

.

Bước 2: Giả sử mệnh đề đã đúng với n, ta chứng minh mệnh đề đúng với

. Vậy công thức đúng với

n1

Bước 2: Giả sử công thức trên đúng với n, tức là ta có

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

Như vậy đệ quy là một phương pháp xác định các đối tượng thỏa mãn một tính chất nào đó; nó bao gồm các quy tắc, trong đó một số quy tắc để xác định các đối tượng ban đầu và quy tắc còn lại dùng để xác định các đối tượng tiếp theo nhờ các đối tượng ban đầu đã được xác định.

<i><b>Định nghĩa. Chỉnh hợp chập k của n phần tử là một nhóm gồm k phần tử lấy </b></i>

trong n phần tử đã cho và sắp xếp theo một thứ tự nhất định. Ở đây mỗi phần tử chỉ được lấy một lần (khơng lặp).

<i>Thí dụ. </i>

Cho

X{0, 1, 2, 3, 4, 5}

gồm 6 phần tử.

Các nhóm dưới đây 123, 213, 402, 305, … đều là các chỉnh hợp chập 3 của 6 phần tử. Hai chỉnh hợp 123 và 213 có các phần tử như nhau nhưng khác nhau về thứ tự.

Như vậy hai chỉnh hợp là khác nhau nếu chúng có ít nhất một phần tử khác nhau hoặc thứ tự các phần tử khác nhau. Để xây dựng một chỉnh hợp ta xây dựng

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

dần từ thành phần đầu tiên. Thành phần đầu tiên có n cách chọn, thành phần thứ hai chỉ có

(n1)

khả năng chọn, …, thành phần thứ k chỉ có

(n k1)

khả năng chọn.

Nếu ký hiệu số chỉnh hợp chập k của n phần tử là <small>kn</small>

<i><b>Định nghĩa. Tổ hợp chập k của n phần tử là một nhóm gồm k phần tử lấy </b></i>

trong n phần tử đã cho (không kể thứ tự). Nếu ký hiệu <small>k</small>

C

là số tổ hợp chập k của n phần tử thì dễ dàng thấy rằng:

C

là số ngun thì ta có nhận xét thú vị sau đây: Tích của k số tự nhiên liên tiếp nhau ln chia hết cho tích của k số tự nhiên đầu tiên (k!).

<i>Thí dụ 1. </i>

Có 10 người thi đấu bóng bàn vịng trịn, hỏi có bao nhiêu trận đấu? Cứ 2 người tạo nên 1 trận đấu, mỗi trận đấu là một tổ hợp chập 2 của 10. Vậy số trận đấu là:



trận

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

Các số tổ hợp <small>kn</small>

C

rất hay gặp trong toán rời rạc, ta thường gọi là hệ số tổ hợp. Dưới đây là một số công thức đáng nhớ:

<sup>k</sup><sub>n</sub>

n!C

<sup> (4) </sup>

C

<sup>k</sup><sub>n</sub>

C

<sup>n k</sup><sub>n</sub><sup></sup> (5)

C

<sup>k</sup><sub>n</sub>

C

<sup>k 1</sup><sub>n 1</sub><sup></sup><sub></sub>

C

<sup>k</sup><sub>n 1</sub><sub></sub>

;(n k0)

(6) Để có thể áp dụng cơng thức (4) và (5) cho mọi

kn

ta quy ước:

Cho

y1

ta có cơng thức:

<small>nk 0</small>

 

(7) Từ hệ thức này ta suy ra một số cơng thức sau đây:

- Cho

x1

thì sẽ có:

C

<sup>0</sup><sub>n</sub>

C

<sup>1</sup><sub>n</sub>

C

<sup>2</sup><sub>n</sub>

 ...C

<sup>n</sup><sub>n</sub>

2

<sup>n</sup> (8) - Cho

x 1

thì sẽ có:

C

<sup>0</sup><sub>n</sub>

C

<sup>1</sup><sub>n</sub>

C

<sup>2</sup><sub>n</sub>

C ...

<sup>3</sup><sub>n</sub>

 ( 1) C

<sup>n</sup> <sup>n</sup><sub>n</sub>

0

Từ đó suy ra

C

<sup>0</sup><sub>n</sub>

C

<sup>2</sup><sub>n</sub>

...C

<sup>1</sup><sub>n</sub>

C

<sup>3</sup><sub>n</sub>

...2

<sup>n</sup><sup></sup><sup>1</sup> (9) - Đạo hàm theo x hai vế của (7) rồi thay

x1

sẽ có:

C2C ...nCn2

<sup></sup> (10)

<b>2.4. CÁC PHÉP TOÁN TỔ HỢP CÓ LẶP 2.4.1. Chỉnh hợp lặp. </b>

<i><b>Định nghĩa. Chỉnh hợp lặp chập k của n phần tử là một nhóm gồm k phần tử </b></i>

lấy trong n phần tử đã cho và sắp xếp theo một thứ tự nhất định; các phần tử có thể lấy lặp.

<i>Thí dụ 1. Với </i>

X{0, 1, 2, 3, 4, 5}

các chỉnh hợp lặp chập 3 có thể là 123, 213, 211, 111, …

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

Nếu ký hiệu <small>kn</small>

L

là số chỉnh hợp lặp chập k của n phần tử thì dễ dàng thấy rằng mỗi thành phần của nó đều có n cách lựa chọn nên ta có cơng thức:

L

<sup>k</sup><sub>n</sub>

n

<sup>k</sup> (11) Chú ý rằng trong chỉnh hợp lặp số k không bị giới hạn bởi điều kiện

kn

mà trái lại k có thể lấy giá trị lớn hơn n. Chẳng hạn như với 3 chữ số 1, 2, 3 ta vẫn có thể lập được các con số hàng triệu gồm 7 chữ số:

Ta hãy xét 2 nhóm gồm 5 chữ cái: THANG và NHANH

Nếu ta hoán vị 5 chữ cái trong nhóm THANG thì sẽ được

P

<sub>5</sub>

 5! 120

hoán vị khác nhau. Nhưng khi hoán vị các chữ cái trong nhóm NHANH thì sẽ khơng được 120 hốn vị khác nhau; vì khi ta đổi vị trí 2 chữ N với nhau hoặc 2 chữ H với nhau thì sẽ khơng tạo ra một hoán vị mới.

Trong các hoán vị này, chữ N lặp 2 lần, chữ H lặp 2 lần, ta gọi đó là các hốn vị lặp. Số hốn vị lặp trong trường hợp này dễ dàng tính được là:

120302.2

Bây giờ ta xét trường hợp tổng quát:

Cho k phần tử khác nhau; ta ký hiệu P(n , n , ..., n )<sub>1</sub> <sub>2</sub> <sub>k</sub> là số hoán vị của k phần tử trên, trong đó phần tử thứ nhất lặp

n

<sub>1</sub> lần, phần tử thứ hai lặp

n

<sub>2</sub> lần, …, phần tử thứ k lặp

n

<sub>k</sub> lần.

Ta dễ dàng chứng minh được công thức sau đây:

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

Giả thiết

n

<sub>i</sub>

n

<sub>j</sub>

 ij

là để cho các nhóm được tạo thành khơng có sự trùng lặp. Nếu n<sub>1</sub> n<sub>2</sub>  ... n (i<sub>i</sub>  k) tức là có i nhóm có số phần tử bằng nhau thì cơng thức tính sẽ là:

P(n , n , ..., n )C (n , n , ..., n , n, ..., n )

Chú ý rằng nếu lấy ra 2 đối tượng từ 4 đối tượng thì có <small>24</small>

C6

cách, nhưng chia thành 2 nhóm, mỗi nhóm 2 đối tượng thì lại chỉ có:

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

<b>2.4.3. Tổ hợp lặp. </b>

<i><b>Định nghĩa. Tổ hợp lặp chập k của n phần tử là một nhóm gồm k phần tử lấy </b></i>

(có thể lặp) trong n phần tử đã cho. Giống như trong chỉnh hợp lặp, số k có thể lớn hơn n.

Ta ký hiệu số tổ hợp lặp chập k của n phần tử là <small>kn</small>

R

Ta có

R

<sup>k</sup><sub>n</sub>

C

<sup>k</sup><sub>n</sub><sub> </sub><sub>k</sub> <sub>1</sub>

<i>Thí dụ 1. </i>

Hai quả cam, ba quả quýt, bốn quả chanh có thể coi như tổ hợp lặp chập 9 của 3 phần tử ; trong đó cam lặp 2 lần, quýt lặp 3 lần, chanh lặp 4 lần.

<i>Thí dụ 2. </i>

Có bao nhiêu cách chia 10 chiếc kẹo cho 5 em bé?

Mỗi cách chia là một tổ hợp lặp chập 10 của 5 phần tử, vậy số cách chia là:

</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">

<b>Bài 3. CÁC NGUYÊN LÝ ĐẾM </b>

Mỗi bài tốn đếm có một cấu trúc khác nhau nên chúng ta cần phải lựa chọn phương pháp đếm phù hợp với cấu trúc của bài tốn đó. Một số phương pháp đếm có tính chất tổng qt cho một lớp bài toán, ta gọi nó là nguyên lý đếm. Dưới đây là các nguyên lý quan trọng.

<b>3.1. Nguyên lý cộng </b>

Nếu

A , A , ..., A

<sub>1</sub> <sub>2</sub> <sub>n</sub> là một phân hoạch của A, nghĩa là

AA A  ... A và

A

<sub>i</sub>

A

<sub>j</sub>

   ,ij

thì <small>n</small>

<small>jj 1</small>

X{x , x , ..., x }; AP(X) là tập lũy thừa của X. Tìm |A|.

Ta biết rằng P(X) là tập mọi tập con có thể có của X kể cả tập rỗng

và bản thân tập X. Ta ký hiệu

A

<sub>k</sub> là tập mọi tập con gồm k phần tử của X;

</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21">

<i>Thí dụ 2. </i>

Có bao nhiêu xâu nhị phân có độ dài 10?

Ký hiệu

E{0, 1}

; A là tập các xâu nhị phân có độ dài 10 thì <small>10</small>

Số nhóm chỉ có nam là <small>68</small>

C

Số nhóm chỉ có nữ là <small>6</small>

- Với

n3

thì

AA

<sub>1</sub>

A

<sub>2</sub>

A

<sub>3</sub>; cơng thức đếm sẽ là:

</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">

<sub>3</sub> <sub>i</sub> <sub>j</sub> <sub>k</sub><small>ij k</small>

Theo nguyên lý bù trừ ta có: N N<sub>1</sub> N<sub>2</sub>  N<sub>3</sub> nên

N(303132)(151617) 550

sinh viên.

<i>Thí dụ 2. </i>

Có bao nhiêu số nguyên dương,

1000

chia hết cho 2, 3 hoặc 5.

Ký hiệu A , A , A<sub>2</sub> <sub>3</sub> <sub>5</sub> là tập các số tương ứng chia hết cho 2, 3, 5 và

AA A A . Theo nguyên lý bù trừ:

</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23">

C

là số cách chọn k bức thư để bỏ đúng địa chỉ, còn

(nk)

bức thư còn lại ta bỏ một cách tùy ý, nghĩa là có

(nk)!

cách. Trong

(nk)!

cách bỏ thư này vẫn có những thư đúng địa chỉ nên <small>k</small>

</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="24">

<b>3.5. Nguyên lý quy về đơn giản </b>

Một trong các phương pháp đếm là quy một bài toán phức tạp thành các bài tốn đơn giản hơn. Điều này khơng phải lúc nào cũng dễ dàng vì nó thường địi hỏi những hiểu biết sâu sắc và sự phân tích khéo léo các cấu hình phức tạp cần đếm. Nguyên lý này có ý nghĩa như một định hướng tổng qt, cịn cách thức cụ thể thì lại phụ thuộc vào cấu trúc của bài toán.

Dưới đây ta xét một thí dụ khác để thấy tính đa dạng của nguyên lý này: “Một người vượt cầu thang có 9 bậc theo cách lúc thì bước 1 bậc, lúc thì bước 2 bậc, lúc thì bước 3 bậc một bước. Hỏi có bao nhiêu cách vượt 9 bậc cầu thang như thế? ”

</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25">

Trong bốn bước này ta chọn một bước nào đó cho 1 bậc, có <small>14</small>

C4

cách. Sau khi chọn bước này, còn lại 3 bước, ta chọn một bước cho 3 bậc: đó là <small>1</small>

  

cách.

<b>3.6. Nguyên lý truy hồi </b>

Khi tính số các cấu hình tổ hợp được tạo lập từ n phần tử, thì số cấu hình tổ hợp này phụ thuộc vào n; ta ký hiệu là

T

<sub>n</sub>. Trong nhiều trường hợp rất khó tìm trực tiếp cơng thức của

T

<sub>n</sub>, nhưng nhiều khi lại có thể tìm được mối liên hệ giữa

T

T

<sub>n 1</sub><sub></sub> hoặc với

T , (k

<sub>k</sub>

 n1)

. Nhờ công thức này cùng với các giá trị ban đầu

T , T

<sub>1</sub> <sub>2</sub> mà ta dễ dàng tìm được

T

<sub>n</sub> với bất kỳ giá trị nào của n. Công thức đó gọi là cơng thức truy hồi.

Do tính kế thừa, công thức truy hồi rất có tác dụng trong việc lập chương trình cho máy tính, đơn giản hóa đáng kể q trình tính tốn.

Nếu cơng thức truy hồi có dạng

T

<sub>n</sub>

f (T

<sub>n 1</sub><sub></sub>

)

(hoặc

T

<sub>n</sub>

f (T

<sub>n 1</sub><sub></sub>

, T

<sub>n 2</sub><sub></sub>

)

) thì ta gọi đó là phương trình truy hồi cấp 1 (hoặc cấp 2). Nếu biết

T

<sub>1</sub> (hoặc

T

<sub>1</sub> và

<i>Cho n đường thẳng có vị trí tổng qt trong mặt phẳng, nghĩa là khơng có 2 </i>

đường thẳng nào song song và cũng khơng có 3 đường thẳng nào đồng quy. Tìm số phần mặt phẳng

T

<sub>n</sub> được tạo thành từ n đường thẳng đó.

</div><span class="text_page_counter">Trang 26</span><div class="page_container" data-page="26">

Ta vẽ

(n1)

đường thẳng có vị trí tổng qt, số phần mặt phẳng là

T

<sub>n 1</sub><sub></sub> . Vẽ thêm đường thẳng thứ n, cắt

(n1)

đường thẳng đã cho tại

(n1)

giao điểm khác nhau; các giao điểm này chia đường thẳng vẽ thêm thành n phần.

Mỗi phần đường thẳng nằm trong 1 phần mặt phẳng tạo nên bởi

(n1)

đường thẳng ban đầu và chia đơi phần mặt phẳng đó, nghĩa là tạo thêm n phần mặt phẳng nữa.

 

<i>Thí dụ 2. Bài toán họ nhà thỏ của Fibonacci (nhà toán học Ý 1170-1226). </i>

Thả một cặp thỏ mới sinh (1 con đực, 1 con cái) lên một đảo hoang. Giả sử khi được 2 tháng tuổi, chúng bắt đầu sinh sản, mỗi tháng một lứa, mỗi lứa sinh ra 1 cặp thỏ con. Các cặp thỏ con cũng sinh trưởng và sinh sản theo quy tắc trên. Tìm số cặp thỏ trên đảo sau n tháng, biết rằng trong thời gian nghiên cứu khơng có cặp thỏ nào bị chết bệnh hoặc bị săn bắt.

<i>Giải: </i>

</div><span class="text_page_counter">Trang 27</span><div class="page_container" data-page="27">

Ký hiệu

T

<sub>n</sub> là số cặp thỏ có ở tháng thứ n; số cặp thỏ này bằng số cặp thỏ có ở tháng thứ

(n1)

T

<sub>n 1</sub><sub></sub> cộng với số cặp thỏ mới sinh ra là

T

<sub>n 2</sub><sub></sub> <i>. </i>

Nhưng nếu coi một sinh vật có đời sống “đủ dài” (ngoài tầm nghiên cứu của <small>n</small>

T

) là “bất tử” thì dãy số Fibonacci lại liên quan đến nhiều vấn đề lý thú khơng chỉ trong tốn học mà trong cả sinh học, kiến trúc, nghệ thuật và cũng đã từng là chìa khóa giải mã cho những vấn đề huyền bí trong những câu chuyện rất hấp dẫn.

Quy luật của dãy số Fibonacci là một số hạng bất kỳ bằng tổng của hai số hạng đứng liền trước nó.

<i>Giải phương trình truy hồi Fibonacci: </i>

</div><span class="text_page_counter">Trang 29</span><div class="page_container" data-page="29">

<b>Bài 4.BÀI TOÁN LIỆT KÊ VÀ BÀI TOÁN TỒN TẠI </b>

<b>1.1. PHÁT BIỂU BÀI TOÁN LIỆT KÊ </b>

Cho tập

A{a , a , ..., a }

<sub>1</sub> <sub>2</sub> <sub>n</sub> . Từ các phần tử của A, ta tạo ra các cấu hình tổ hợp theo một quy tắc nào đó và gọi B là tập tất cả các cấu hình tổ hợp đó. Bài tốn đặt ra là hãy liệt kê tất cả các cấu hình tổ hợp của B. Khác với bài tốn đếm là tìm số phần tử của B, trong bài toán này, ta phải lập một danh sách cấu hình chỉ rõ từng phần tử của B. Rõ ràng là có nhiều cách liệt kê khác nhau, tuy nhiên chúng phải bảo đảm 2 nguyên tắc sau đây:

Một là: Khơng bỏ sót, nghĩa là phần tử nào cũng phải được liệt kê.

Hai là: Khơng trùng lặp, nghĩa là khơng có phần tử nào được liệt kê quá một lần.

Khó khăn của việc giải bài toán liệt kê là sự “bùng nổ tổ hợp” nghĩa là khi số phần tử cần liệt kê là một số lớn. Thí dụ, tập B có 1 triệu phần tử, đây không phải là con số lớn đối với các bài toán tổ hợp, và giả sử cứ 1 giây thì máy tính có thể liệt kê được 1 phần tử thì ta phải làm việc trên máy tính trong 35 ngày, mỗi ngày 8 giờ.

Tuy nhiên, nếu số cấu hình tổ hợp khơng lớn thì cùng với máy tính, phương pháp liệt kê lại có thể giải được một số bài tốn khó mà cho đến nay người ta cũng chưa tìm được phương pháp tổng quát để đếm các phần tử của B.

Thí dụ như có bao nhiêu cách xếp 8 quân hậu lên 1 bàn cờ vua sao cho chúng từng đôi một không khống chế lẫn nhau (nghĩa là 2 quân hậu bất kỳ không được đứng chung 1 hàng, 1 cột hay 1 đường chéo). Hoặc có bao nhiêu cách phủ kín một bàn cờ vua bằng 32 quân đôminô.

<b>4.2. THUẬT TỐN SINH </b>

Thuật tốn sinh là một thuật tốn có thể áp dụng để giải các bài toán liệt kê các tổ hợp, thuật toán này dựa trên 2 giả thiết sau đây:

- Có thể xác định được một thứ tự tồn bộ trên tập các cấu hình tổ hợp cần liệt kê, từ đó xác định được cấu hình tổ hợp đầu tiên và cấu hình tổ hợp cuối cùng trong thứ tự đã xác định đó.

- Đưa ra được một thuật toán để từ một cấu hình hiện có, tìm được cấu hình tiếp theo, nếu khơng tìm được cấu hình tiếp theo thì phải khẳng định được (chứng minh được) cấu hình hiện có là cấu hình cuối cùng (nghĩa là khơng cịn một cấu hình nào khác ngồi các cấu hình đã liệt kê.)

<i>Thí dụ. Liệt kê tất cả các dãy nhị phân có độ dài n. </i>

Ta xếp các dãy này theo thứ tự tự nhiên, tức là theo thứ tự của số mà nó biểu diễn, nghĩa là dãy đầu tiên gồm n số 0 và dãy cuối cùng gồm n số 1.

Như vậy dãy nhị phân được liệt kê theo thứ tự sau:

</div><span class="text_page_counter">Trang 30</span><div class="page_container" data-page="30">

Thuật tốn sinh có những hạn chế sau:

- Trong nhiều bài tốn việc tìm cấu hình ban đầu thường khơng phải là đơn giản, thậm chí ngay cả sự tồn tại một cấu hình như thế nhiều khi vẫn còn là điều nghi vấn.

- Mặt khác việc sắp xếp thứ tự các cấu hình nhiều khi rất phức tạp, do đó khơng phải một cấu hình kế tiếp nào cũng được sinh ra từ một cấu hình hiện có một cách đơn giản.

Hãy xét thí dụ: Liệt kê tất cả các cách điền các chữ số nguyên dương (từ 1 đến 9) vào 9 ơ vng nhỏ trong một hình vng lớn sao cho tổng các chữ số trên mỗi hàng, mỗi cột và mỗi đường chéo đều bằng nhau.

Việc đưa ra một cấu hình đầu tiên tuy khơng đơn giản nhưng khơng đến nỗi q khó, chẳng hạn có thể đưa ra một cấu hình như dưới đây:

2 9 4 7 5 3 6 1 8

Việc sinh ra một cấu hình tiếp theo từ cấu hình này rất đơn giản và có nhiều cách, chẳng hạn như: hoán vị 2 hàng biên hoặc 2 cột biên, chuyển vị qua đường chéo chính hoặc phụ, quay hình vng 90<small>0</small> theo chiều kim đồng hồ hoặc ngược chiều kim đồng hồ, …. Nhưng khó khăn lại ở chỗ ta không biết sắp xếp các cấu hình này theo thứ tự nào để biết được đâu là cấu hình cuối cùng, nghĩa là ta chưa chỉ ra được thủ tục để kết thúc thuật toán.

Qua thí dụ trên ta thấy rằng thuật tốn sinh có những hạn chế nên tính phổ dụng khơng cao. Dưới đây ta xét một thuật tốn có tính phổ dụng cao hơn.

<b>4.3. THUẬT TOÁN QUAY LUI </b>

Ý tưởng cơ bản của thuật toán này là để xây dựng 1 cấu hình gồm n thành phần, người ta xây dựng dần các thành phần của cấu hình bằng cách thử lại tất cả các khả năng. Giả sử cấu hình cần xây dựng có n thành phần là a a ... a<sub>1 2</sub> <sub>n</sub>. Giả thiết ở bước k ta đã xây dựng được

(k1)

thành phần

a a ... a

<sub>1 2</sub> <sub>k 1</sub><sub></sub> và bây giờ xác định thành phần

a

<sub>k</sub>. Ta duyệt tất cả các khả năng có thể đề cử cho

a

<sub>k</sub> và

</div><span class="text_page_counter">Trang 31</span><div class="page_container" data-page="31">

đánh số các khả năng ấy là i 1, 2, ..., n<sub>k</sub>. Với mỗi khả năng i{1, 2, ..., n }<sub>k</sub> ta kiểm tra xem i có chấp nhận được khơng.

Điểm mấu chốt của thuật tốn này bao gồm 2 điểm chính sau đây:

Một là: Đưa ra một danh sách mọi khả năng đề cử cho i, nghĩa là khơng được bỏ sót một khả năng nào.

Hai là: Phải ghi nhớ tại mỗi bước đã đi qua, những khả năng nào đã được thử để tránh trùng lặp. Rõ ràng những thông tin này phải được lưu trữ theo cơ cấu “ngăn xếp” (stack: vào sau, ra trước).

Hai yêu cầu: không bỏ sót và khơng trùng lặp luôn luôn là những địi hỏi nghiêm khắc đối với bài tốn đếm cũng như bài toán liệt kê.

<b> Hình 3.1 Hình 3.2 Hình 3.3 </b>

</div><span class="text_page_counter">Trang 32</span><div class="page_container" data-page="32">

Trên hình 3.3, cột C chỉ cịn 1 ơ trống là C<sub>2</sub> để xếp hậu, khi đó ô

D , D

<sub>2</sub> <sub>3</sub> đều bị khống chế, nên khơng cịn ơ trống nào để xếp hậu trên cột D. Vậy việc chọn

B cũng không thể chấp nhận.

Do đó việc xếp hậu tại

A

<sub>1</sub> khơng thể chấp nhận.

Do tính chất đối xứng của hình vuông nên việc xếp hậu tại

A

<sub>4</sub> cũng bị loại trừ.

Vậy chỉ còn lại 2 khả năng là xếp hậu tại

A

<sub>2</sub> hoặc A<sub>3</sub>. - Xếp hậu tại

A

<sub>2</sub>. Xem hình 3.4.

Vậy ta có được 1 cấu hình (hình 3.7).

Tương tự nếu chọn A<sub>3</sub> cho quân hậu đầu tiên thì ta có 1 cấu hình nữa (hình 3.8).

</div><span class="text_page_counter">Trang 33</span><div class="page_container" data-page="33">

<b> Hình 3.9. Cây tìm kiếm lời giải theo thuật toán quay lui </b>

Trên hàng thứ nhất là 4 khả năng lựa chọn vị trí cho quân hậu ở cột A.

Trên hàng thứ hai là các khả năng lựa chọn vị trí cho quân hậu ở cột B sau khi vị trí của quân hậu ở cột A đã được lựa chọn (hàng 2 có 6 khả năng)

Trên hàng thứ 3 là các khả năng lựa chọn vị trí cho quân hậu ở cột C sau khi vị trí của các quân hậu ở cột A và cột B đã được chọn. Hàng 3 chỉ có 4 khả năng, nghĩa là có 2 trường hợp khơng lựa chọn được vị trí cho quân hậu ở cột C.

Trên hàng cuối cùng là các vị trí cho quân hậu ở cột D sau khi vị trí của các quân hậu ở các cột A, B, C đã lựa chọn. Chỉ có 2 trường hợp, tương ứng với 2 cách xếp 4 quân hậu thỏa mãn điều kiện của bài tốn đề ra.

Người ta cịn có thể sử dụng “cây tìm kiếm lời giải” để liệt kê các dãy nhị phân, liệt kê các hoán vị và các tổ hợp. Dưới đây ta xét một thí dụ để giải một bài tốn khác.

<i>Thí dụ 2. Hãy liệt kê tất cả các con số hàng trăm gồm các chữ số khác nhau </i>

được chọn từ tập A = {1, 3, 5, 7, 9} và tạo thành các dãy tăng (số hàng trăm < số hàng chục < số hàng đơn vị).

Ta có cây tìm kiếm lời giải dưới đây:

<small>9</small>

</div><span class="text_page_counter">Trang 34</span><div class="page_container" data-page="34">

Dễ dàng kiểm tra lại để thấy rằng số các con số này đúng bằng số tổ hợp <small>3</small>

C10

.

<b>4.4. PHÁT BIỂU BÀI TOÁN TỒN TẠI </b>

Trong các bài toán đếm và bài toán liệt kê, người ta tập trung sự chú ý vào việc đếm hoặc liệt kê các cấu hình tổ hợp thỏa mãn một số tính chất nào đó và thừa nhận sự tồn tại của các cấu hình tổ hợp đó là hiển nhiên. Tuy nhiên có rất nhiều bài toán, việc chỉ ra sự tồn tại của một cấu hình thỏa mãn những tính chất cho trước là rất khó khăn. Chẳng hạn, một kỳ thủ trước một tình huống cụ thể của một ván cờ, cần suy nghĩ xem liệu có một dãy các nước đi để chắc chắn thắng được đối phương hay không. Nhiều khi ta khơng tìm được lời giải nhưng cũng khơng khẳng định được là khơng có lời giải. Như vậy nội dung của bài toán tồn tại khác hẳn với các bài toán đếm và liệt kê. Vấn đề đặt ra ở đây là: có hay khơng một cấu hình tổ hợp thỏa mãn một số tính chất cho trước? Điều này kéo theo sự khác nhau cả về phương pháp tư duy và thuật toán. Bài toán tồn tại xem như được giải quyết nếu ta tìm được một cấu hình hoặc chứng minh được sự tồn tại của cấu hình. Nhiều khi ta khơng tìm được một cách cụ thể cấu hình đó; mà chỉ nêu ra được một cách xây dựng cấu hình, hoặc là chứng minh được rằng cấu hình cần tìm là khơng có thì bài tốn cũng coi như được giải quyết. Để thấy rõ nội dung đa dạng và tính chất phức tạp của bài toán tồn tại, dưới đây ta hãy xét một số bài toán cổ điển nổi tiếng.

<b>4.4.1. Bài tốn đội hình duyệt binh của 36 sĩ quan. </b>

Có 6 đơn vị quân đội A, B, C, D, E, F; mỗi đơn vị cử 6 sĩ quan với 6 cấp bậc khác nhau: a, b, c, d, e, f. Hỏi rằng có thể xếp 36 sĩ quan thành một đội ngũ hình vng (6 hàng ngang, 6 hàng dọc) sao cho mỗi hàng ngang và mỗi hàng dọc đều có người của tất cả các đơn vị và tất cả các cấp bậc sĩ quan.

Bài tốn có thể mở rộng cho n đơn vị quân đội với n cấp bậc sĩ quan khác nhau.

Với

n4

ta có một lời giải như sau:

Ab Ba Cc Dd Bc Ad Db Ca Cd Dc Aa Bb Da Cb Bd Ac

</div><span class="text_page_counter">Trang 35</span><div class="page_container" data-page="35">

Một lời giải cho trường hợp

n5

là:

Aa Bb Cc Dd Ee Bc Ca Db Ec Ad Cd De Ea Ab Bc Dc Ed Ae Ba Cb Eb Ac Bd Ce Da

Bài toán này do Euler đề xuất và ơng mất khá nhiều thời gian cho bài tốn

n6

mà không đạt kết quả nên ông đưa ra một giả thuyết là bài tốn này khơng có lời giải, ngồi ra bài tốn

n2

cũng khơng có lời giải nên Euler nêu lên một giả thuyết tổng quát là bài tốn với

n4k2

thì khơng có lời giải. Giả thuyết này của Euler tồn tại suốt gần hai thế kỷ.

Mãi đến năm 1901, Tarri - một nhà toán học Pháp - đã chứng minh được rằng với

n6

bài tốn khơng có lời giải bằng cách duyệt tất cả các khả năng xếp, và đến năm 1960, ba nhà toán học Mỹ là Boce, Parker và Srikanda mới tìm được phương pháp xây dựng hình vng la tinh trực giao cho các trường hợp:

n4k1

với

k1, 2, 3, ...

; còn các trường hợp khác vẫn cịn là những thách thức hóc búa với trí tuệ lồi người.

<b>4.4.2. Bài tốn tô màu bản đồ. </b>

Các nhà nghiên cứu về bản đồ tô màu bản đồ địa lý theo quy tắc sau: Hai nước có chung đường biên giới phải được tơ bởi 2 màu khác nhau. Hãy chứng minh rằng mọi bản đồ địa lý có thể tơ bằng 4 màu.

Người ta đã chứng minh được rằng mọi bản đồ đều có thể tơ với số màu lớn hơn 4, và với số màu ít hơn 4 thì khơng thể tơ được. Tuy nhiên mọi bản đồ thực tế chỉ cần 4 màu là đủ; khơng ai tìm được một bản đồ mà bắt buộc phải tô bằng 5 màu.

Bài toán này do một thương nhân người Anh là Gazri đề ra từ những năm 1850; người ta cố gắng chứng minh rằng chỉ cần 4 màu là đủ. Sau hơn một thế kỷ, mãi đến năm 1976 hai nhà toán học Mỹ là K.Appel và W.Haken mới chứng minh được giả thuyết này bằng máy tính điện tử.

Tuy nhiên người ta vẫn nghi ngờ tính đúng đắn của cách chứng minh có sự trợ giúp của máy tính điện tử này.

Vì vậy vào cuối những năm 1990 hai tác giả trên đã cơng bố cách chứng minh của mình bằng một cuốn sách dày 800 trang.

</div><span class="text_page_counter">Trang 36</span><div class="page_container" data-page="36">

<b>4.4.3. Bài tốn hình lục giác huyền bí. </b>

Bài tốn này do Cliford Adams đề ra năm 1910, nội dung như sau:

Hãy điền các số từ 1 đến 19 vào 19 ơ hình lục giác (như hình vẽ) sao cho tổng các số theo 3 chiều của các cạnh hình lục giác đều bằng nhau.

Hơn nửa thế kỷ sau, năm 1962, Adams đã công bố lời giải như hình vẽ dưới đây. Điều bất ngờ đây lại là lời giải duy nhất nếu bỏ qua những lời giải được suy ra từ một phép biến hình đơn giản, chẳng hạn quay hình lục giác một góc 60<small>0</small>.

<i>Thí dụ. </i>

Một đội bóng đá gồm 20 cầu thủ đeo số áo từ 1 đến 20, đứng ngẫu nhiên thành một vòng tròn. Chứng minh rằng ln tìm được ít nhất một nhóm gồm 4 cầu thủ đứng liền nhau mà tổng các số ghi trên áo của họ

43

.

</div><span class="text_page_counter">Trang 37</span><div class="page_container" data-page="37">

Vì các cầu thủ xếp vịng trịn, mỗi nhóm gồm 4 cầu thủ đứng liền nhau nên mỗi cầu thủ được xếp vào 4 nhóm khác nhau, do đó khi tính tổng các số ghi trên áo của tất cả các nhóm thì số áo của mỗi cầu thủ được tính 4 lần. Vậy

Mệnh đề đã được chứng minh.

Có một số bài tốn tồn tại mà lời giải của nó có thể khái quát hóa cho một lớp khá rộng các bài tốn, nên người ta trình bày các bài tốn đó dưới dạng một định lý gọi là định lý tồn tại.

<b>4.5.2. Bài toán nhốt chim bồ câu và định lý Dirichlet. </b>

<i><b>a) Định lý Dirichlet giản đơn. </b></i>

Nếu nhốt

(n1)

con chim vào n chiếc lồng (n là số ngun dương) thì có ít nhất 1 lồng chứa ít nhất 2 con chim.

<i>Thí dụ 1. </i>

Trong số 13 sinh viên chọn bất kỳ, có ít nhất 2 sinh viên sinh cùng một tháng.

<i>Thí dụ 2. </i>

Cho

S{1, 2, 3, 4, 5, 6, 7, 8}

. Chọn ra 5 số bất kỳ. Chứng minh rằng có ít nhất 2 số có tổng bằng 9.

Thật vậy, ta chia 8 số đã cho làm 4 nhóm và coi mỗi nhóm như 1 lồng chim:

S {1, 8}; S {2, 7}; S {3, 6}; S {4, 5}

Mỗi số ta chọn ra coi như 1 con chim; mỗi số thuộc vào một nhóm nào đó. Vậy nhốt 5 con chim vào 4 chiếc lồng, theo định lý Dirichlet sẽ ln có ít nhất 1 nhóm chứa 2 số; 2 số này có tổng bằng 9. Bài toán đã được giải quyết.

 

<sup> con chim; trong đó </sup>

  

 

<sup> là số nguyên nhỏ nhất trong các </sup>số nguyên lớn hơn hoặc bằng

<sup>n</sup>

</div><span class="text_page_counter">Trang 38</span><div class="page_container" data-page="38">

<b>Bài 5.CÁC BÀI TOÁN TỔ HỢP TỐI ƯU </b>

<b>5.1. PHÁT BIỂU BÀI TOÁN </b>

Cho A là một tập hữu hạn, B là tập các cấu hình tổ hợp được tạo ra từ các phần tử của A, F(x) là một hàm xác định trên B. Giả sử

B 

và tất nhiên B cũng là một tập hữu hạn. Bài toán đặt ra là: Tìm <small>*</small>

xB

sao cho: <small>*</small>

Gọi mỗi hành trình thỏa mãn các điều kiện trên là x và B là tập tất cả các hành trình có thể có, mỗi hành trình là một hốn vị của n thành phố, do đó

| B |n!

. Với mỗi hành trình x, tương ứng với một chi phí là F(x). Vậy bài tốn đặt ra là:

Tìm

x

<sup>*</sup>

B

sao cho:

F(x )

<sup>*</sup>

F(x) xB

. Đôi khi cũng viết

<b>5.1.2. Bài tốn cái túi. </b>

Một nhà thám hiểm tìm kiếm được n mẫu quặng; mẫu quặng thứ i cân nặng <small>i</small>

a (kg)

và có giá trị là

c

<sub>i</sub>(đ). Anh ta có một cái túi chỉ đựng được b (kg). Hỏi rằng khi từ rừng sâu trở về, nhà thám hiểm cần đem theo những mẫu quặng nào để có tổng giá trị là lớn nhất?

Ký hiệu

x

<sub>i</sub> là biến nhị phân:

x

<sub>i</sub>

{0, 1}

, cịn gọi là biến lựa chọn. <small>i</small>

x1

có nghĩa là nhà thám hiểm sẽ chọn đem về mẫu quặng thứ i và

x

<sub>i</sub>

0

trong trường hợp ngược lại. Khi đó mơ hình tốn học của bài toán này là: <small>n</small>

<small>iii 1</small>

<small></small>

</div><span class="text_page_counter">Trang 39</span><div class="page_container" data-page="39">

Dưới đây ta cũng xét một vài thuật toán tiêu biểu.

<b>5.2. THUẬT TỐN DUYỆT TỒN BỘ </b>

Giả sử phải giải bài toán:

F(x)min, max; xB

trong đó B là tập rời rạc. Để giải bài toán này trước tiên ta liệt kê các phần tử của B; sau đó với mỗi

xB

ta tính F(x); và so sánh các giá trị của F(x) để tìm ra phương án tối ưu. Thuật tốn đó gọi là thuật tốn duyệt tồn bộ hay thuật tốn điểm diện.

Nếu số phần tử của B là nhỏ thì thì thuật tốn này rất có hiệu quả và dễ hiểu. Nếu |B| là khá lớn thì thuật tốn này rất khó thực hiện, ngay cả việc thực hiện trên các máy tính hiện đại nhất. Chẳng hạn như trong bài tốn người du lịch với

n15

thì ta có

| B |15! 1307674368000

phương án.

Nếu mỗi giây máy tính duyệt được 1 triệu phương án thì máy tính phải làm việc trong thời gian liên tục là 1 307 674 giây, tương ứng với 3 700 giờ làm việc liên tục hay 154 ngày liên tục. Đó là một điều khơng khả thi.

Tuy nhiên cũng cần nhấn mạnh rằng có khơng ít bài tốn tổ hợp tối ưu, chúng ta chưa có một thuật tốn hữu hiệu nào ngồi thuật tốn duyệt tồn bộ, khi đó trong q trình liệt kê, chúng ta cần tận dụng những thông tin thu được ở mỗi bước để loại bỏ những phương án mà chắc chắn không phải là tối ưu. Một trong các giải pháp như thế được giới thiệu dưới đây với tên gọi “thuật toán nhánh cận”.

Lược đồ tổng quát của thuật tốn nhánh cận có thể mơ tả như sau: Bước 0:

Tìm cận dưới của F(x) trên B. Đó là một số, ký hiệu là:

</div>

×