Lewati ke konten utama

Latihan 8.10 Latihan Sage

1.

Buatlah kode Golay (biner) dengan konstruktor codes.GolayCode(). Bacalah dokumentasi untuk memastikan bahwa Anda membangun versi biner (bukan terner), dan jangan membangun versi perluasan (yang merupakan pilihan baku).
  1. Gunakan metode-metode Sage untuk menghitung panjang, dimensi, dan jarak minimum kode tersebut.
  2. Berapa banyak kesalahan yang dapat dideteksi oleh kode ini? Berapa banyak yang dapat dikoreksinya?
  3. Carilah kata kode taknol dan masukkan tiga kesalahan dengan menambahkan suatu vektor yang memiliki tiga buah 1 (sesuai pilihan Anda) untuk membentuk pesan yang diterima. Tunjukkan bahwa pesan tersebut didekode dengan benar.
  4. Gunakan kembali pilihan Anda dari bagian sebelumnya, tetapi sekarang tambahkan satu kesalahan lagi. Apakah pesan baru yang diterima didekode dengan benar?

2.

Salah satu teknik untuk memperbaiki karakteristik suatu kode adalah dengan menambahkan bit pemeriksa paritas keseluruhan, serupa dengan bit pemeriksa paritas tunggal dari kode ASCII yang dijelaskan dalam Contoh 8.1.3. Kode semacam itu disebut versi perluasan dari kode asalnya.
  1. Konstruksikan kode Golay (biner) dan peroleh matriks pemeriksa paritasnya. Gunakan perintah-perintah Sage untuk memperbesar matriks ini sehingga terbentuk matriks pemeriksa paritas baru yang memiliki bit pemeriksa paritas keseluruhan tambahan. Metode matriks .augment() dan .stack() mungkin berguna, begitu pula konstruktor zero_vector() dan ones_matrix() (dengan mengingat bahwa kita menetapkan entri-entri binernya berasal dari lapangan GF(2).)
    Buatlah kode perluasan dengan memasukkan matriks pemeriksa paritas yang telah diperbesar ke konstruktor codes.from_parity_check_matrix(), lalu hitung panjang, dimensi, dan jarak minimum kode perluasan tersebut.
  2. Dalam hal apa sifat-sifat kode baru ini lebih baik? Apa pengorbanannya?
  3. Sekarang, buatlah kode Golay (biner) perluasan dengan konstruktor Sage codes.GolayCode() dan kata kunci yang tepat untuk memperoleh versi perluasan. Jika beruntung, daftar terurut kata kode Anda akan sama dengan daftar kata kode Sage. Jika tidak, metode kode linear .is_permutation_equivalent() seharusnya mengembalikan True untuk menunjukkan bahwa kode Anda dan kode Sage hanya merupakan penataan ulang satu sama lain.

3.

Catatan: Soal ini sedang dinonaktifkan sementara (mulai Sage 6.7), selagi beberapa kode Sage yang bermasalah untuk jarak minimum suatu kode Hamming diperbaiki. Kasus r = 2 menghasilkan pesan galat, dan untuk r > 5 perhitungan jarak minimum menjadi terlalu lambat untuk ditoleransi. Karena itu, membuat konjektur yang masuk akal hanya dari \(3\) kasus menjadi sedikit lebih sulit.
Dual dari suatu kode blok \((n,k)\) dibentuk sebagai himpunan semua vektor biner yang ortogonal terhadap setiap vektor dari kode asal. Latihan 8.6.25 menjelaskan konstruksi ini dan menanyakan beberapa sifatnya.
Anda dapat mengonstruksi dual suatu kode dalam Sage dengan metode .dual_code(). Konstruksikan kode-kode Hamming biner beserta dualnya, dengan parameter r berkisar dari 2 sampai 5, termasuk kedua batas tersebut. Buatlah tabel dengan enam kolom (mungkin dengan menggunakan fungsi html.table()) yang mencantumkan \(r\text{,}\) panjang kode, dimensi kode asal dan dualnya, serta jarak minimum kode asal dan dualnya.
Rumuskan konjektur untuk dimensi dan jarak minimum dual dari kode Hamming sebagai ekspresi dalam parameter \(r\text{.}\)

4.

Suatu kode dengan jarak minimum \(d\) disebut sempurna jika setiap vektor yang mungkin berjarak Hamming paling jauh \((d-1)/2\) dari suatu kata kode. Jika kita memperluas gagasan geometri kita untuk menggunakan jarak Hamming sebagai metrik, kita dapat berbicara tentang bola berjari-jari \(r\) di sekitar suatu vektor (atau kata kode. Untuk kode dengan panjang \(n\text{,}\) bola semacam itu memuat
\begin{equation*} 1 + {n\choose 1} + {n\choose 2} + \cdots + {n\choose r} \end{equation*}
vektor di dalamnya. Untuk kode sempurna, bola-bola berjari-jari \(d\) yang berpusat pada kata-kata kode akan mempartisi secara tepat seluruh himpunan semua vektor yang mungkin. (Inilah kaitan yang membuat teori pengodean bersesuaian dengan masalah pengepakan bola.)
Salah satu konsekuensi kesempurnaan suatu kode berdimensi \(k\) adalah bahwa
\begin{equation*} 2^k\left({n\choose 0} + {n\choose 1} + {n\choose 2} + \cdots + {n\choose \frac{d-1}{2}}\right) = 2^n \end{equation*}
Sebaliknya, jika suatu kode memiliki jarak minimum \(d\) dan syarat di atas berlaku, maka kode tersebut sempurna.
Tulislah fungsi Python bernama is_perfect() yang menerima suatu kode linear sebagai masukan dan mengembalikan True atau False. Demonstrasikan fungsi Anda dengan memeriksa bahwa kode Golay (biner) bersifat sempurna, lalu gunakan suatu perulangan untuk memverifikasi bahwa kode-kode Hamming (biner) bersifat sempurna untuk semua panjang di bawah \(32\text{.}\)