The Hamming jarak antara dua string dengan panjang yang sama adalah jumlah posisi di mana yang sesuai simbol yang berbeda.
Membiarkan P
menjadi string biner panjang n
dan T
menjadi string biner panjang 2n-1
. Kita dapat menghitung n
jarak Hamming antara P
dan setiap n
substring T
dengan panjang dari kiri ke kanan dan menempatkannya ke dalam array (atau daftar).
Contoh urutan jarak Hamming
Biarkan P = 101
dan T = 01100
. Urutan jarak Hamming yang Anda dapatkan dari pasangan ini adalah 2,2,1
.
Definisi kedekatan
Sekarang mari kita perhatikan dua urutan jarak Hamming tersebut. Katakan x = (0, 2, 2, 3, 0)
dan y = (2, 1, 4, 4, 2)
sebagai contoh. Kami mengatakan bahwa x
dan y
adalah close
jika y <= x <= 2*y
atau jika x <= y <= 2*x
. Di sini, perkalian skalar dan ketidaksetaraan diambil secara elemen. Artinya, untuk dua urutan A
dan B
, A <= B iff A[i] <= B[i]
untuk semua indeks i
.
Perhatikan bahwa urutan jarak Hamming membentuk urutan parsial dengan cara membandingkannya. Dengan kata lain, banyak pasangan urutan tidak lebih besar atau sama atau lebih kecil dari atau sama satu sama lain. Sebagai contoh (1,2)
dan (2,1)
.
Jadi menggunakan contoh di atas, (0, 2, 2, 3, 0) <= 2*(2, 1, 4, 4, 2) = (4, 2, 8, 8, 4)
tetapi (0, 2, 2, 3, 0)
tidak lebih besar dari (2, 1, 4, 4, 2)
. Juga (2, 1, 4, 4, 2)
tidak lebih kecil dari atau sama dengan 2*(0, 2, 2, 3, 0) = (0, 4, 4, 6, 0)
. Akibatnya x
dan y
tidak dekat satu sama lain.
Tugas
Untuk meningkatkan n
mulai dari n=1
, pertimbangkan semua pasangan yang mungkin dari string biner P
panjang n
dan T
panjang 2n-1
. Ada 2^(n+2n-1)
pasangan seperti itu dan karenanya banyak urutan jarak Hamming. Namun banyak dari sekuens tersebut akan identik. Tugasnya adalah menemukan ukuran rangkaian urutan Hamming terbesar sehingga tidak ada dua urutan yang saling berdekatan.
Kode Anda harus menampilkan satu nomor per nilai n
.
Skor
Skor Anda secara umum adalah tertinggi yang dicapai n
kode Anda di komputer saya dalam 5 menit (tapi baca terus). Waktunya adalah total waktu berjalan, bukan hanya waktu untuk itu n
.
Untuk memberikan skor untuk jawaban yang tidak optimal, karena menemukan jawaban yang optimal kemungkinan akan sulit, kita akan membutuhkan sistem penilaian yang agak halus. Skor Anda adalah nilai tertinggi di n
mana tidak ada orang lain yang memposting jawaban yang benar lebih tinggi untuk ukuran apa pun yang lebih kecil dari sama dengan ini. Misalnya, jika Anda menghasilkan 2, 4, 21
dan orang lain mengeluarkan 2, 5, 15
maka Anda hanya akan skor 1
karena orang lain memiliki jawaban yang lebih baik n = 2
. Jika Anda menghasilkan 2, 5, 21
maka Anda akan mencetak skor 3
tidak peduli apa yang orang lain hasilkan karena semua jawaban itu optimal. Jelas jika Anda memiliki semua jawaban optimal maka Anda akan mendapatkan skor untuk tertinggi yang n
Anda posting. Namun, bahkan jika jawaban Anda tidak optimal, Anda masih bisa mendapatkan skor jika tidak ada orang lain yang bisa mengalahkannya.
Contoh jawaban dan contoh yang berhasil
(Jawaban ini belum dicentang. Verifikasi independen akan diterima dengan penuh syukur.)
Terima kasih untuk produk ETH:
- n = 1 memberi 2.
- n = 2 memberi 5.
- n = 3 memberi 21.
Mari kita lihat n = 2
lebih detail. Dalam hal ini daftar lengkap urutan jarak Hamming (diwakili oleh tuple di sini) adalah:
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
Kita bisa melihat bahwa (0,0)
itu tidak dekat dengan tuple lainnya. Bahkan jika kita mengambil (0, 0)
, (0, 1)
, (1, 0)
, (2, 1)
, (1,2)
maka tidak satupun dari mereka tupel yang dekat dengan apa pun yang lain. Ini memberi skor 5
untuk n = 2
.
Untuk n = 3
daftar lengkap urutan jarak Hamming yang berbeda adalah:
[(0, 0, 0), (0, 0, 1), (0, 1, 1), (0, 1, 2), (0, 1, 3), (0, 2, 1), (0, 2, 2), (0, 2, 3), (0, 3, 0), (0, 3, 1), (1, 0, 0), (1, 0, 1), (1, 0, 2), (1, 1, 0), (1, 1, 1), (1, 1, 2), (1, 1, 3), (1, 2, 0), (1, 2, 1), (1, 2, 2), (1, 2, 3), (1, 3, 0), (1, 3, 1), (1, 3, 2), (2, 0, 1), (2, 0, 2), (2, 0, 3), (2, 1, 0), (2, 1, 1), (2, 1, 2), (2, 1, 3), (2, 2, 0), (2, 2, 1), (2, 2, 2), (2, 2, 3), (2, 3, 1), (2, 3, 2), (2, 3, 3), (3, 0, 2), (3, 0, 3), (3, 1, 0), (3, 1, 1), (3, 1, 2), (3, 2, 0), (3, 2, 1), (3, 2, 2), (3, 3, 2), (3, 3, 3)]
Dari 48
sekuens tersebut, kita dapat memilih satu set ukuran 21
sehingga tidak ada pasangan dalam set yang dekat satu sama lain.
Bahasa dan perpustakaan
Anda dapat menggunakan bahasa dan perpustakaan yang tersedia yang Anda suka. Jika memungkinkan, alangkah baiknya untuk dapat menjalankan kode Anda, jadi harap sertakan penjelasan lengkap tentang cara menjalankan / kompilasi kode Anda di Linux jika memungkinkan.
Mesin saya Pengaturan waktu akan dijalankan pada mesin 64-bit saya. Ini adalah instalasi ubuntu standar dengan RAM 8GB, Prosesor Delapan-Core AMD FX-8350 dan Radeon HD 4250. Ini juga berarti saya harus dapat menjalankan kode Anda.
Jawaban utama
- Skor 4 untuk 2, 5, 21, 83, 361 oleh Christian Sievers. C ++
- Skor 5 untuk 2, 5, 21, 83, 372 oleh fəˈnɛtɪk. Javascript