Tantangan ini adalah untuk menghitung urutan penggandaan yang paling efisien untuk produk dari beberapa matriks.
Ukuran matriks ditentukan pada satu baris input standar. Anda harus mencetak ke output standar daftar bilangan bulat yang menunjukkan urutan untuk melakukan perkalian untuk meminimalkan total biaya perkalian.
Contoh 1
memasukkan
5x6 6x12 12x100 100x7
keluaran
3 2 1
Baris input akan menjadi daftar ukuran matriks yang dipisahkan oleh ruang, yang masing-masing adalah jumlah baris, diikuti oleh x
, diikuti oleh jumlah kolom. Sebagai contoh, ada 4 matriks untuk dikalikan bersama (jadi 3 total perkalian), dan karena perkalian matriks adalah asosiatif mereka dapat dilakukan dalam urutan apa pun.
Keluaran harus berupa urutan untuk melakukan perkalian guna meminimalkan total biaya. Ini harus berupa daftar bilangan bulat yang dipisahkan spasi yang mewakili indeks perkalian untuk dilakukan selanjutnya. Untuk matriks N, daftar ini harus berisi angka 1 hingga N-1, inklusif. Misalnya 1, output 3 2 1
berarti Anda harus melakukan 12x100 * 100x7
perkalian terlebih dahulu, lalu 6x12 * 12x7
perkalian (matriks kedua kali hasil dari langkah sebelumnya), kemudian akhirnya hasil 5x6 * 6x7
perkalian.
Penggandaan matriks akan selalu kompatibel, yaitu jumlah kolom dari suatu matriks akan cocok dengan jumlah baris dari matriks berikutnya. Anggap biaya mengalikan dua matriks AxB * BxC
adalah A*B*C
.
Kode Anda harus menangani daftar hingga 100 matriks, masing-masing dimensi hingga 999, dan melakukannya dalam waktu yang wajar.
contoh 2
memasukkan
5x10 10x5 5x15 15x5
keluaran
1 3 2
atau
3 1 2
contoh 3
memasukkan
22x11 11x78 78x123 123x666 666x35 35x97 97x111 111x20 20x50
keluaran
2 3 4 5 6 7 8 1
Catatan: untuk verifikasi, total biaya terbaik untuk tiga contoh adalah 9114, 750, dan 1466344.
Kode terpendek menang!
Jawaban:
Ruby,
176172205 karakterIni adalah versi lain (beberapa karakter lebih lama) yang juga akan berjalan untuk input besar dalam waktu yang wajar.
Versi pertama: implementasi rekursif langsung di Ruby. Itu melakukan pencarian lengkap dan karenanya mungkin lambat pada input besar.
sumber