Memasukkan
Sebuah matriks M
direpresentasikan sebagai dua garis bilangan bulat yang dipisahkan ruang. Setiap baris akan memiliki jumlah bilangan bulat yang sama dan setiap bilangan bulat akan menjadi -1 atau 1. Jumlah bilangan bulat per baris paling banyak 20. M
Oleh karena itu akan 2
dengan di n
mana n
jumlah bilangan bulat pada masing-masing dari dua baris.
Kode Anda harus merupakan program yang lengkap. dan menerima input baik pada standar di atau dari file (itu adalah pilihan Anda). Anda dapat menerima input dari standar masuk, dari file atau hanya sebagai parameter. Namun, jika Anda melakukan yang terakhir tolong berikan contoh eksplisit tentang bagaimana kode Anda harus bekerja dan ingat bahwa itu harus menjadi program yang lengkap dan bagaimana matriks M
akan diwakili dalam input. Dengan kata lain, Anda harus melakukan parsing.
Keluaran
The biner Shannon entropi dari distribusi M*x
di mana unsur-unsur x
yang seragam dan independen dipilih dari {-1,1}. x
adalah n
vektor kolom -dimensi.
Entropi dari distribusi probabilitas diskrit adalah
- sum p_i log_2(p_i)
Dalam hal ini, p_i
adalah probabilitas i
keunikan mungkin M*x
.
Contoh dan petunjuk bermanfaat
Sebagai contoh yang dikerjakan, biarkan matriks M
menjadi
-1 1
-1 -1
Sekarang lihat semua 2^2
kemungkinan vektor yang berbeda x
. Untuk masing-masing kita menghitung M*x
dan menempatkan semua hasil dalam array (array 4-elemen dari vektor 2-komponen). Meskipun untuk masing-masing dari 4 vektor kemungkinan itu terjadi adalah 1/2^2 = 1/4
, kami hanya tertarik pada berapa kali setiap vektor hasil yang unikM*x
terjadi, dan jadi kami merangkum probabilitas individu dari konfigurasi yang mengarah ke vektor unik yang sama. Dengan kata lain, kemungkinan M*x
vektor unik menggambarkan hasil distribusi yang kami selidiki, dan kami harus menentukan probabilitas masing-masing hasil ini (yang akan, dengan konstruksi, selalu menjadi kelipatan bilangan bulat dari 1/2^2
, atau 1/2^n
secara umum) untuk hitung entropi.
Dalam n
kasus umum , tergantung pada M
hasil yang mungkin M*x
dapat berkisar dari "semua berbeda" (dalam hal ini kami memiliki n
nilai i
dalam p_i
, dan masing-masing p_i
sama dengan 1/2^n
), hingga "semua sama" (dalam hal ini ada satu kemungkinan hasil, dan p_1 = 1
).
Secara khusus, untuk 2x2
matriks di atas M
kita dapat menemukan dengan mengalikannya dengan empat kemungkinan konfigurasi ( [+-1; +-1]
), bahwa setiap vektor yang dihasilkan berbeda. Jadi dalam hal ini ada empat hasil, dan akibatnya p_1 = p_2 = p_3 = p_4 = 1/2^2 = 1/4
. Mengingat yang log_2(1/4) = -2
kita miliki:
- sum p_i log_2(p_i) = -(4*(-2)/4) = 2
Jadi hasil akhir untuk matriks ini adalah 2.
Uji kasus
Memasukkan:
-1 -1
-1 -1
Keluaran:
1.5
Memasukkan:
-1 -1 -1 -1
-1 -1 -1 -1
Keluaran:
2.03063906223
Memasukkan:
-1 -1 -1 1
1 -1 -1 -1
Keluaran:
3
x
? 2. Untuk kepentingan membuat pertanyaan itu mandiri, bagaimanaMx
definisi biner Shannon didefinisikan?Jawaban:
Mathematica,
4868 byteSunting: Preprocess ditambahkan untuk menerima string sebagai parameter.
Dengan bantuan
Tuples
danEntropy
, implementasinya ringkas dan mudah dibaca.di mana
Tuples[{-1,1},n]
memberikan semua kemungkinann
-tuple dari{-1,1}
, danEntropy[2,list]
memberikan entropi informasi base-2.Salah satu hal keren adalah bahwa Mathematica benar-benar akan mengembalikan ekspresi yang akurat:
Hasil perkiraan dapat dicapai dengan tambahan
.
tambahan (Entropy[2., ...
).sumber
Perl,
160159141 bytetermasuk +1 untuk
-p
sejak pembaruan 141 byteInput diharapkan pada
STDIN
2 baris yang terdiri dari spasi-terpisah1
atau-1
.Jalankan sebagai
perl -p 140.pl < inputfile
.Itu tidak akan memenangkan hadiah apa pun, tetapi saya pikir saya akan membagikan upaya saya.
Dijelaskan:
DATA
()
dengan menggunakan**
alih-alih<<
.$.
dan-p
.sumber
Pyth, 37 byte
Suite uji
Ini agak sulit ketika Anda harus mengimplementasikan perkalian matriks secara manual.
Penjelasan:
sumber
MATLAB,
196194187184126154 byte(Ekstra 28 byte dari 126 hingga 154 disebabkan oleh penguraian input: sekarang kode menerima input sebagai dua baris angka yang dipisahkan spasi.)
Versi tidak disatukan:
Saya bisa menghapus 6 byte jika "
ans = ...
tipe keluaran " diizinkan, saya tidak pernah yakin tentang ini.Saya minta maaf untuk mengatakan bahwa solusi asli dan pasti lucu saya terlalu ungolfed dibandingkan dengan solusi saya saat ini. Ini juga pertama kalinya saya menggunakan
accumarray
. Aplikasi enam-input-parameter masih harus menunggu, :)Output (berikut
format long
):Output dengan default
format short g
:sumber