Các câu hỏi phỏng vấn [25]

  1. Ta có n mẫu máu. Mỗi mẫu máu thuộc về một trong m nhóm máu. (Ta không biết chính xác m là bao nhiêu, và m không nhất thiết phải là hằng số.) Có một thiết bị mà nếu bỏ vào đó hai giọt máu từ hai mẫu máu khác nhau thì thiết bị sẽ cho biết hai mẫu máu có cùng nhóm máu hay không. Nếu bỏ vào thiết bị này hơn hai giọt máu thì câu trả lời không đáng tin cậy nữa.

    Ta muốn trả lời câu hỏi sau đây: có hay không hơn n/2 mẫu máu thuộc về cùng một nhóm máu. Dùng thiết bị trên để thử, làm thế nào để trả lời câu hỏi này với tổng số ít nhất các phép thử? (Chỉ cần ít nhất về mặt asymptotic là được.) Ví dụ: cách dễ nhất là thử tất cả các cặp mẫu máu nhưng như vậy cần dùng đến \Theta(n^2) phép thử.

    Ngoài ra, ta cũng giả sử rằng mỗi mẫu máu có khá nhiều giọt.

Chủ đề : Dành cho du học sinh, Vui - Giải Trí. Bookmark the permalink. Trackbacks are closed, but you can post a comment.

6 Comments

  1. uyvu
    Posted 01/03/2007 at 7:38 pm | Permalink

    Số lần thử tối đa: [(n+1)/2]*[(n+1)/2]

  2. Posted 02/03/2007 at 4:54 am | Permalink

    [(n+1)/2]*[(n+1)/2] thì vẫn là

    \Theta(n^2)

    thôi.

  3. Posted 02/03/2007 at 6:55 am | Permalink

    Em nghi la can O(n/2) phep thu.

  4. Posted 02/03/2007 at 11:14 am | Permalink

    Hi Nguyên:

    \Theta(n)

    có thể làm được, hơi mẹo một chút.

  5. trang2
    Posted 05/03/2007 at 1:47 pm | Permalink

    Ta chia bài toán thành 2 bước, bước 1 là thử tìm mẫu máu duy nhất “có thể” xuất hiện hơn n/2 lần trong dãy, bước 2 đơn giản chỉ là kiểm tra xem mẫu đó có thực sự xuất hiện > n/2 lần ko ?
    Bước 1:
    Chia n mẫu ban đầu thành n/2 cặp, rồi so sánh các cặp với nhau. Cặp nào ko giống nhau thì loại ra luôn, ko xét nữa, chỉ xét những cặp giống nhau thôi.
    Trong trường hợp ko có cặp giống nhau nào thì có thế kết luận là ko thể có > n/2 mẫu giống nhau đc.
    Trong trường hợp tìm được k>0 cặp giống nhau, thì nếu thực sự có > n/2 mẫu giống nhau, thì có hơn k/2 cặp giống nhau là mẫu đó. Do đó ta có thể thu nhỏ bài toàn về tìm xem trong k cặp, có hơn k/2 cặp có cùng mẫu máu ko ? Tiếp tục tìm đến khi còn 1 cặp thì dừng. Trả về mẫu máu duy nhất còn lại.
    Bước 2:
    Dựa vào mẫu máu kết quả của bước 1, dùng n bước thử để kiểm tra xem nó có xuất hiện đúng n/2 lần ko ?.

    Độ phức tạp của bước 1 là O(n) vì sau mỗi lần chia cặp + thử, k bài toán là O(n)

  6. Posted 05/03/2007 at 6:40 pm | Permalink

    Trang2: nice solution!

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>