GIẢI MỘT SỐ BÀI TOÁN TRÕ CHƠI NHỜ CÔNG CỤ MÃ GRAY CƠ SỐ 2
§1 Mã Gray cơ số 2 (The binary Gray code) 1.1 Mã Gray cơ số 2
Cùng với hệ đếm cơ số 10, ngày nay các nhà toán học và khoa học máy tính thường làm việc với các hệ đếm khác. Một trong những hệ đếm sử dụng thuận tiện và hữu hiệu nhất, và có ứng dụng đáng ngạc nhiên vào việc giải các bài toán trò chơi là mã Gray.
Mã Gray được ứng dụng lần đầu tiên trong giải bài toán trò chơi vào năm 1872, khi lời giải đẹp cho một trò chơi cơ học truyền thống (trò chơi tháo vòng Trung Hoa) được Louis Gros tìm ra nhờ sử dụng mã Gray hệ đếm cơ số 2. Tuy nhiên, danh từ mã Gray được sử dụng nhằm tôn vinh Frank Gray (1887-1969), nhà nghiên cứu vật lí tại phòng thí nghiệm của hãng Bell Telephone. Sự đóng góp của Ông vào công nghệ truyền thông hiện đại là rất lớn. Phương pháp hiện nay được sử dụng trong phát sóng truyền hình màu đã được phát triển bởi Gray vào những năm 1930. Vào những năm 1940 Ông đã phát minh ra một mã cơ số 2 (mã nhị phân). Mã nhị phân do Gray phát minh nhằm khử các sai số lớn có thể xuất hiện trong quá trình truyền tín hiệu bởi các mã điều biến dạng xung (the pulse code modulation-PCM) và nhanh chóng được gọi là mã Gray cơ số 2 (mã Gray nhị phân). Công bố đầu tiên của mã Gray đã được cấp bằng sáng chế U.S.
Patent 2632058 (March 17, 1953).
Mã Gray chính là cách kí hiệu hóa các số đang được tính toán sao cho khi các số ở trạng thái tĩnh, mọi cặp liền kề sẽ chỉ khác nhau tại một vị trí trong các chữ số của nó, và hiệu số tuyệt đối tại vị trí đó chỉ bằng 1. Thí dụ, 193 và 183 có thể là hai số liền kề trong mã Gray cơ số 10 (hai chữ số giữa sai khác nhau 1 đơn vị), còn 193 và 173, hay 134 và 143 không phải là hai số liền kề trong mã Gray. Tồn
tại vô hạn mã Gray, bởi vì chúng áp dụng cho mọi hệ đếm cơ số bất kì và có nhiều cách khác nhau xây dựng mã Gray cho mỗi cơ số.
Để đánh giá đúng giá trị của các mã Gray, ta xét điều gì xảy ra, nếu đồng hồ công tơ mét của xe ôtô báo là 9999 (km)? Để ghi nhận km tiếp theo, cả năm bánh xe phải quay và thay đổi để ghi số 10000 (km). Bởi vì các bánh xe này chuyển động chậm, nên sẽ có một chút sai số nhỏ chấp nhận được. Nhưng nếu đồng hồ đo là một máy ghi điện tử có tốc độ cao, thì hai hoặc nhiều chữ số thay đổi tại cùng một thời điểm có khả năng sinh ra các số sai. Khả năng sai số lớn này sẽ được giảm thiểu tối đa nếu quá trình tính toán đòi hỏi chỉ một thay đổi khi đại lượng tính toán được mã hóa chuyển từ giá trị này sang giá trị khác. Nếu tính toán theo mã Gray, thì tại mỗi bước chỉ có một bánh xe của đồng hồ đo thay đổi bởi chỉ một đơn vị.
Mã Gray cơ số 2 là mã đơn giản nhất. Nếu ta giới hạn mã hóa một chữ số, thì chỉ cần 212 chữ số, chữ số 0 và chữ số 1. Như vậy, chỉ có một mã Gray: 0, 1.
Chúng ta có thể mô tả điều này như một đoạn thẳng, hai đầu của nó được gán nhãn 0 và 1 (Hình 1.1a). Mã Gray nhận được bằng cách chuyển động dọc theo đường thẳng theo một trong hai hướng.
Mã Gray cho hai chữ số trong hệ đếm cơ số 2 là 22 4 số: 00; 01; 10 và 11. Các góc của hình vuông có thể được dán nhãn bởi các số này (Hình 1.1b). Nhãn được gán sao cho các số trong hệ đếm cơ số 2 tại mỗi cặp của các góc liền kề khác nhau chỉ tại một vị trí. Ta có thể bắt đầu tại đỉnh bất kì và đi qua tất cả bốn đỉnh quanh hình vuông ngược chiều kim đồng hồ. Đây chính là bốn số trong mã Gray. Đường nét đứt bắt đầu từ 00 sinh ra mã Gray 00, 01, 11, 10 (các số liền kề chỉ sai khác 1 chữ số). Mã này là mã xoay vòng (cyclic) vì ta có thể đi trở về đỉnh ban đầu 00 từ đỉnh cuối 10 chỉ bởi một bước (đường liền trong Hình 1.1b).
Hình 1.1a Hình 1.1b Hình 1.1c
Mã Gray cho các số có ba chữ số trong hệ đếm cơ số 2 có 238 số. Các số này có thể gán nhãn cho các đỉnh của lập phương (Hình 1.1c). Các đỉnh liền kề có bộ ba chữ số cơ số 2 khác nhau chỉ ở một vị trí. Mọi đường đi liên tục theo các cạnh của lập phương chỉ đi qua mỗi đỉnh một lần tạo ra một mã Gray. Thí dụ, đường nét đứt bắt đầu từ 000, đi qua 001, 011, 010, 110, 111, 101, 100 tạo ra một mã Gray. Đây là một mã xoay vòng vì đường đi có thể từ vị trí cuối cùng 100 trở về vị trí ban đầu 000 sau một bước. Đường đi này (khép kín và đi qua tất cả các đỉnh của lập phương) được gọi là đường đi Hamilton theo tên nhà toán học William Rowan Hamilton. Như vậy, các mã Gray cơ số 2 tương ứng với các đường Hamilton theo các cạnh của lập phương (Hình 1.1c).
Mã Gray đơn giản nhất với cả hai đường xuôi và ngược chiều được gọi là mã Gray phản xạ (a reflected Gray code). Vì dưới đây chỉ xét mã Gray phản xạ, nên để ngắn gọn, ta vẫn gọi mã Gray phản xạ là mã Gray. Để chuyển một số
n n 1... ...i 1 0 2
a a a a a a trong hệ đếm cơ số 2 sang mã Gray tương ứng với nó, ta bắt đầu với chữ số a0 ở bên phải và xét mỗi chữ số ai theo chiều từ phải sang trái. Nếu chữ số ai1 (tiếp theo bên trái chữ số ai) là chẵn (là 0) thì ta giữ nguyên chữ số cũ ai. Nếu chữ số tiếp theo ai1 bên trái chữ số ai là lẻ (là 1), thì ta thay chữ số cũ ai bằng 1ai (nếu chữ số cũ ai là 0 thì thay bằng 1 và ngược lại).
Chữ số ngoài cùng bên trái không thay đổi. Thí dụ, áp dụng qui tắc này cho số 110111 trong hệ đếm cơ số 2 cho ta số Gray tương ứng là 101100.
Để đổi ngược lại, ta xét mỗi chữ số bắt đầu từ bên phải. Nếu tổng của tất cả các chữ số ở bên trái là chẵn, thì giữ nguyên số đó. Nếu tổng là lẻ, thì thay đổi chữ số đó (0 thành 1; 1 thành 0). Áp dụng qui tắc này cho số 101100 trong mã Gray ta được số ban đầu 110111 trong hệ đếm cơ số 2.
Xét các số từ 0 đến 42 và các mã Gray cơ số 2 tương ứng ta thấy, mọi cặp hai số Gray liền kề khác nhau chỉ ở một vị trí, và hiệu giữa chúng chỉ có thể bằng 1 (xem Bảng 1.1). Bắt đầu từ 0, 1 như là mã Gray với các số một chữ số, ta thêm vào các số theo thứ tự ngược lại (đối xứng) sẽ cho bốn số 0, 1, 1, 0. Tiếp theo đặt 0 vào trước hai số đầu và 1 vào trước hai số cuối, ta được mã Gray hai chữ số: 00, 01, 11, 10. Mã này tương ứng với đường đi Hamilton trên hình vuông, bắt đầu từ 00.
Tương tự, ta thêm vào các số theo thứ tự ngược lại (đối xứng) của mã Gray hai chữ số, được 00, 01, 11, 10, 10, 11, 01, 00. Sau đó ta thêm 0 vào đầu bốn số đầu tiên và thêm 1 vào đầu bốn số cuối, được mã Gray cơ số 2 ba chữ số: 000, 001, 011, 010, 110, 111, 101, 100. Mã này tương ứng với đường đi Hamilton trên lập phương, bắt đầu từ 000.
Thực hiện quá trình này, từ mã Gray n chữ số, trước tiên ta thêm vào các số theo thứ tự ngược lại (đối xứng) của mã Gray n chữ số đã có, sau đó thêm 0 vào đầu các số ở đầu dãy, và thêm 1 vào đầu các số của nửa sau của dãy (mới thêm vào), ta nhanh chóng sinh ra mã Gray cơ số 2 với các số có n1 chữ số.
Nhận xét rằng, mã Gray cơ số 2 độ dài n (của các số là các vetơ hay các bộ n chữ số) là mã xoay vòng (cyclic) mà các vectơ nbộ chữ số đầu và các vectơ
nbộ chữ số cuối tương ứng chỉ khác nhau một vị trí. Hai số liền kề chỉ khác nhau một chữ số. Nếu mã được sử dụng cho máy đếm chứa các bánh xe, như ở các công tơ mét, thì đồng hồ đo có thể đi từ số cao nhất (số 1) trở về số thấp nhất (số 0) với thay đổi chỉ một đơn vị của một bánh xe.
BẢNG CÁC SỐ TỪ 1 ĐẾN 42 VÀ MÃ GRAY CƠ SỐ 2 CỦA CHệNG Cơ số Cơ số M Ã Cơ số Cơ số M Ã
10 2 G r a y 10 2 G r a y 5 4 3 2 1 6 5 4 3 2 1
0 0 0 22 10110 1 1 1 0 1
1 1 1 23 10111 1 1 1 0 0
2 10 1 1 24 11000 1 0 1 0 0
3 11 1 0 25 11001 1 0 1 0 1
4 100 1 1 0 26 11010 1 0 1 1 1 5 101 1 1 1 27 11011 1 0 1 1 0 6 110 1 0 1 28 11100 1 0 0 1 0 7 111 1 0 0 29 11101 1 0 0 1 1 8 1000 1 1 0 0 30 11110 1 0 0 0 1 9 1001 1 1 0 1 31 11111 1 0 0 0 0 10 1010 1 1 1 1 32 100000 1 1 0 0 0 0 11 1011 1 1 1 0 33 100001 1 1 0 0 0 1 12 1100 1 0 1 0 34 100010 1 1 0 0 1 1 13 1101 1 0 1 1 35 100011 1 1 0 0 1 0 14 1110 1 0 0 1 36 100100 1 1 0 1 1 0 15 1111 1 0 0 0 37 100101 1 1 0 1 1 1 16 10000 1 1 0 0 0 38 100110 1 1 0 1 0 1 17 10001 1 1 0 0 1 39 100111 1 1 0 1 0 0 18 10010 1 1 0 1 1 40 101000 1 1 1 1 0 0 19 10011 1 1 0 1 0 41 101001 1 1 1 1 0 1 20 10100 1 1 1 1 0 42 101010 1 1 1 1 1 1
21 10101 1 1 1 1 1
Bảng 1.1 Vì mỗi số trong mã Gray chỉ khác với số bên cạnh nó một chữ số, nên để đỡ phải viết dài các số trong mã Gray khi độ dài các chữ số lớn, ta chỉ cần viết số biểu thị vị trí của chữ số khác với chữ số của số đứng trước nó. Bắt đầu từ bên phải, số đầu tiên luôn là chữ số 1.
Thí dụ 1.1 Với mã Gray gồm 4 số có hai chữ số 00, 01, 11, 10 ta có thể kí hiệu lại là: 1, 2, 1. Ta thấy rằng dãy này gồm ba số với hai số 1 bên trái và bên phải đối xứng qua số giữa (số 2).
Thí dụ 1.2 Ta có thể kí hiệu lại mã Gray gồm 8 số có ba chữ số 000, 001, 011, 010, 110, 111, 101, 100 là: 1, 2, 1, 3, 1, 2, 1. Dãy này gồm 7 số hạng (=231) và có tính đối xứng. Nó cũng dễ dàng được xây dựng từ dãy 1, 2, 1 theo qui tắc
thêm số 3 (bằng số chữ số trong mã Gray cơ số 2 đang xét) và viết thêm dãy 1, 2, 1 (về bên phải) đối xứng với dãy 1, 2, 1 qua số 3.
Qui tắc trên cũng cho phép xây dựng mã Gray cơ số 2 khi số chữ số tăng lên.
Thí dụ 1.3 Mã Gray gồm 16 số có bốn chữ số được xây dựng từ mã Gray có ba chữ số 1, 2, 1, 3, 1, 2, 1 thành 1, 2, 1, 3, 1, 2, 1, 4, 1, 2, 1, 3, 1, 2, 1. Độ dài của dãy này là 24 1 15.
Như vậy, mỗi mã Gray cơ số 2 n chữ số gồm 2n số có n chữ số tương ứng với một dãy gồm 2n1 số hạng. Để xây dựng mã Gray gồm 2n1 số với n1 chữ số ta chỉ việc viết số hạng giữa n1 và viết hai dãy tương ứng với mã Gray n chữ số vào hai bên. Số số hạng của dãy này là
2n 1 1 2n 1 2.2n 1 2n11.
Do tính đối xứng nên dãy này không thay đổi khi ta viết các số hạng của nó theo thứ tự ngược lại. Hơn nữa, dãy tương ứng với mã Gray n1 chữ số có tính chất:
tất cả các số hạng trong dãy, trừ số giữa, đều không lớn hơn n. Điều này có nghĩa là, nếu sử dụng dãy này để viết các số trong mã Gray độ dài n1, bắt đầu
từ
1
0...0
n
, thì 2n 1 số đầu tiên đều bắt đầu từ 0, bởi vì tọa độ đầu tiên bên phải (chữ số thứ n1) của các số đó không thay đổi (bằng 0), các tọa độ còn lại tạo thành một vectơ độ dài n và chúng được sắp xếp hoàn toàn giống như trong mã Gray với n chữ số. Vì vậy hoán vị của tất cả 2n số 0 và 1 tạo thành các vectơ độ dài n1 (với tọa độ đầu tiên bằng 0, chỉ có n tọa độ sau thay đổi), bắt đầu từ vectơ
1
0...0
n
. Phần tiếp theo của mã Gray là hoán vị của số 0 và 1 tạo thành các vectơ độ dài n1 (với tọa độ đầu tiên, hay chữ số thứ n1, bằng 1, bởi vì số
1
n đã đứng ở vị trí giữa của dãy). Các số này chính là các vectơ có n tọa độ cuối đối xứng với n tọa độ cuối của các vectơ trong phần đầu của mã Gray qua
số giữa. Do đó, vectơ cuối cùng trong mã Gray có dạng 10...0
n
. Bằng cách này, ta đã xây dựng được mã Gray độ dài n1 dựa trên mã Gray độ dài n. Thí dụ 1.1’ Vì mã Gray độ dài 1 chỉ gồm 2 số có một chữ số 0, 1 nên từ dãy 1, 2, 1 ta cũng dễ dàng khôi phục lại mã Gray độ dài 2 bằng cách viết số đầu tiên là 00. Số thứ hai tương ứng với số 1 trong dãy phải là 01 (chữ số thuộc hàng đơn vị thay đổi); Số thứ ba tương ứng với số 2 trong dãy phải là 11 (chữ số thuộc hàng chục thay đổi); Số thứ tư tương ứng với số 1 trong dãy phải là 10 (chữ số thuộc hàng đơn vị thay đổi).
Ta cũng có thể xây dựng mã Gray của các số có hai chữ số từ dãy 1, 2, 1 ngắn gọn hơn như sau: Từ dãy 1, 2, 1 ta xây dựng mã Gray độ dài 2 bằng cách viết hai số 0, 1. Sau đó thêm 0 vào đầu hai số này ta được hai số đầu tiên 00, 01 của mã Gray cơ số 2. Sau đó lấy đối xứng, được hai số 01, 00 và thay chữ số 0 ở đầu các số này bởi chữ số 1, ta được mã Gray độ dài 2 là 00, 01, 11, 10. Vậy mã Gray hai chữ số, tương ứng 1-1 với dãy 1, 2, 1 là 00, 01, 11, 10.
Thí dụ 1.2’ Từ dãy 1, 2, 1, 3, 1, 2, 1 ta xây dựng mã Gray độ dài 3 bằng cách viết mã Gray độ dài 2 là 00, 01, 11, 10 và lấy đối xứng, ta được dãy gồm tám số 00, 01, 11, 10, 10, 11, 01, 00. Thêm chữ số 0 vào đầu các số trong mã Gray độ dài 2 và thêm chữ số 1 vào đầu các số trong phần đối xứng. Ta được mã Gray độ dài 3: 000, 001, 011, 010, 110, 111, 101, 100.
Qui tắc chuyển số trong hệ đếm cơ số n sang số trong mã Gray phản xạ chỉ là sự tổng quát hóa đơn giản của các qui tắc cho hệ đếm cơ số 2 như sau.
Nếu cơ số là chẵn thì các qui tắc hoàn toàn giống như cho hệ đếm cơ số 2, với một chút sửa đổi: khi chữ số bị thay đổi thì nó thay đổi thành “phần bù” theo
1
n , tức là chữ số được thay bằng hiệu của n1 với chữ số đó. Trong hệ đếm cơ số 2, vì n 1 1 nên ta đã có thay đổi đơn giản là 1 thành 0 và 0 thành 1.
Trong hệ đếm cơ số 10, các số được thay bằng bù của nó theo 9.
Cơ số 10 Mã Gray Cơ số 10 Mã Gray Cơ số 10 Mã Gray
1 1 11 18 21 21
2 2 12 17 22 22
3 3 13 16 23 23
4 4 14 15 24 24
5 5 15 14 25 25
6 6 16 13 26 26
7 7 17 12 27 27
8 8 18 11 28 28
9 9 19 10 29 29
10 19 20 20 30 39
Bảng 1.2 Để chuyển một số trong cơ số 10 sang số trong mã Gray cơ số 10, ta xét mỗi chữ số bắt đầu từ bên phải. Nếu chữ số tiếp theo bên trái là chẵn, thì chữ số đang xét không thay đổi. Nếu chữ số bên trái là lẻ, thì lấy bù theo 9 của chữ số đang xét.
Thí dụ, 1972 được chuyển thành 1027. Để chuyển ngược lại một số trong mã Gray sang số trong hệ đếm cơ số 10, ta xét tổng tất cả các chữ số bên trái là tổng chẵn, thì giữ nguyên chữ số đó. Nếu tổng là lẻ, thì lấy bù theo 9.
Theo qui tắc trên, mã Gray phản xạ cơ số 10 được cho trong Bảng 1.2.
1.2 Mã Gray cơ số 2, hình lập phương kép và siêu hộp 1.2.1 Mã Gray cơ số 2 và hình lập phương kép
Trong Mục 1.1 ta đã biết, mã Gray cho các số có ba chữ số trong cơ số 2 tương ứng với các đường Hamilton trên lập phương (Hình 1.1c). Tương tự, mã Gray cho các số có bốn chữ số trong cơ số 2 có thể được biểu diễn trên hình lập phương kép (hình tạo bởi hai lập phương) trên mặt phẳng (Hình 1.2).
Lập phương kép này cho phép biểu diễn tập hợp tất cả các vectơ tổ hợp từ hai số 0 và 1 và có độ dài 4. Mỗi vectơ được biểu diễn bởi một điểm và gọi là đỉnh của
lập phương. Hai vectơ khác nhau chỉ một tọa độ được gọi là liền kề và tạo thành một cạnh của lập phương kép. Chỉ số của tọa độ này xác định hướng của cạnh.
Lập phương kép được vẽ trên mặt phẳng sao cho tất cả các cạnh của nó sẽ được biểu diễn bởi các đoạn thẳng nối các đỉnh của chúng, mà các cạnh của một hướng sẽ được biểu diễn bởi các đoạn thẳng bằng nhau và song song (vì vậy các cạnh này cũng được gọi là các cạnh song song). Thí dụ, lập phương kép bốn chiều có thể được biểu diễn như trong Hình 1.2.
Mã Gray trên lập phương kép nhiều chiều có thể được biểu diễn dưới dạng một dãy các đỉnh, mỗi cặp đỉnh liền kề trong dãy được nối bởi các cạnh. Một dãy các đỉnh như vậy được gọi là một đường. Vì vậy mã Gray cũng được biểu diễn bởi một đường với tính chất đỉnh cuối cùng và đỉnh đầu tiên có thể nối được bởi một cạnh. Những đường đi như vậy được gọi là chu trình. Tuy nhiên, mã Gray không chỉ đơn thuần là chu trình, mà là chu trình đi qua tất cả các đỉnh của lập phương kép. Những chu trình như vậy được gọi là chu trình Hamilton.
Để mô tả mã Gray trên hình lập phương kép n-chiều như trong Hình 1.2, ta phải gán nhãn cho các đỉnh, tức là gán tương ứng mỗi đỉnh một bộ số (một vectơ) gồm n tọa độ theo một qui tắc nào đó. Vectơ 0,...,0 được gán cho đỉnh thấp
nhất. Các cạnh được đánh số tương ứng với chỉ số của các hướng “đi ra” từ đỉnh 0. Hướng thứ 1 được đặt tương ứng với hướng bên phải nhất đi ra từ đỉnh 0, v.v..., còn hướng thứ n tương ứng với hướng của cạnh bên trái nhất đi ra từ đỉnh 0 (tức là theo chiều kim đồng hồ). Tiếp theo ta đánh số các đỉnh theo qui tắc sau:
Nếu đỉnh nào đó đã được gán nhãn, và từ đỉnh đó hướng lên trên theo một cạnh nào đó, thí dụ, theo hướng thứ k, ta đi đến một đỉnh còn chưa được gán nhãn, thì ta gán cho đỉnh ấy một nhãn nhận được từ đỉnh trước đó bằng cách thay tọa độ thứ k (bằng 0) thành 1. Nếu chúng ta rơi vào đỉnh đã được gán nhãn, thì ta không phải làm gì cả, vì nếu ta gán nhãn cho đỉnh này theo qui tắc trên, thì nó sẽ nhận được nhãn trùng với nhãn đã có. Rõ ràng, theo qui tắc này, đỉnh cao nhất là vectơ có tất cả các tọa độ bằng 1.