2009-08-30 30 views
22

Điều gì sẽ là một thuật toán tương đối dễ dàng để mã trong Java để giải quyết khối lập phương của Rubik. Hiệu quả cũng rất quan trọng nhưng là một sự cân nhắc thứ cấp.Thuật toán mã dễ nhất cho khối lập phương của Rubik?

+0

Câu hỏi không đúng ngữ pháp và câu hỏi được bình chọn là "đúng" không, trên thực tế, câu trả lời đúng. Điều này cho thấy lý do tại sao "thuật toán dễ dàng nhất để mã" có thể không phải là những gì bạn muốn --- chương trình có thể không bao giờ kết thúc. Và nó cho thấy lý do tại sao bạn cần phải quan tâm đến hiệu quả. – vy32

+0

Tôi đã bị cướp * khóc *: p – Rushyo

+0

Bạn chỉ có thể thuật lại, 'Thuật toán mã đơn giản nhất cho kết quả trong cuộc đời của chúng ta' :-) –

Trả lời

12

Cách đơn giản nhất không tầm thường thuật toán tôi đã tìm thấy là cái này:

http://www.chessandpoker.com/rubiks-cube-solution.html

Không quá khó để mã hóa. Liên kết được đề cập trong Yannick M.'s answer cũng có vẻ tốt, nhưng giải pháp của bước 'the cross' có vẻ như nó có thể phức tạp hơn một chút đối với tôi.

Có một số triển khai trình giải mã nguồn mở mà bạn có thể muốn xem. Đây là Python implementation. Điều này Java applet cũng bao gồm một người giải quyết, và mã nguồn có sẵn. Ngoài ra còn có một Javascript solver, cũng với mã nguồn có thể tải xuống.

Anthony Gatlin's answer tạo nên một điểm tuyệt vời về tính phù hợp của Prolog đối với tác vụ này. Đây là một bài viết chi tiết về cách viết Prolog solver của riêng bạn. Các heuristics nó sử dụng là đặc biệt thú vị.

+2

liên kết đến trình giải mã JS dường như bị hỏng. –

49

Thực hiện các thao tác ngẫu nhiên cho đến khi bạn nhận được giải pháp phù hợp. Thuật toán đơn giản nhất và hiệu quả nhất.

+38

Hahaha với 4.33 * 10^19 hoán vị là rất hiệu quả nhất :-) –

+5

+1 để thực hiện các phép toán;) – Rushyo

+1

@ Rushyo lol cũng chơi sir @Yannick bạn có thể giải thích cách bạn tính toán hoán vị không? – kokokok

3

Tôi hiểu câu hỏi của bạn có liên quan đến Java, nhưng trên một lưu ý thực tế, các ngôn ngữ như Prolog là các vấn đề phù hợp hơn nhiều như giải quyết khối lập phương Rubik. Tôi cho rằng điều này có lẽ là cho một lớp học mặc dù và bạn có thể không có mất nhiều thời gian như sự lựa chọn của công cụ.

+0

đúng, thật không may cho lớp tôi phải làm điều đó trong Java – kokokok

+0

+1 để nhắc tôi về Prolog. ;) –

+1

Mmmmm, sử dụng cho prolog. – Rushyo

0

Bạn có thể làm điều đó bằng cách thực hiện BFS (Chiều rộng đầu tiên). Tôi nghĩ rằng việc thực hiện không phải là khó khăn (Nó là một trong những thuật toán đơn giản nhất theo thể loại của đồ thị). Bằng cách thực hiện nó với cấu trúc dữ liệu được gọi là hàng đợi, những gì bạn thực sự sẽ làm là xây dựng một cây BFS và tìm một đường đi ngắn nhất được gọi là từ điều kiện đã cho tới điều kiện mong muốn. Hạn chế của thuật toán này là nó không đủ hiệu quả (Không có bất kỳ sửa đổi nào, ngay cả khi giải quyết một khối 2x2x2 lượng thời gian cần thiết là ~ 5 phút). Nhưng bạn luôn có thể tìm thấy một số thủ thuật để tăng tốc độ.

Thành thật mà nói, đây là một trong những bài tập về nhà của khóa học có tên "Introduction of Algorithm" từ MIT. Đây là liên kết của bài tập về nhà: http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/assignments/MIT6_006F11_ps6.pdf. Họ có một vài thư viện để giúp bạn hình dung nó và giúp bạn tránh được những nỗ lực không cần thiết.

Các vấn đề liên quan