Gần đây tôi đã chơi bản phát hành lại Hành trình logic của Zoombinis và cố gắng thực hiện một số thuật toán máy tính có thể giải các câu đố khác nhau. Tôi bế tắc về cách tiếp cận câu đố trên phà của Thuyền trưởng Cajun.
Đối với những người không quen thuộc, Zoombini là một sinh vật có 4 thuộc tính: tóc, mắt, mũi và chân. Mỗi thuộc tính đó có 5 giá trị có thể; ví dụ, chân của Zoombini có thể là bánh xe, giày trượt patin, giày thể thao, lò xo hoặc chân vịt. Đây là một ví dụ về Zoombini với mái tóc rối bù, kính, mũi xanh và giày thể thao:
Trong câu đố trên phà, nhiệm vụ là sắp xếp một bộ sưu tập 16 Zoombinis trên 16 chỗ ngồi của một chiếc phà. Việc sắp xếp phải tuân theo quy tắc rằng bất kỳ hai ghế lân cận trực giao nào đều phải được chiếm bởi Zoombinis có chung ít nhất một tính năng. Nếu hai Zoombin có mái tóc khác nhau, đôi mắt khác nhau, mũi khác nhau và đôi chân khác nhau, chúng có thể không ngồi cạnh nhau.
Việc sắp xếp chỗ ngồi thay đổi theo cấp độ; để cụ thể hóa, hãy tập trung vào mức độ "Rất cứng", trong đó 16 chỗ ngồi được sắp xếp theo dạng lưới 4 nhân 4. Dưới đây là một ví dụ về việc 15 Zoombin đã được ngồi hợp pháp, nhưng Zoombini cuối cùng đứng trên dock không thể được đặt ở ghế trống cuối cùng, bởi vì cô ấy sẽ không chia sẻ tính năng nào với Zoombini ở bên phải:
Có 16! 21 nghìn tỷ nhiệm vụ có thể của Zoombinis cho ghế ngồi. Vì vậy, chỉ cần chạy qua mọi nhiệm vụ có thể để xem nếu nó hợp pháp sẽ không thực tế. Một số heuristic tôi có thể sử dụng để tiếp cận vấn đề này hợp lý là gì?
Subgraph Isomorphism Problem
. Vấn đề là tìm một biểu đồ trong một biểu đồ khác. Trong trường hợp của bạn, sơ đồ con sẽ là chỗ ngồi (các cạnh là kề), trong khi biểu đồ mẹ sẽ là zoombinis, trong đó các kết nối sẽ là sự hiện diện của một đặc điểm chung. Lưu ý rằng nói chung, vấn đề là NP-đầy đủ và thường được thực hiện bằng cách quay lại, tuy nhiên đối với một số trường hợp đặc biệt (trong đó biểu đồ của bạn rất có thể), các giải pháp đa thức hoặc thậm chí tuyến tính là có thể.