Saya pernah perlu menulis fungsi yang menghitung entropi blok dari seri simbol yang diberikan untuk ukuran blok yang diberikan dan terkejut betapa pendeknya hasilnya. Jadi saya menantang Anda untuk codegolf fungsi seperti itu. Saya tidak memberi tahu Anda apa yang saya lakukan untuk saat ini (dan dalam bahasa apa), tetapi saya akan melakukannya dalam seminggu atau lebih, jika tidak ada yang datang dengan ide yang sama atau lebih baik terlebih dahulu.
Definisi blok entropi:
Diberikan urutan simbol A = A_1, ..., A_n dan ukuran blok m:
- Blok ukuran m adalah segmen dari m elemen berurutan dari urutan simbol, yaitu, A_i, ..., A_ (i + m − 1) untuk setiap i yang sesuai.
- Jika x adalah urutan simbol dari ukuran m, N (x) menunjukkan jumlah blok A yang identik dengan x.
- p (x) adalah probabilitas bahwa blok dari A identik dengan urutan simbol x ukuran m, yaitu, p (x) = N (x) / (n − m + 1)
- Akhirnya, entropi blok untuk ukuran blok m dari A adalah rata-rata −log (p (x)) di atas semua blok x ukuran m di A atau (yang setara) jumlah −p (x) · log (p (x)) atas setiap x ukuran m yang terjadi di A. (Anda dapat memilih logaritma yang Anda inginkan.)
Pembatasan dan klarifikasi:
- Fungsi Anda harus mengambil urutan simbol A serta ukuran blok m sebagai argumen.
- Anda dapat mengasumsikan bahwa simbol tersebut direpresentasikan sebagai bilangan bulat berbasis nol atau dalam format lain yang sesuai.
- Program Anda harus mampu mengambil argumen yang masuk akal secara teori dan pada kenyataannya harus mampu menghitung contoh kasus (lihat di bawah) pada komputer standar.
- Fungsi dan pustaka built-in diperbolehkan, selama mereka tidak melakukan bagian besar dari prosedur dalam satu panggilan, yaitu, mengekstraksi semua blok ukuran m dari A, menghitung jumlah kemunculan blok tertentu x atau menghitung entropi dari urutan nilai p - Anda harus melakukan hal-hal itu sendiri.
Uji:
[2, 3, 4, 1, 2, 3, 0, 0, 3, 2, 3, 0, 2, 2, 4, 4, 4, 1, 1, 1, 0, 4, 1,
2, 2, 4, 0, 1, 2, 3, 0, 2, 3, 2, 3, 2, 0, 1, 3, 4, 4, 0, 2, 1, 4, 3,
0, 2, 4, 1, 0, 4, 0, 0, 2, 2, 0, 2, 3, 0, 0, 4, 4, 2, 3, 1, 3, 1, 1,
3, 1, 3, 1, 0, 0, 2, 2, 4, 0, 3, 2, 2, 3, 0, 3, 3, 0, 0, 4, 4, 1, 0,
2, 3, 0, 0, 1, 4, 4, 3]
Entropi blok pertama dari urutan ini adalah (untuk logaritma natural):
- m = 1: 1.599
- m = 2: 3.065
- m = 3: 4.067
- m = 4: 4.412
- m = 5: 4.535
- m = 6: 4.554
entropy(probabilities(blocks(A,m))).