2009-08-30 70 views
22

Bir Rubik küpünü çözmek için Java'da kod yazmak için nispeten kolay bir algoritma ne olurdu. Verimlilik ayrıca önemlidir, ancak ikincil bir değerlendirme.Rubik küpü için en kolay kod algoritması?

+0

Soru yanlış bir şekilde ifade edilmiş ve "doğru" oyu verilen soru aslında doğru cevap değildir. Bu, "kod için en kolay algoritmanın" neden istediğinizi gösteremeyeceğini gösterir --- program asla bitmeyebilir. Ve neden verimlilikle ilgilenmeniz gerektiğini gösteriyor. – vy32

+0

Soyuldum * ağrılar *: p – Rushyo

+0

Sadece 'En kolay algoritma, hayatımızdaki sonuçları veren koddur' :-) –

cevap

12

3x3x3 Rubik küpü çözmeye bir algoritma grafik temsilini içeriyor:

Kodlama çok zor görünmüyor. Yannick M.'s answer'da belirtilen bağlantı da iyi görünüyor, ancak ' the cross' adımının çözümü bana biraz daha karmaşık gelebilir.

Göz atmak isteyebileceğiniz bir dizi açık kaynak çözücü uygulaması vardır. İşte bir Python implementation. Bu Java applet da bir çözücü içerir ve kaynak kodu kullanılabilir. Ayrıca indirilebilir kaynak kodu ile Javascript solver da var. Bu görev için Prolog'un uygunluğu hakkında mükemmel bir noktaya

Anthony Gatlin's answer. İşte kendi Prolog solver'u nasıl yazacağınız hakkında ayrıntılı bir yazı var. Kullandığı sezgisel özellikle ilginç.

+2

bağlantı bozuk gibi görünüyor. –

49

Doğru çözümü alana kadar rastgele işlemler gerçekleştirin. En kolay algoritma ve en az verimli.

+38

Hahaha'nın 4.33 * 10^19 permütasyonları ile çok az etkilidir. :-) –

+5

+1 matematik yapmak için;) – Rushyo

+1

@ Rushyo lol iyi oynadı sir @Yannick permütasyonları nasıl hesapladığınızı açıklayabilir misiniz lütfen? – kokokok

3

Sorunun Java ile ilgili olduğunu biliyorum, ancak pratik bir notta, Prolog gibi diller Rubik küpünü çözmek gibi çok daha uygun problemlerdir. Bunun muhtemelen bir sınıf için olduğunu ve aletin seçimine ilişkin bir avantajınız olmadığını varsayalım.

+0

doğru, maalesef sınıf için Prolog'u hatırlattığım için Java – kokokok

+0

+1'de yapmam gerekiyor. ;) –

+1

Mmmmm, prolog kullanımı. – Rushyo

0

Bunu BFS (Breadth-First-Search) yaparak yapabilirsiniz. Uygulamanın o kadar da zor olmadığını düşünüyorum (Grafik kategorisinde en basit algoritmalardan biridir). Kuyruk adı verilen veri yapısıyla yaptığınız şey, gerçekten üzerinde çalışacağınız bir BFS ağacı oluşturmak ve verilen durumdan arzu durumuna kadar en kısa yoldan bir yol bulmaktır. Bu algoritmanın dezavantajı yeterince verimli olmamasıdır (herhangi bir modifikasyon olmadan, 2x2x2 küplük bir çözücünün çözülmesi için gereken süre ~ 5 dakikadır). Ama hızı artırmak için her zaman bazı hileler bulabilirsiniz.

Dürüst olmak gerekirse, MIT'den "Introduction of Algorithm" adlı dersin ödevlerinden biridir. İşte ödevin linki: http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/assignments/MIT6_006F11_ps6.pdf. Görselleştirmenize ve gereksiz çabalardan kaçınmanıza yardımcı olacak birkaç kütüphaneye sahipler.

İlgili konular