Tải bản đầy đủ (.doc) (41 trang)

Ứng dụng của lí thuyết đồng dư trong kỹ thuật mã vạch

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 (346.86 KB, 41 trang )

1

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC VINH

DƯƠNG NGỌC ANH

ỨNG DỤNG CỦA LÝ THUYẾT ĐỒNG DƯ TRONG
KỸ THUẬT MÃ VẠCH

LUẬN VĂN THẠC SĨ TOÁN HỌC

NGHỆ AN – 2015


2

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC VINH

DƯƠNG NGỌC ANH

ỨNG DỤNG CỦA LÝ THUYẾT ĐỒNG DƯ TRONG
KỸ THUẬT MÃ VẠCH

CHUYÊN NGÀNH: ĐẠI SỐ VÀ LÝ THUYẾT SỐ
Mã số: 60 46 01 05

LUẬN VĂN THẠC SĨ TOÁN HỌC
Người hướng dẫn khoa học
PGS.TS. NGUYỄN THÀNH QUANG



NGHỆ AN - 2015


3

MỤC LỤC

TRANG

MỞ ĐẦU

1

CHƯƠNG 1
MỘT SỐ KIẾN THỨC CƠ SỞ

1.1 Thuật toán và độ phức tạp của thuật toán

3

1.2 Phép tính đồng dư và các vấn đề liên quan

5

1.3 Biểu diễn số nguyên và các thuật toán số học

12

CHƯƠNG 2

MÃ SỬA SAI VÀ MÃ VẠCH

2.1 Mã vạch và mã số

17

2.2 Mã sửa sai

30

2.3 Khoảng cách Haming

34

KẾT LUẬN

37

TÀI LIỆU THAM KHẢO

38


4

MỞ ĐẦU
Số học là một trong những kiến thức toán học lâu đời nhất. Từ trước tới
nay, người ta thường coi số học như một lĩnh vực đẹp, nhưng thuần túy lý thuyết của
toán học. Với sự phát triển của khoa học máy tính và công nghệ thông tin, số học đã
đóng góp những ứng dụng thực tế bất ngờ và quan trọng, đặc biệt trong lĩnh vực mã

hóa thông tin.
Dựa trên cơ sở Lý thuyết đồng dư , luận văn có mục đích tìm hiểu và trình bày
các kết quả cơ sở về kỹ thuật mã vạch, mã sửa sai. Những ứng dụng của Lý thuyết
số và Đại số tuyến tính cho phép nhận được những kết quả quan trọng trong hệ đếm,
mã sửa sai và mật mã. Qua đây, nhận thấy rằng nhiều kết quả toán học tưởng chừng
chỉ có ý nghĩa lý thuyết , song lại mang đến nhiều kết quả bất ngờ và sâu sắc trong
ứng dụng thực tế, những kiến thức Số học sơ cấp nhưng có mối liên hệ với những
thành tựu mới trong Tin học và đời sống. Số học đã hiện hữu trong các hoạt động
thực tiễn: Kỹ thuật máy tính, mật mã, trao đổi trực tuyến giữa các ngân hàng, thẻ
ATM, truyền phát tín hiệu vệ tinh, chứng khoán, mã vạch, mã sửa sai…
Mục đích của luận văn này là tìm hiểu cơ sở của việc áp dụng Số học vào một
số lĩnh vực ứng dụng của kỹ thuật mã vạch.
Luận văn gồm hai chương. Chương 1 trình bày các kiến thức về: thuật toán,
độ phức tạp của thuật toán, phép tính đồng dư, biểu diễn số nguyên và các thuật toán
số học. Chương 2 trình bày một số vấn đề về: mã vạch, mã số, mã sửa sai, khoảng
cách Hamming.
Ngoài ra, chúng tôi cũng quan tâm đến khía cạnh thực tế của vấn đề: mã vạch,
mã hàng hóa, mã sách tiêu chuẩn quốc tế,.... Chúng tôi cũng cố gắng tìm hiểu, tuy
chưa được đầy đủ, các mã hàng hóa, mã văn hóa phẩm của Việt Nam và kiểm
nghiệm các tiêu chuẩn giải mã cho các ví dụ cụ thể của các mã này.
Luận văn này được hoàn thành dưới sự hướng dẫn khoa học tận tình và chu


5

đáo của PGS.TS. Nguyễn Thành Quang. Nhân dịp này tôi xin bày tỏ lòng kính trọng
và biết ơn sâu sắc tới thầy giáo hướng dẫn khoa học, người đã dành nhiều thời gian
và công sức cho tôi để hoàn thành luận văn này.
Nhân dịp này tôi xin bày tỏ lòng biết ơn và gửi lời cảm ơn đến các thầy cô giáo
chuyên ngành Đại số và Lý thuyết số, Khoa Toán, Phòng Đào tạo Sau Đại học –

Trường Đại học Vinh, những người đã tận tình giảng dạy và tạo mọi điều kiện thuận
lợi cho tôi hoàn thành khóa học.
Tôi cũng xin trân trọng cảm ơn tới Trường Đại học Vinh đã tạo mọi điều kiện
tổ chức cho chúng tôi hoàn thành khóa học.
Xin cảm ơn gia đình, bạn bè, đồng nghiệp đã cảm thông, ủng hộ và giúp đỡ
trong suốt thời gian tác giả học cao học và viết luận văn.
Mặc dù đã cố gắng nhưng luận văn còn nhiều thiếu sót, tác giả mong nhận
được sự đóng góp của thầy cô giáo và các đồng nghiệp.
Tác giả


6

CHƯƠNG 1
MỘT SỐ KIẾN THỨC CƠ SỞ

1.1. Thuật toán và độ phức tạp của thuật toán
1.1.1. Khái niệm thuật toán. Thuật toán là một quy tắc để với những dữ liệu ban đầu
đã cho, ta tìm được lời giải sau một thời gian hữu hạn.
Một thuật toán cần phải thỏa mãn các yêu cầu sau đây:
- Tính hữu hạn. Thuật toán cần phải kết thúc sau một số hữu hạn bước. Khi
thuật toán ngừng, ta phải thu được câu trả lời cho vấn đề đặt ra.
- Tính xác định. Tại mỗi bước, thuật toán cần phải xác định nghĩa là chỉ rõ ra
việc cần làm.
Ngoài ra, ta còn phải xét đến tính hiệu quả của thuật toán. Có rất nhiều thuật
toán, về mặt lí thuyết là kết thúc sau hữu hạn bước, tuy nhiên thời gian "hữu hạn" đó
vượt quá khả năng làm việc của chúng ta. Những thuật toán như vậy sẽ không được
xét ở đây vì chúng tôi chỉ quan tâm những thuật toán có thể sử dụng thật sự trên máy
tính.
Cũng do mục tiêu nói trên, chúng ta cần phải chú ý đến độ phức tạp của thuật

toán. Độ phức tạp của thuật toán có thể đo bằng không gian, tức là dung lượng bộ nhớ
của máy tính cần thiết để thực hiện thuật toán, và bằng thời gian, tức là thời gian máy
tính thực hiện thuật toán này. Trong luận văn này, khi nói đến độ phức tạp của thuật
toán, chúng ta luôn hiểu độ phức tạp thời gian.
Dĩ nhiên, thời gian làm việc của máy tính khi chạy một thuật toán nào đó
không chỉ phụ thuộc vào thuật toán mà còn phụ thuộc vào máy tính đang được sử
dụng. Vì thế, để có một tiêu chuẩn chung, ta sẽ đo độ phức tạp của một thuật toán
bằng số các phép tính phải làm khi thực hiện thuật toán. Nhưng điều này lại phụ
thuộc vào độ lớn của dữ kiện đầu vào. Trong những ứng dụng thực tiễn, ta chỉ cần
ước lượng thật tốt độ phức tạp này. Để làm điều đó, ta dùng khái niệm bậc O-lớn.


7

1.1.2. Độ phức tạp của thuật toán. Giả sử f (n) và g ( n ) là hai hàm xác định trên
tập hợp các số nguyên dương. Ta nói, f (n) có bậc O-lớn của g(n) và viết

(

)

f ( n ) = O g ( n ) nếu tồn tại một hằng số C > 0 sao cho với n đủ lớn, các hàm f (n) và

g ( n ) đều dương đồng thời thỏa mãn f (n) < Cg ( n ) .
k

i
k
Ví dụ: Cho hai đa thức f ( n ) = ∑ ai n , ai > 0, ∀i = 1,..., k và g ( n ) = n xác định trên
i =0


k

tập số nguyên dương. Khi đó, f = O( g ) vì tồn tại số dương C = ∑ ai để với n đủ lớn
i =1

thì f (n), g (n) đều dương và f (n) < C.g (n) .
1.1.3. Tính chất của bậc O-lớn. Ta có những tính chất sau đây:
1) Nếu f1 = O( g ) và f 2 = O( g ) thì f1 + f 2 = O( g ) .
2) Nếu f1 = O ( g1 ) và f 2 = O( g 2 ) thì f1 f 2 = O ( g1g 2 ) .
f ( n)

3) Nếu tồn tại giới hạn hữu hạn lim
thì f = O( g ) .
n →∞ g ( n)
4) Với mọi ò > 0 , ta luôn có logn = O (nò) .
1.1.4. Định nghĩa. Một thuật toán được gọi là có độ phức tạp đa thức nếu số các
phép tính cần thiết khi thực hiện thuật toán đó không vượt quá O(log d n) , trong đó n là
độ lớn của đầu vào và d là số nguyên dương nào đó.
Nói cách khác, nếu đầu vào là các số k-bit thì thời gian thực hiện thuật toán là
O (k d ) , tức là tương đương với một đa thức của k.


8

1.2 Phép tính đồng dư và các vấn đề liên quan
1.2.1. Định nghĩa. Cho m > 1 là một số nguyên. Nếu a và b là các số nguyên mà
a − b chia hết cho m , thì chúng ta nói rằng a và b đồng dư với nhau theo môđun m

và viết a ≡ b(mod m) và được gọi là một đồng dư thức.

1.2.2. Tập các lớp đồng dư theo môđun m. Cho m > 1 là một số nguyên dương. Ta
biết rằng quan hệ đồng dư theo môđun m là một quan hệ tương đương trên tập số
nguyên Z , do đó tồn tại tập thương trên Z theo quan hệ tương đương này. Vậy ta có
định nghĩa: Tập thương của tập số nguyên Z trên quan hệ đồng dư theo môđun m
được gọi là tập hợp các lớp thặng dư môđun m và kí hiệu là Zm .
Mỗi phần tử A của Zm được gọi là một lớp thặng dư môđun m . Hai lớp
thặng dư môđun m hoặc bằng nhau hoặc không giao nhau và ¢

m

là hợp của tất cả

các lớp thặng dư môđun m rời nhau.
Giả sử A ∈ Zm , a ∈ A. Khi đó A = a = { x ∈ Z : x ≡ a(mod m)} . Phần tử a được
gọi là phần tử đại diện của lớp thặng dư A và được gọi là một thặng dư môđun m .
Tập Zm có đúng m phần tử. Thật vậy, xét các lớp thặng dư môđun m gồm:
0,1,..., m − 1. Ta chứng minh chúng gồm m lớp phân biệt. Quả vậy, với
i ≠ j (0 ≤ i, j ≤ m − 1) thì 0 < i − j ≤ m − 1 nên i, j không đồng dư với nhau theo

môđun m hay i ≠ j. Vậy 0,1,..., m − 1 là m lớp thặng dư phân biệt, chúng tạo nên
một con X gồm m phần tử của Zm . Giả sử x ∈ Zm , x = mq + r; q, r ∈ Z, 0 ≤ r ≤ m − 1
thì x ≡ i(mod m) , do đó

{

}

x = r ∈ 0, 1,..., m − 1 = X .

{


}

Vậy Zm = X = 0, 1,..., m − 1 có đúng m phần tử.


9

1.2.3. Vành các lớp đồng dư theo môđun m. Trên tập hợp Zm , ta định nghĩa phép
toán cộng và phép toán nhân như sau
k +l = k +l
k .l = kl .

Chúng ta chứng minh được rằng ( Zm , +,.) lập thành một vành giao hoán, có đơn vị.
Hơn nữa chúng ta có các kết quả sau: Vành Zm là một trường khi và chỉ khi m là số
nguyên tố.
1.2.4. Định nghĩa. Hàm số Euler ϕ (m) là hàm số số học có giá trị tại mỗi số tự
nhiên m ≠ 0 bằng số các số nguyên dương không vượt quá m và nguyên tố cùng nhau
với m:

ϕ ( m) =



1

1≤ k ≤m
( k , m ) =1

.


Hàm ϕ (m) có nhiều ứng dụng vì nó là cấp của nhóm nhân các số nguyên khả
nghịch môđun m. Hơn nữa, đối với hàm Euler ϕ (m) ta có công thức Gauss là công
thức tổng trải trên các ước dương d của m :

å j (d ) = m .
dm

Một kết quả số học có liên quan đến hàm Euler có rất nhiều ứng dụng trong tin
học, lý thuyết mật mã, đó là
1.2.5. Định lí Euler. Nếu a và m > 1 là các số nguyên, nguyên tố cùng nhau thì
aϕ ( m ) ≡ 1(mod m) .
Định lí Euler có thể dùng để tìm nghịch đảo modm. Chẳng hạn, nếu a và m là
các số nguyên nguyên tố cùng nhau, ta có aaϕ ( m )−1 ≡ 1(mod m) tức là aϕ ( m ) −1 là nghịch
đảo của a theo modm. Từ đó cũng suy ra nghiệm của phương trình đồng dư tuyến
tính ax ≡ b(mod m) với ( a, m) = 1 là x ≡ aϕ ( m) −1b(mod m) .


10

Các tính chất của hàm Euler được sử dụng để tính đồng dư của những lũy thừa
rất lớn. Chẳng hạn, ta cần tính a n mod k , trong đó n là một số nguyên lớn. Giả sử ta
αi

α
α
α
có k = p1 p2 L ps , khi đó, aϕ ( pi ) ≡ 1(mod pαi ) . Nếu N là bội chung nhỏ nhất của
1


các

α

ϕ ( pi i )

2

s

thì a N ≡ 1(mod k ) . Do đó, nếu viết n = Nq + r với r < N thì ta thu được

a n ≡ a r (mod k ) .Ta xét một ví dụ ứng dụng bằng số.
Ví dụ 1. Tìm số dư trong phép chia 21000000 cho 77 .
Ta có ϕ (7) = 6; ϕ (11) = 10;26 ≡ 1(mod 7); 210 ≡ 1(mod11) . Do đó,
230 ≡ 1(mod 7); 230 ≡ 1(mod11) .

Vì vậy
230 º 1(mod 77).

Mặt khác, 1000000 = 30.33333 + 10 cho nên:
21000000 º 210 º 23(mod 77)

Ví dụ 2. Tìm chữ số cuối cùng của số 2999 .
Ta có: 2 999 ≡ 0(mod 2) . Mặt khác: (2,5) = 1 nên theo Định lý Euler:
2 ϕ ( 5) ≡ 1(mod 5) ⇒ 2 4 ≡ 1(mod 5) ⇒ 2 2000 ≡ 1(mod 5) ≡ 6(mod 5)
⇒ 2 999 ≡ 3(mod 5) .
2 999 ≡ 0(mod 2) ≡ 8(mod 2)
Vậy ta có  999
2 ≡ 3(mod 5) ≡ 8(mod 5)

999
Từ đó ta suy ra 2 ≡ 8 ( mod 10 ) , hay số 2 999 tận cùng bên phải là số 8.

Ví dụ 3. Tìm số dư trong phép chia 2002 2003 chia cho 19.
Vì 2002 ≡ 7(mod 19) nên 2002 2003 ≡ 7 2003 (mod 19).
Ta có (7 , 19) = 1 , áp dụng Định lý Fermat với số nguyên tố p = 19, ϕ ( p) = 18 ta được
7 18 ≡ 1(mod 19). Hơn nữa 7 2003 = (7 18 ) 111 .7 5 ≡ 7 5 (mod 19). Ta có
7 3 = 343 ≡ 1(mod 19) nên 7 5 ≡ 49(mod 19 ) hay 7 5 ≡ 11(mod 19 ).


11

Từ đó
20022003 ≡ 11(mod19).

Vậy số dư trong phép chia 2002 2003 chia cho 19 là r = 11.
Một dạng phát biểu tương đương với Định lý Euler là
1.2.6. Định lí Fermat bé. Nếu p là số nguyên tố và a là số nguyên không chia hết cho
p thì a p −1 ≡ 1(mod p) . Nói cách khác, nếu p là số nguyên tố và a là số nguyên bất kỳ
thì a p ≡ a(mod p) .
Một cách độc lập, các nhà toán học Trung Quốc đã đưa ra một giả thuyết
(thường gọi là Giả thuyết Trung Quốc) nói rằng: Số tự nhiên p > 1 là một số nguyên
tố khi và chỉ khi 2 p º 2(mod p) . Đúng là, nếu p là số nguyên tố, thì 2 p º 2(mod p) .
Đây là trường hợp đặc biệt của Định lý bé Fermat. Tuy thế, điều ngược lại
(nếu 2 p º 2(mod p) thì p là số nguyên tố) là sai. Chẳng hạn, 2341 º 2(mod341) ,
nhưng 341 = 11.31 là hợp số. Như vậy, mệnh đề ngược lại của Định lí Fermat bé
không đúng. Tuy nhiên, qua nhiều thống kê cho thấy rằng nếu một số nguyên thỏa
mãn kết luận của Định lí Fermat bé thì "có nhiều khả năng" nó là số nguyên tố. Do
đó, dẫn xuất đến khái niệm sau
1.2.7. Số giả nguyên tố. Muốn kiểm tra số n có là số nguyên tố không, ta lấy ngẫu

nhiên các số nguyên a và kiểm tra xem đồng dư thức a n ≡ a(mod n) có đúng không.
Nếu nó không đúng với một giá trị a nào đó thì n là hợp số. Nếu đồng dư thức đúng
với một hoặc nhiều giá trị của a, thì ta nói rằng n là số nguyên tố với xác suất nào đó,
hay n là một số giả nguyên tố (pseudoprime).
Nếu n là một hợp số và tồn tại một số nguyên a sao cho a n º a(mod n) ,
thì n được gọi là số giả nguyên tố cơ sở a.
F. Sarrus vào năm 1820 đã tìm thấy 341 = 11×31 là số giả nguyên tố cơ sở 2
đầu tiên.


12

Một số nguyên n là số giả nguyên tố cơ sở a với mọi số nguyên a được gọi
là số Carmichael (chẳng hạn số 561).
1.2.8. Định lí phần dư Trung Hoa (Chinese Remainder Theorem). Giả sử m1 ,..., mr
là các số nguyên dương, nguyên tố cùng nhau từng đôi một. Khi đó, hệ phương trình
đồng dư:
 x ≡ a1 (mod m1 )
 x ≡ a (mod m )

2
2

 M
 x ≡ ar (mod mr )

có nghiệm duy nhất theo môđun m = m1m2 ...mr
1.2.9. Nhóm nhân ¢ *m các số nguyên modm
Nếu m > 1 là một số nguyên thì tập hợp các lớp đồng dư modm có đại diện
nguyên tố cùng nhau với m tạo thành một nhóm với phép nhân và được ký hiệu bởi

¢ *m . Cấp của nhóm này cho bởi giá trị j (m) của hàm Euler. Giá trị j (m) được gọi là

kích thước hay cấp của nhóm nhân ¢ *m . Nếu m là số nguyên tố, thì kích thước và cấp
của nhóm này là m − 1. Một phần tử sinh của nhóm nhân ¢ *m được gọi là một căn
nguyên thủy modm.
Dùng Định lý số dư Trung Hoa, ta có kết quả: Nhóm nhân ¢ *m là tích trực
tiếp của các nhóm nhân theo mỗi lũy thừa cực đại của các ước nguyên tố của m.
*
*
*
Chẳng hạn, ¢ 24 = ¢ 2 × ¢ 3 là một nhóm xyclic cấp 8.
3

Nhóm ¢ *m có nhiều ứng dụng trong Lý thuyết số và Mật mã học bởi công cụ
kích thước j (m) của nó.
1.2.10. Bậc của một số nguyên. Cho a, m là các số nguyên dương, nguyên tố cùng
nhau. Khi đó, theo Định lý Euler ta có đồng dư thức sau:
aj ( m ) º 1(mod m) .


13

Số nguyên dương x nhỏ nhất thỏa điều kiện
a x º 1(mod m)

được gọi là bậc của số nguyên a theo modm và kí hiệu là
x = ord m a .

1.2.11. Căn nguyên thuỷ. Cho các số nguyên dương p, q nguyên tố cùng nhau. Khi
đó, q được gọi là căn nguyên thủy của p theo mod q nếu ord p q = j ( p ) .

Xét dãy Fibonacci F (n) xác định như sau
F (1) = 1; F (2) = 1; F ( n + 2) = F (n) + F ( n + 1).

Nếu số nguyên tố p là một ước của F (n) và p không là ước của F ( m) với
m < n thì p được gọi là một ước số nguyên tố nguyên thuỷ của F (n) .
Định lý Carmichael, được đặt tên sau khi nhà toán học Mỹ là R.D. Carmichael,
chỉ ra rằng với n lớn hơn 12, số hạng F (n) có ít nhất một ước nguyên tố mà không
phải là ước của bất kỳ số hạng Fibonacci nào trước đó. Ngoại lệ duy nhất cho n lên
đến 12 là:
F (1) = 1 và F (2) = 1 không có ước nguyên tố;
F (6) = 8 có ước nguyên tố là 2 (đó là F (3) );
F (12) = 144 có ước nguyên tố 2 (đó là F (3) ) và ước nguyên tố 3 (đó là F (4) ).

1.2.12. Định lý Carmichael. Mỗi số hạng Fibonacci, ngoài các trường hợp ngoại lệ
được liệt kê ở trên, có ít nhất một ước số nguyên tố nguyên thủy
1.2.13. Hàm số Carmichael. Giá trị của hàm số Carmichael tại một số nguyên
dương n , ký hiệu bởi l (n) , được định nghĩa là số nguyên dương m nhỏ nhất sao cho
a m º 1(mod n) với mọi số nguyên a sao cho a nguyên tố cùng nhau với n .

Ví dụ.

l (1) = 1; l (2) = 1; l (3) = 2; l (4) = 2; l (5) = 4.


14

Chú ý rằng, bởi vì a - 1 là số chẵn với mọi số nguyên lẻ a nên a º 1(mod 2)
hay l (2) = 1. Tổng quát, theo Định lý Fermat bé ta có a p- 1 º 1(mod p) . Do đó,
l ( p) = p - 1 với mọi số nguyên tố p .


1.2.14. Phân tích Fermat. Cho n là số nguyên dương lẻ. Giả sử n = ab với a, b là
các số nguyên. Do n lẻ nên a, b đều lẻ. Vì vậy, chúng ta có thể viết n = x 2 - y 2 với
x=

a- b
a+ b
, y=
. Do a, b là các số nguyên lẻ nên x, y cũng là các số nguyên lẻ.
2
2

Để tìm nghiệm của phương trình n = x 2 - y 2 , quy trình được bắt đầu từ số nguyên
nhỏ nhất m ³

2
2
2
n và tìm nghiệm trong dãy số sau: m - n,(m + 1) - n,(m + 2) - n...,

dãy số sẽ dừng do m không thể vượt quá

n +1
. Thật vậy:
2

2

2

 n +1

 n −1

 −n =
 .
 2 
 2 

Tất cả số hạng của biểu thức này là số nguyên. Tuy nhiên phương pháp này
hiệu quả nhất khi n là tích của hai số nguyên tố gần nhau.
Ví dụ. n = 3811 . Ta bắt đầu tính và tìm nghiệm trong chuỗi như sau:
622 - 3811 = 33
632 - 3811 = 159
642 - 3811 = 285
652 - 3811 = 414
662 - 3811 = 545
67 2 - 3811 = 678
682 - 3811 = 813

69 2 - 3811 = 950
70 2 - 3811 = 1089 = 332

Vậy ta được kết quả: 3811 = 702 - 332 = 103´ 37.


15

1.3. Biểu diễn số nguyên và các thuật toán số học
Nhng khỏi nim u tiờn v s ó cú t thi rt c xa. Nhng khỏi nim ú
phỏt sinh t s m. Euclide (th k th III trc cụng nguyờn) ó nh ngha s t
nhiờn l tp hp c to thnh t cỏc n v. Vo giai on phỏt trin u tiờn,

loi ngi ch bit cỏc s t nhiờn. Nhng cỏc s y khụng dựng ngay c trong
trng hp thc t n gin nht. Tht vy, nu ch dựng s t nhiờn thỡ trong trng
hp tng quỏt mt s t nhiờn ny khụng th chia cho mt s t nhiờn khỏc. Nhng
trong thc t li thng thng cn phi chia, chng hn 3 chia cho 4, 5 chia cho
12,... Khụng a phõn s vo thỡ phộp chia cỏc s t nhiờn coi nh khụng thc hin
c. Nhng ngay c sau khi ó a vo cỏc phõn s thỡ phộp tớnh tr khụng phi
luụn thc hiờn c. S phỏt trin ca i s ũi hi phi a phộp tr vo toỏn hc
v nú ó c cỏc nh toỏn hc n cụng nhn vo khong th k th VII. Nh
vy ta c nhng s mi ký hiu nh ngy nay l -1, -2, -3, ... Cỏc s ú gi l s
nguyờn õm. Du tr ng trc ghi li ngun gc ca s õm l do liờn tip tr i n
v. thc hin cỏc phộp tớnh cng nh cỏc thut toỏn trờn cỏc s nguyờn, trc ht
ta biu din s nguyờn theo c s tu ý.
1.3.1. nh lý. Gi s g l s nguyờn ln hn 1 . Khi ú, mi s nguyờn n 0 cú th
vit duy nht di dng
n = a k g k + a k 1 g k 1 + L + a1 g + a 0
trong ú a j l cỏc s nguyờn, 0 a j g 1, j = 0,1,..., k v h s u tiờn a k 0.
Chng minh. Ta thc hin liờn tip phộp chia n cho g :
n = gq 0 + a 0 , 0 a 0 b 1
Nu q 0 > g , thỡ ta tip tc chia q 0 cho g c
q 0 = gq1 + a1 , 0 a1 b 1
Tip tc quỏ trỡnh trờn, ta cú


16

q1 = gq2 + a2 , 0 ≤ a2 ≤ b − 1,
q2 = gq1 + a3 , 0 ≤ a3 ≤ b − 1
M
qk −1 = g .0 + ak , 0 < ak ≤ b − 1.


Vì g > 1 , nên ta có
n > qo > q1 > L > qk −1 > qk = 0.

Vì vậy, quá trình trên phải kết thúc với q k = 0. Thay các q j lần lượt theo các
a j và g ta sẽ thu được cách viết cần có của n .
Giả sử ta còn có
n = bl g l + bl −1 g l −1 + L + b1 g + b0
trong đó b j là các số nguyên, 0 ≤ b j ≤ g − 1, j = 0,1,..., l và hệ số đầu tiên bl ≠ 0.
Khi đó, từ đẳng thức
a k g k + a k −1 g k −1 + L + a1 g + a 0 = bl g l + bl −1 g l −1 + L + b1 g + b0
cho ta a 0 = b0 , vì đó là số dư trong phép chia n cho g . Giả sử ta đã có
a0 = b0 , a1 = b1 ,..., as −1 = bs −1 .

Thế thì ta được
a k g k + L + a s g s = bl g l + L + bs g s .
Từ đó ta có
a k g k − s + L + a s +1 g + a s = bl g l − s + L + bs +1 g + bs .
Lại như trên ta được a s = bs . Giả sử k > l , tức khắc ta có
a k g k −l + L + a l +1 g l +1 = 0 .
Đẳng thức này trái với điều kiện a k ≠ 0. Vì vậy, k = l và a j = b j , j = 0,1,..., k . ▄


17

1.3.2. Hệ cơ số. Từ định lý trên đây, cho phép chỉ bằng g ký hiệu biểu thị g số tự
nhiên đầu tiên 0,1,..., g − 1 , ta có thể biểu diễn được mọi số tự nhiên. Các ký hiệu này
được gọi là các chữ số trong hệ cơ số g . Cho n là số tự nhiên khác không, khi đó
n = a k g k + a k −1 g k −1 + L + a1 g + a 0
trong đó a j là các số nguyên, 0 ≤ a j ≤ g − 1, j = 0,1,..., k với hệ số đầu tiên a k ≠ 0.
Ta viết (ak ak −1 ...a1a0 ) g để chỉ số n trong hệ cơ số g . Các hệ số a j được gọi là

các chữ số của n trong hệ cơ số g .
Nhận xét. Nếu số nguyên n biểu diễn trong hệ cơ số g có k chữ số thì
g k −1 < n < g k .
Do đó, số chữ số của n được tính theo công thức
 log n 
k = [log g n] + 1 = 
 +1
log
g


trong đó ký hiệu log để chỉ logarit cơ số e. Trong hệ cơ số tuỳ ý, ta có k = O(log n).
1.3.3. Hệ đếm thập phân. Hệ cơ số 10 được gọi là hệ thập phân. Trong tiếng Việt
tên của tất cả các số từ 1 cho tới một triệu gồm có 14 từ, chỉ các số 1, 2, 3, 4, 5, 5, 7,
8, 9, 10, 100, 1000, 10000, 1000000. Ngoài ra, để cho dễ đọc một số từ đã được biến
thể khi ghép: một thành “mốt”, năm thành “lăm”, mười thành “mươi”. Cơ sở của
cách tạo từ ở đây là số 10 và vì vậy hệ thống danh pháp của chúng ta là hệ đếm thập
phân. Sỡ dĩ số 10 có vai trò đặc biệt là vì hai bàn tay chúng ta có 10 ngón.
Ví dụ: Đối với số 1994 trong hệ thập phân, ta có:
1994 = 1´ 103 + 9´ 10 2 + 9´ 10 + 4.

1.3.4. Hệ đếm nhị phân. Hệ cơ số 2 được gọi là hệ nhị phân. Hệ nhị phân có rất
nhiều ứng dụng, do chỉ dùng hai kí hiệu 0 và 1 và việc tính toán với các số trong hệ
này rất đơn giản. Máy tính sử dụng cách viết nhị phân, lí do là vì trong máy tính
người ta dựa trên một nguyên tắc vật lý đơn giản gọi là nguyên tắc “ Sáng, Tắt”: bóng


18

đèn sáng chỉ số 1, bóng đèn tắt chỉ số 0. Ta dùng “bít” để chỉ chữ số nhị phân 0 và 1.

Một ký hiệu 0 hoặc 1 được gọi là một bít (viết tắt của chữ “binary digit”). Một số
nguyên biểu diễn bởi k chữ số 1 và 0 được gọi là một số k-bit. Số tự nhiên n sẽ là một
số k-bit với k = [log2n] + 1.
Chẳng hạn đối với số 1994 trong hệ thập phân, có
(1994)10 = (11111001010)2.
Trong máy tính, bên cạnh hệ cơ số 2, người ta còn dùng hệ cơ số 8 hoặc cơ số 16. Lý
do chủ yếu là vì chuyển một số viết trong ở cơ số này sang cơ số kia sao cho trong
cơ số 2 sang cơ số 8, ta chỉ việc nhóm từ phải sang trái từng khối 3 chữ số, rồi
chuyển số được viết trong khối đó sang dạng thập phân.
Số (11111001010)2 được tách thành các nhóm 1, 110, 010, 100, 110. Từ đó
(11111001010)2 = (16236)8.
Máy tính nào cũng có giới hạn về độ lớn của các số có thể đưa vào tính toán.
Giới hạn đó được gọi là cỡ từ của máy, ký hiệu bởi ω . Cỡ từ thường là một luỹ thừa
của 2, chẳng hạnh 235. Để thực hiện các phép tính số học với những số nguyên lớn
hơn cỡ từ, ta làm như sau: Muốn đưa một số n > ω vào máy, ta viết n dưới dạng cơ
số g và khi đó n được biểu diễn bằng những số không vượt quá cỡ từ. Ví dụ, nếu cỡ
từ của máy là 235 thì có thể đưa một số có độ lớn cỡ 2 350-1, ta chỉ cần dùng 10 số nhỏ
hơn cỡ từ của máy, bằng cách biểu diễn n trong cơ số 235. Như đã nói ở trên việc
chuyển một số từ cơ số 2 sang cơ số 2 35 được thực hiện bằng cách nhóm từng khối 35
chữ số.
1.3.5. Thuật toán nhân nhanh hai số nguyên
Trong những thập kỷ cuối của thế kỷ XX, người ta tìm ra những thuật toán
nhân với độ phức tạp bé hơn nhiều so với cách nhân thông thường. Ta sử dụng tính
chất phân phối của phép nhân đối với phép cộng cac số nguyên:
Nếu a = a1 + a 2 , b = b1 + b2 , thì ab = a1b1 + a 2 b2 + a 2 b1 + a1b2 .


19

Điều đáng chú ý ở đây là, thay cho việc nhân hai số nguyên n bít, ta thực

hiện việc phép nhân các số có số chữ số nhỏ hơn, cùng với một số phép cộng. Thực
ra điều này không có gì mới, ngay trong quan niệm ban đầu phép nhân a với b là
phép cộng b lần số a. Tuy nhiên để có một thuật toán nhân nhanh, ta không thể
cộng b lần số a, mà phải tìm được một cách tối ưu nào đó để tách b và a thành
những phần nhỏ hơn.


20

CHƯƠNG 2
MÃ SỬA SAI VÀ MÃ VẠCH

2.1. Mã vạch và mã số
Phần lớn các sản phẩm mà ta mua trong siêu thị đều có mã vạch (barcode).
Các vạch này được đọc tại các bàn thu ngân bởi hệ thống quét laze để chuyển đổi
những vạch màu đen và trắng với độ dày đậm khác nhau thành những con số được
in bên dưới. Mỗi sản phẩm ấy được xác định bởi một chuỗi những con số, được gọi
là từ mã (codeword).
Ở bìa sau hầu hết các quyển sách ta cũng tìm thấy các mã vạch khác nhau,
mỗi nhà xuất bản sách đều có thể được đồng nhất với một mã số theo cách đã định
sẵn.
Mã số, mã vạch được coi như "căn cước" cho hàng hoá có tiêu chuẩn, chất
lượng, nguồn gốc, xuất xứ rõ ràng, nhằm bảo vệ nhãn hiệu, thương hiệu sản phẩm
hàng hóa của doanh nghiệp, trong bối cảnh hội nhập kinh tế quốc tế.
2.1.1. Mã vạch. Mã vạch là sự thể hiện thông tin trong các dạng nhìn thấy trên các bề
mặt của sản phẩm, hàng hóa mà máy móc có thể đọc được. Nguyên thủy thì mã vạch
lưu trữ dữ liệu theo bề rộng của các vạch được in song song cũng như của khoảng
trống giữa chúng, nhưng ngày nay chúng còn được in theo các mẫu của các điểm,
theo các vòng tròn đồng tâm hay chúng ẩn trong các hình ảnh. Mã vạch có thể được
đọc bởi các thiết bị quét quang học gọi là máy đọc mã vạch hay được quét từ hình

ảnh bằng các phần mềm chuyên biệt.
Nội dung của mã vạch là thông tin về sản phẩm như: Nước sản xuất, tên doanh
nghiệp, lô, tiêu chuẩn chất lượng đăng ký, thông tin về kích thước sản phẩm, nơi
kiểm tra...
Để tạo thuận lợi và nâng cao năng suất, hiệu quả trong bán hàng và quản lý kho người
ta thường in trên hàng hóa một loại mã hiệu đặc biệt gọi là mã số, mã vạch của hàng


21

hóa. Mã số, mã vạch của hàng hóa bao gồm hai phần: mã số của hàng hóa và mã vạch
là phần thể hiện mã số bằng vạch để cho máy đọc.

Mã số - mã vạch
2.1.2. Mã số của hàng hóa. Mã số hàng hoá là một dãy con số dùng để phân định
hàng hóa, áp dụng trong quá trình luân chuyển hàng hóa từ người sản xuất, qua bán
buôn, lưu kho, phân phối, bán lẻ tới người tiêu dùng. Do đó, mã số hàng hóa là "thẻ
căn cước" của hàng hóa, giúp ta phân biệt được nhanh chóng và chính xác các loại
hàng hóa khác nhau.
Để đảm bảo tính thống nhất và tính đơn nhất của mã số, mã quốc gia phải do
Tổ chức Mã số Vật phẩm Quốc tế (EAN lnternational) cấp cho các quốc gia là thành
viên của tổ chức này. Mã số quốc gia của Việt Nam là 893.
2.1.3. Lịch sử. Ý tưởng về mã vạch được phát triển bởi Norman Joseph Woodland và
Bernard Silver. Năm 1948 khi đang là sinh viên ở trường Đại học tổng hợp Drexel,
họ đã phát triển ý tưởng này sau khi được biết mong ước của một vị chủ tịch của một
công ty buôn bán đồ ăn là làm sao để có thể tự động kiểm tra toàn bộ quy trình. Một
trong những ý tưởng đầu tiên của họ là sử dụng mã Morse để in những vạch rộng hay
hẹp thẳng đứng. Sau đó, họ chuyển sang sử dụng dạng "điểm đen" của mã vạch với
các vòng tròn đồng tâm. Họ đã gửi đến cơ quan quản lý sáng chế Mỹ ngày 20 tháng
10 năm 1949 công trình Classifying Apparatus and Method (Thiết bị và phương



22

pháp phân loại) để lấy bằng sáng chế. Bằng sáng chế đã được phát hành ngày 7 tháng
10 năm 1952.
Thiết bị đọc mã vạch đầu tiên được thiết kế và xây dựng bởi Woodland (khi đó
đang làm việc cho IBM) và Silver năm 1952. Nó bao gồm một đèn dây tóc 500 W và
một ống chân không nhân quang tử được sản xuất bởi RCA cho các phim có âm
thanh (nó để in theo phương pháp quang học lên trên phim). Thiết bị này đã không
được áp dụng trong thực tế: để có dòng điện đo được bằng các nghiệm dao động
(oscilloscope) thì đèn công suất 500 W gần như đã làm cháy giấy có mẫu mã vạch
đầu tiên của họ. Nó đã không được sản xuất đại trà. Năm 1962 họ bán sáng chế này
cho công ty Philips, sau đó Philips lại bán nó cho RCA. Phát minh ra tia laser năm
1960 đã làm cho các thiết bị đọc mã vạch trở nên rẻ tiền hơn, và sự phát triển của
mạch bán dẫn (IC) làm cho việc giải mã các tín hiệu thu được từ mã vạch có ý nghĩa
thực tiễn. Đáng tiếc là Silver đã chết năm 1963 ở 38 tuổi trước khi có bất kỳ những gì
thực tiễn thu được từ sáng chế này.
Năm 1972, cửa hàng Kroger ở Cincinnati thử nghiệm việc sử dụng đầu đọc mã
vạch điểm đen, với sự trợ giúp của RCA. Không may là các mã vạch điểm đen rất dễ
nhòe khi in, và thử nghiệm đã không thu được thành công nào đáng kể. Cùng thời
gian đó, Woodland ở IBM đã phát triển mã vạch tuyến tính được chấp nhận vào ngày
3 tháng 4 năm 1973 như là Mã sản phẩm chung (tiếng Anh: Universal Product Code,
hay UPC).
Mã vạch (và các thẻ khác mà máy có thể đọc được như RFID) được sử dụng ở
những nơi mà các đồ vật cần phải đánh số với các thông tin liên quan để các máy tính
có thể xử lý. Thay vì việc phải đánh một chuỗi dữ liệu vào phần nhập liệu của máy
tính thì người thao tác chỉ cần quét mã vạch cho thiết bị đọc mã vạch. Chúng cũng
làm việc tốt trong điều kiện tự động hóa hoàn toàn, chẳng hạn như trong luân chuyển
hành lý ở các sân bay.



23

Các dữ liệu chứa trong mã vạch thay đổi tùy theo ứng dụng. Trong trường hợp
đơn giản nhất là một chuỗi số định danh được sử dụng như là chỉ mục trong cơ sở dữ
liệu trong đó toàn bộ các thông tin khác được lưu trữ. Các mã EAN-13 và UPC tìm
thấy phổ biến trên hàng bán lẻ làm việc theo phương thức này.
Trong các trường hợp khác, mã vạch chứa toàn bộ thông tin về sản phẩm, mà
không cần cơ sở dữ liệu ngoài. Điều này dẫn tới việc phát triển mã vạch tượng trưng
mà có khả năng biểu diễn nhiều hơn là chỉ các số thập phân, có thể là bổ sung thêm
các ký tự hoa và thường của bảng chữ cái cho đến toàn bộ bảng mã ký tự ASCII và
nhiều hơn thế. Việc lưu trữ nhiều thông tin hơn đã dẫn đến việc phát triển của các ma
trận mã (một dạng của mã vạch 2D), trong đó không chứa các vạch mà là một lưới
các ô vuông. Các mã vạch cụm là trung gian giữa mã vạch 2D thực thụ và mã vạch
tuyến tính, và chúng được tạo ra bằng cách đặt các mã vạch tuyến tính truyền thống
trên các loại giấy hay các vật liệu có thể in mà cho phép có nhiều hàng.
2.1.4. Các phương thức biểu đạt tượng trưng. Việc chuyển đổi giữa thông tin của
thông điệp và mã vạch được gọi là biểu đạt tượng trưng. Các thông số trong quá
trình này được mã hóa từ các số/chữ đơn lẻ của thông điệp cũng như có thể có là
các dấu hiệu bắt đầu hay kết thúc thành các vạch và các khoảng trống, kích
thước của vùng lặng trước và sau mã vạch cũng như việc tính toán tổng kiểm
lỗi (checksum) là bắt buộc. Các quy trình biểu đạt tượng trưng tuyến tính có thể
phân loại chủ yếu theo hai thuộc tính liên tục hay rời rạc. Các ký tự trong biểu
đạt tượng trưng liên tục được tiếp giáp với nhau, với một ký tự kết thúc bằng
khoảng trống và ký tự tiếp theo bắt đầu bằng vạch, hoặc ngược lại. Các ký tự
trong biểu đạt tượng trưng rời rạc bắt đầu và kết thúc bằng vạch; không gian
giữa các ký tự bị bỏ qua, cho đến chừng nào mà nó đủ rộng để thiết bị đọc coi
như là mã kết thúc.
Hai hay nhiều độ rộng các vạch: Các vạch và các khoảng trống trong biểu đạt

tượng trưng hai độ rộng là rộng hay hẹp. Vạch rộng rộng bao nhiêu lần so với vạch


24

hẹp không có giá trị gì đáng kể trong việc nhận dạng ký tự (thông thường độ rộng của
vạch rộng bằng 2-3 lần vạch hẹp). Các vạch và khoảng trống trong biểu đạt tượng
trưng nhiều độ rộng là các bội số của độ rộng cơ bản gọi là modul; phần lớn các loại
mã vạch này sử dụng bốn độ rộng lần lượt bằng 1, 2, 3 và 4 modul.
Các mã vạch cụm chứa mã vạch tuyến tính cùng một loại nhưng được lặp lại
theo chiều đứng trong nhiều hàng.
Có nhiều chủng loại mã vạch 2D. Phần lớn là các ma trận mã, nó là tập hợp các
modul mẫu dạng điểm hay vuông phân bổ trên lưới mẫu. Các mã vạch 2D cũng có
thể có các dạng nhìn thấy khác nhau. Cùng với các mẫu vòng tròn đồng tâm, thì còn
một số mã vạch 2D có sử dụng kỹ thuật in ẩn (steganography) bằng cách ẩn mảng
các modul khác nhau về kích thước hay hình dạng trong các hình ảnh đặc thù riêng.
2.1.5. Lợi ích của việc áp dụng mã vạch trong sản xuất hàng hoá
- Góp phần bảo vệ thương hiệu thông qua nhãn mã vạch.
- Kiểm soát tiến độ sản xuất một cách trực tuyến (ngay lập tức).
- Tăng năng suất: Nhanh chóng nhập, xuất kho tính tiền, làm hóa đơn phục vụ
khách hàng.
- Tiết kiệm: Sử dụng ít nhân lực và tốn ít thời gian trong khâu kiểm kê, tính
toán bằng máy quét mã vạch.
- Chính xác: Nhờ mã vạch, người ta phân biệt chính xác các loại hàng hóa, mà
có khi bằng mắt thường ta thấy chúng rất giống nhau, tránh nhầm lẫn, khi tính giá,
phục vụ khách hàng tốt hơn.
- Thuận tiện trong việc thực hiện các dịch vụ sau bán hàng: Chăm sóc khách
hàng, giải quyết phàn nàn, khiếu nại, bảo hành sản phẩm.
- Việc sử dụng mã vạch cho sản phẩm còn góp phần nâng cao hình ảnh sản
phẩm trong nhận thức của khách hàng.

Sử dụng mã vạch trong sản xuất, kinh doanh là một xu hướng tất yếu trong nền
sản xuất công nghiệp, nhất là đối với các doanh nghiệp Việt Nam hiện nay trên con


25

đường hội nhập quốc tế và xâm nhập thị trường thế giới, đặc biệt mã vạch rất cần
thiết cho các doanh nghiệp sản xuất hàng xuất khẩu.
2.1.6. Đọc mã vạch
Để đọc được các ký hiệu mã vạch người ta dùng một loại thiết bị gọi là máy
quét mã vạch (barcode scanner), thực chất chính là một loại đầu đọc quang học dùng
chùm tia sáng hoặc tia laser. Khi nhìn vào một ký hiệu mã vạch trên một món hàng,
có khi ta thấy 1 dãy số nằm ngay bên dưới ký hiệu mã vạch đó nhưng cũng có khi
không có gì cả. Dãy số này chính là mã số mà ký hiệu mã vạch đã mã hoá. Vấn đề có
mã số hay không có mã số là do phần mềm in mã vạch tạo ra giúp cho con người có
thể nhận dạng được bằng mắt thường, nó chỉ quan trọng đối với con người chứ không
quan trọng đối với máy vì máy không hiểu được các con số này mà chỉ có thể đọc
được chính bản thân các ký hiệu mã vạch. Do đó, để máy quét có thể đọc được mã
vạch tốt thì khi in ra, ký hiệu mã vạch phải rõ ràng, không mất nét, các vạch phải
thẳng đứng không biến dạng.
Mã vạch sau khi quét sẽ được giải mã bằng 1 phần mềm để cho ra mã số ban
đầu. Tùy theo công nghệ đang dùng và tùy theo loại máy quét, máy đọc mà phần
mềm giải mã có thể là 1 phần mềm dưới dạng Firmware nằm ngay trong máy quét và
có thể được hiển thị bằng các file văn bản thông thường như Notepad, Wordpad, hay
là 1 phần mềm chuyên dụng kèm theo thiết bị hoặc do người sử dụng viết chương
trình ứng dụng


×