Tên của bài toán làm tròn số đếm ngược - và giải pháp thuật toán?


10

Đối với những người không phải là Brits trong khán giả, có một phân đoạn của một game show ban ngày, nơi các thí sinh có một bộ gồm 6 số và một số mục tiêu được tạo ngẫu nhiên. Họ phải đạt được số mục tiêu bằng cách sử dụng bất kỳ (nhưng không nhất thiết là tất cả) trong số 6 số chỉ sử dụng các toán tử số học. Tất cả các tính toán phải dẫn đến số nguyên dương.

Một ví dụ: Youtube: Countdown - Trò chơi số phi thường nhất từ ​​trước đến nay?

Một mô tả chi tiết được đưa ra trên Wikipedia: Countdown (Game Show)

Ví dụ:

  • Nội dung chọn 6 số - hai số lớn (các khả năng bao gồm 25, 50, 75, 100) và bốn số nhỏ (số 1 .. 10, mỗi số được bao gồm hai lần trong nhóm).
  • Những con số nhặt được 75, 50, 2, 3, 8, 7được cung cấp với một số mục tiêu của 812.
  • Một lần thử là (75 + 50 - 8) * 7 - (3 * 2) = 813 (Điểm này đạt 7 điểm cho một giải pháp trong vòng 5 mục tiêu)
  • Một câu trả lời chính xác sẽ là (50 + 8) * 7 * 2 = 812 (Điều này sẽ ghi được 10 điểm chính xác phù hợp với mục tiêu).

Rõ ràng vấn đề này đã tồn tại trước khi TV ra đời, nhưng bài viết trên Wikipedia không đặt tên cho nó. Tôi cũng đã xem trò chơi này tại một trường tiểu học mà tôi đã tham dự, nơi trò chơi được gọi là "Tiền điện tử" là một cuộc thi giữa các lớp - nhưng việc tìm kiếm nó bây giờ không cho thấy gì.

Tôi đã tham gia vào nó một vài lần và cha tôi đã viết một bảng tính Excel cố gắng khắc phục sự cố, tôi không nhớ nó đã hoạt động như thế nào (chỉ là nó không hoạt động, với giới hạn hàng 65535 của Excel), nhưng chắc chắn phải có một giải pháp thuật toán cho vấn đề này. Có thể có một giải pháp hoạt động theo cách nhận thức của con người (ví dụ: song song để tìm các số 'đủ gần', sau đó lấy các ứng cử viên và thực hiện các hoạt động 'nhỏ hơn').


1
Tôi đã giải quyết bằng đồ họa này - sử dụng các nút để biểu thị kết quả tính toán và các cạnh để biểu diễn các hoạt động có thể được thực hiện trên các số đó, sau đó sử dụng thuật toán tìm kiếm biểu đồ để tìm đường dẫn mong muốn
ell

1
Từ việc đọc các quy tắc, dường như có thể không đạt được một giải pháp hoàn hảo - ví dụ nếu các số được chọn là (1, 1, 2, 2, 3, 3) và số mục tiêu là 999. Thật vậy mục tiêu cho bất kỳ thuật toán nào sẽ là tìm giải pháp gần nhất có thể.
Rich Smith

1
@ell: Giải pháp tìm kiếm đồ thị của bạn về cơ bản là một tìm kiếm vũ phu?
Martin

Tôi chỉ sử dụng một tìm kiếm sâu đầu tiên trong triển khai của mình, nhưng tôi không hiểu tại sao một thứ như Dijkstra không thể được sử dụng.
ell

1
Chúng tôi có một số chương trình tương tự ở Hoa Kỳ: chúng tôi gắn bó khoảng 6 tên ngốc biết chữ trong một ngôi nhà trong vài tuần và quay phim họ nói về nhau và la hét với nhau. Đó là khoảng cách gần như TV của chúng ta đạt được điều gì đó trí tuệ này trong các chương trình nổi tiếng.
RBarryYoung

Câu trả lời:


4

Disclaimer: Câu trả lời này không trả lời hoàn toàn câu hỏi đó. Nhưng nó quá dài cho một bình luận.

NP-cứng? Tôi tin rằng, vấn đề này có thể là NP-hard .

Hãy xem xét một trường hợp đặc biệt của vấn đề Knapsack :

Cho một tập hợp các số nguyên dương và một số nguyên dương b , có tồn tại một tập hợp con của tập hợp sao cho tổng của tất cả các số nguyên trong tập hợp con đó bằng b ?

Điều này nghe có vẻ giống với vấn đề Đếm ngược của chúng tôi, và nó có vẻ đơn giản hơn nhiều. Tuy nhiên, Knapsack (và trường hợp đặc biệt này của Knapsack) là NP-hard (và tất nhiên là NP-đầy đủ).

Tôi đã không quản lý để sử dụng điều này cho một bằng chứng rằng Countdown là NP-hard. Tôi không thể thoát khỏi sự phân chia. Hãy xem xét chúng tôi có một nghìn 2 và b = 7. Điều này sẽ không bao giờ có thể giải quyết được với Knapsack, nhưng luôn luôn (?) Với Countdown, ít nhất là trong tất cả các cách tôi đã cố gắng chuyển vấn đề.

Bây giờ, nếu Countdown thực sự NP-hard, chúng ta có thể suy luận rằng ở đó với xác suất rất cao là không có thuật toán nào hiệu quả hơn đáng kể so với vũ phu thử mọi khả năng. (Và nếu chúng ta nên tìm một thuật toán như vậy, chúng ta sẽ trở nên rất nổi tiếng.)

Không, tôi không nghĩ phải có một thuật toán hiệu quả.

Heuristic. Video Youtube được liên kết trong câu hỏi có một ví dụ rất hay: Thí sinh tìm thấy câu trả lời chính xác 952 = ((100 + 6) * 3 * 75 - 50) / 25. Điều đó hoàn toàn trái với trực giác của tôi, tôi sẽ không bao giờ thử nó cách trong lần đầu tiên: Tạo ra một số lượng rất lớn, sau đó chia nó và mang lại kết quả.

Mặt khác, con người chúng ta cảm thấy rằng chúng ta không cần phải thử (ví dụ tùy ý) 50 * 75 * 100/2/3/7 để đạt được một số có ba chữ số. Nhưng máy tính không cảm thấy gì, chúng tính toán đơn giản.

Rốt cuộc, nếu chúng ta thực hiện một số phương pháp phỏng đoán và phương pháp phỏng đoán này không tìm ra giải pháp chính xác, chúng ta vẫn sẽ phải thử tất cả các giải pháp khác để đảm bảo thực sự không có giải pháp nào.

Những gì thí sinh trong video Youtube làm, tôi nghĩ, để nhanh chóng kiểm tra một số lượng lớn các khả năng và nhanh chóng loại bỏ những thứ không (hoặc có thể sẽ không) đưa ra giải pháp.

Phần kết luận. Khi thực hiện một thuật toán, người ta có thể cẩn thận loại bỏ các phép tính bằng nhau như a / b / c = a / (b * c), nhưng tôi nghĩ điều này khá khó thực hiện và tôi không biết liệu điều này có cải thiện đáng kể thời gian chạy hay không.

Máy tính tất nhiên là nhanh hơn con người trong việc kiểm tra một số lượng lớn các khả năng. Và ngày nay, ngay cả điện thoại thông minh nhanh đến mức họ có thể giải quyết vấn đề này, tôi nghĩ, trong vòng một giây chỉ bằng cách thử tất cả các khả năng. (Tôi đã không kiểm tra điều này.) Chỉ có sáu số, nó sẽ khác nếu có ví dụ 60 số.


Mặc dù vậy, giải pháp cho ví dụ, cực kỳ ấn tượng, không phức tạp như lần đầu tiên xuất hiện. Quá trình suy nghĩ của anh ta, trừ đi những thứ rõ ràng hơn mà anh ta có thể đã thử, có khả năng là "Tôi có thể đến 954 bằng cách sử dụng (100 + 6) * 9, mà tôi có thể thực hiện thông qua (100 + 6) * 3 * 75/25. Tôi có 50 trái và 50/25 là hai, vì vậy tôi có thể tắt 50 (100 + 6) * 3 * 75 trước khi chia cho 25 ".
Tim Down

1

Một thuật toán không thực sự rất khó.

Cho hai số a và b, chúng ta có thể tạo ra kết quả a + b, abs (a - b) (Tôi không biết nếu số âm được cho phép, trong trường hợp đó chúng ta có thể tạo ra a - b và a + b), a * b, và có thể a / b hoặc b / a nếu kết quả là một số nguyên. Vì vậy, kết quả có thể là một tập hợp tối đa năm số. Gọi bộ này là S (a, b).

Lấy sáu số a, b, c, d, e và f.

Đối với mỗi tập hợp con của hai số, tìm số chúng có thể tạo ra.

Sau đó, với mỗi tập hợp con của ba số, hãy tìm các số chúng có thể tạo ra: S (a, b, c) = S (S (a, b), c) union S (S (a, c), b) union S ( S (b, c), a).

Sau đó, tương tự cho mỗi tập hợp con gồm 4 hoặc 5 số, sau đó cho tất cả 6 số.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.