Bạn Huân hỏi về một bài toán đố cổ điển: bài toán cân xu tìm xu giả. Phiên bản thường nghe là như thế này: cho 12 đồng xu trong đó có 1 đồng xu giả (không biết nặng hay nhẹ hơn các đồng khác) và một cái cân thăng bằng, cân 3 lần tìm đồng xu giả.
Có rất nhiều biến thể (tổng quát) của bài toán này. Xem bài báo này chẳng hạn. Cho đồng xu,
cái cân,
đồng xu giả, có thể biết hoặc không biết trước là nặng hay nhẹ hơn các đồng thật; phép thiết kế chiến lược cân có được “adaptive” hay không, vân vân. Thật ra câu này hỏi bác Văn là thích hợp nhất. Bác Văn có mấy bài báo rất thú vị về các biến thể tổng quát của bài toán cân xu.
Trong khuôn khổ bài viết này, ta chỉ xét một biến thể cổ điển sau:
(Một phiên bản của bài toán tìm xu giả) Cho
đồng xu,
đồng giả không biết nặng hay nhẹ hơn các đồng thật thế nào, và một cái cân. Tìm số lần cân
ít nhất để chỉ ra đồng giả (nếu có) và chỉ ra luôn là nó nặng hay nhẹ hơn các đồng thật.
Câu hỏi này thật ra có hai phần: phần 1 là tìm một chiến lược chỉ ra đồng giả dùng lần cân, và phần 2 là chứng minh rằng
lần cân thì không đủ để chỉ ra đồng giả. Ta sẽ tìm liên hệ giữa
và
. Phần 2 thú vị hơn phần 1, nhưng về cơ bản cũng là chặn thông tin. Do việc tìm chặn thông tin là kỹ thuật rất phổ biến trong thuật toán và lý thuyết tính toán, chúng ta sẽ duyệt qua cả hai phần.
1. Chiến lược cân
Chiến lược này chỉ là phép “chia-để-trị” (divide-and-conquer). Có lẽ là ai nghĩ một lúc rồi thì cũng ra. Bắt đầu từ trường hợp nhỏ, từ
đến khoảng
là thấy rõ chiến lược ngay. Đại khái, chiến lược cũng giống như trong lời giải cho
: chia xu làm ba nhóm gần đều nhau, nếu cân cân bằng thì qui nạp cho nhóm nằm ngoài. Nếu cân không cân bằng thì nhóm nằm ngoài chứa toàn xu tốt, và ta có thể dùng chúng để so sánh với các xu ở trong. Bằng cách hoán đổi một số xu ở trong với nhau, ta lại có thể áp dụng qui nạp lần nữa. Thử với các giá trị
nhỏ, ta dễ dàng “conjecture” định lý sau đây:
Định lý: với
lần cân thì ta có thể chỉ ra xu giả (nếu có) trong
xu nếu
Ngoài ra, ta cũng biết luôn là xu giả nhẹ hay nặng hơn các xu thật.
Chứng minh. Có thể giả sử , và
. Tại vì nếu
thì giả thiết qui nạp cho ta biết
lần cân là xong. Ta chia đống xu thành ba nhóm. Hai nhóm đặt lên hai đĩa cân mỗi nhóm có kích thước bằng
. (Nếu
thì định nghĩa
.) Con số
này được chọn để cho chúng ta có thể áp dụng giả thiết qui nạp trên mỗi nhóm. Nhóm nằm ngoài cân có
xu. Dễ thấy rằng
Nếu cân thăng bằng thì ta áp dụng giả thiết qui nạp cho nhóm nằm ngoài. Xong!
Nếu cân không thăng bằng thì bây giờ ta có hai nhóm xu: nhóm đen là nhóm bên nặng hơn có xu, nhóm trắng là nhóm bên nhẹ hơn có
xu. Nhớ rằng
. Ngoài ra, chúng ta còn có ít nhất một đồng xu thật ở ngoài để làm “neo”. Ta chứng minh kết quả tổng quát hơn sau đây, và bổ đề này sẽ hoàn tất chứng minh định lý trên.
Bổ đề. Giả sử ta có hai nhóm xu, nhóm thứ nhất gọi là “nhóm đen” có
xu và có thể bao gồm một xu giả nặng hơn xu thật. Nhóm thứ hai gọi là “nhóm trắng” có
xu và có thể bao gồm một đồng xu giả nhẹ hơn xu thật. Ngoài ra ta còn có một xu thật làm “neo” ở ngoài hai nhóm. Ta biết rằng chỉ có một xu giả trong cả hai nhóm, và
. Ta có thể cân
lần để chỉ ra xu giả.
Chứng minh. Lại qui nạp. Thứ nhất, nếu hoặc
thì chứng minh bài toán không khó gì. Đây là trường hợp đặc biệt của bài toán tìm xu giả khi mà ta biết là xu giả nặng hơn hoặc nhẹ hơn xu thật. (Bài tập.) Do đó có thể giả sử
. Các trường hợp
cũng tầm thường, nên ta giả sử
.
Nếu thì ta áp dụng giả thiết qui nạp.
Xét . Đặt
. Khi đó ta có
Đặt lên hai đĩa, mỗi đia xu, sao cho số xu đen trên hai đĩa bằng nhau và số xu trắng trên hai đĩa bằng nhau. (Bài tập tại sao luôn làm được điều này?)
Nếu cân thăng bằng thi áp dụng giả thiết qui nạp cho đám xu nằm ngoài cân.
Giả sử bên trái nhẹ hơn thì xu giả nằm trong đám xu trắng bên trái hoặc trong đám xu đen bên phải. Áp dụng qui nạp. Xong!
2. Chặn thông tin
Ta chứng minh rằng, nếu lần cân là đủ thì
. Mỗi một lần cân cho ra một trong ba kết quả: đĩa trái nặng hơn, đĩa phải nặng hơn, hoặc nặng bằng nhau. Có tất cả
lần cân; vì thế, tổng số kết quả có thể có là
. Tổng số chọn lựa trạng thái mà ta cần xác định là
(mỗi xu đều có thể giả, và nặng hoặc nhẹ hơn xu thật, hoặc không có xu giả nào). Do đó,
. Cái chặn này còn yếu một xíu, nhưng nó cho ta thấy ý tưởng chính.
Bây giờ giả sử lần cân thứ nhất có xu trên mỗi đĩa cân. Nếu cân thăng bằng thì trong
lần cân còn lại ta cần phân biệt
trạng thái. Do đó
. Nếu cân không thăng bằng thì nhóm ngoài là nhóm xu thật, ta cần phân biệt
trạng thái vì nhóm trong có xu giả. Do đó
. Nhưng
là chẵn nên
. Ta kết luận rằng

6 Comments
Cảm ơn anh đã để ý đến câu hỏi của em, em rất thích bài viết này!
Hiện tại em đang tìm hiểu về nhận dạng, em không chắc là anh Hưng có nghiên cứu về lĩnh vực này hay không, em muốn tham khảo một vài bài viết và cũng có nhiều vấn đề chưa hiểu thấu. Nếu anh Hưng có biết ai làm về nhận dạng thì giới thiệu giúp em với! Bài toán hiện tại của em là “Nhận dạng đối tượng chuyển động.” Vì đang là sinh viên năm thứ 3 nên em cũng chỉ dừng lại ở mức của sinh viên thôi, tuy nhiên ngang đó em đã thấy đủ thứ để làm!
Định lý giới hạn số lần cân so với số quả cân chưa chính xác.
Ví dụ với w = 2; Theo định lý thì số quả cân là n<= 3
Nhưng với 4 đồng xu có thể chỉ ra xu giả trong 2 lần cân, cụ thể
Cân 2 đồng trước
Nếu bằng nhau: Hai đồng trên cân là thật lấy một đồng ra và cân với một trong hai đồng chưa cân còn lại
Nếu bằng: đồng chưa cân là giả
Không bằng: đồng đem lên cân là giả
Lệch nhau: Một trong hai đồng đem cân là giả, 2 đồng chưa cân là thật, đem một đồng thật lên cân với một trong hai đồng ban đầu ta định được đồng giả
@pandar: nhung nhu the ta khong co biet xu gia nang hay nhe. Nhu vay, cai theorem do van dung.
Nếu
hoặc
, gọi số xu là
giả sử
(nếu nhỏ hơn hoặc bằng thì càng dễ), chia xu làm 3 phần, trong đó 2 phần bằng
xu, đặt 2 phần này lên cân. Nếu cân thăng bằng thì xu giả nằm bên ngoài, số lượng xu bên ngoài nhỏ hơn hoặc bằng
, nếu cân không thăng bằng, ta còn lại
xu vì đã biết xu giả nặng hơn hay nhẹ hơn xu thật.
sẽ giảm xuống
và không quá
bước ta sẽ tìm ra xu thật!
Lặp lại bước trên, sau mỗi bước từ chỗ
Theo như phương pháp mà anh Hưng chỉ ra thì với phiên bản 12 xu em sẽ giải như thế này:
Chia 12 đồng xu thành 3 phần 4 – 4 – 4.
1. Lần cân đầu tiên đưa 2 phần lên cân với nhau,
* Trường hợp cân thăng bằng ta xác định được 8 đồng xu thật, còn 4 đồng xu chưa rõ có thể dễ dàng xác định bằng 2 lần cân còn lại.
* Trường hợp cân bị lệch, gọi
là 4 đồng xu bên nặng,
là 4 đồng xu bên nhẹ sau đó đặt các xu
cân với
. Nếu cân thăng bằng ta có 1 trong 2 xu
và
là giả, tiến hành lần cuối cùng ta tìm ra được xu giả. Trường hợp cân bị lệch, nếu
như vậy đồng xu giả sẽ nằm trong
hoặc
. Tại sao? vì
thuộc phần nặng trong lần cân đầu tiên, bây giờ lại thuộc phần nhẹ cho nên không thể là xu giả, xu
cũng tương tự như vậy. Như vậy, với 1 lần cân còn lại có thể dễ dàng xác định
hay
là xu giả. Lập luận tương tự với trường hợp
. Ở đây
và số xu trắng trên mỗi đĩa là bằng 1 hoặc 2, thế nào cũng được!
Không biết anh Hưng đã đọc tin này chưa ạ:
http://www.newscientist.com/article/dn19287-p–np-its-bad-news-for-the-power-of-computing.html
Em có trích và post câu hỏi cả trên Phdvn:
http://phdvn.org/computer-science/1604-p-np-its-bad-news-power-computing.html#post15224
Chào Xuân, chứng minh của Deolalikar 99 phần trăm là sai. Bạn xem các phát triển về chủ đề này ở đây.