Hamming mesafesi eşit uzunlukta iki sırası arasındaki karşılık gelen simgeler farklı olan pozisyonların sayısıdır.
Izin P
vermek bir ikili dize uzunluğu n
ve T
bir ikili dize uzunluğu 2n-1
. Soldan sağa sırayla n
Hamming mesafelerini P
ve her bir n
uzunluk alt dizesini hesaplayabilir T
ve bunları bir diziye (veya listeye) koyabiliriz.
Örnek Hamming mesafe sırası
Bırakın P = 101
ve T = 01100
. Bu çiftten aldığınız Hamming mesafelerinin sırası 2,2,1
.
Closeness'un tanımı
Şimdi Hamming mesafelerinin bu iki dizisini ele alalım. Söyle x = (0, 2, 2, 3, 0)
ve y = (2, 1, 4, 4, 2)
örnek olarak. Biz söylemek x
ve y
vardır close
eğer y <= x <= 2*y
yoksa eğer x <= y <= 2*x
. Burada skaler çarpma ve eşitsizlik eleman olarak alınır. Olduğunu iki dizileri için söylenecek A
ve B
, A <= B iff A[i] <= B[i]
tüm endekslerin için i
.
Hamming mesafelerinin sekanslarının, bu karşılaştırma şekliyle kısmi bir düzen oluşturduğuna dikkat edin. Başka bir deyişle, birçok dizi çifti ne büyük ya da eşittir ne de büyüktür ya da eşittir. Örneğin (1,2)
ve (2,1)
.
Yani yukarıdaki örneği kullanmak, (0, 2, 2, 3, 0) <= 2*(2, 1, 4, 4, 2) = (4, 2, 8, 8, 4)
ancak (0, 2, 2, 3, 0)
daha büyük değildir (2, 1, 4, 4, 2)
. Ayrıca (2, 1, 4, 4, 2)
eşit veya daha küçük değildir 2*(0, 2, 2, 3, 0) = (0, 4, 4, 6, 0)
. Sonuç olarak x
ve y
birbirlerine yakın değiller.
Görev
Artan İçin n
başlayan n=1
ikili dizeleri tüm olası çiftleri dikkate P
uzunluğu n
ve T
uzunluk 2n-1
. Öyle 2^(n+2n-1)
çiftler var ve bu nedenle Hamming mesafelerinin birçok dizisi var. Bununla birlikte, bu dizilerin çoğu aynı olacaktır. Görev, en büyük Hamming mesafe dizisi kümesinin boyutunu bulmaktır, böylece iki dizi birbirine yakın olmaz.
Kodunuzun değeri başına bir sayı çıkmalıdır n
.
Puan
Puanınız genel olarak n
kodunuzun 5 dakika içinde makinemde ulaştığı en yüksek seviyeyi söylüyor (ancak okumaya devam ediyor). Zamanlama sadece çalışma süresi değil, toplam çalışma süresi içindir n
.
Optimal olmayan cevaplar için puanlar vermek için, optimal cevapları bulmak zor olacağından, hafif bir puanlama sistemine ihtiyacımız olacaktır. Puanınız, n
hiç kimsenin buna eşit olandan daha küçük herhangi bir boyut için daha yüksek doğru cevap göndermediği en yüksek değerdir . Örneğin, çıktı alıyorsanız 2, 4, 21
ve başka biri çıktısını 2, 5, 15
alırsanız, yalnızca 1
başka birinin daha iyi bir cevabı olduğu için puan alırsınız n = 2
. Çıktı 2, 5, 21
verirseniz, 3
başka kimsenin çıktısı ne olursa olsun puan alırsınız çünkü bu cevaplar en uygunudur. Açıkçası tüm optimum cevaplarınız varsa, o zaman en yüksek gönderdiğiniz puan için alacaksınız n
. Ancak, cevabınız optimum olmasa bile, başka hiç kimse onu yenemezse skoru yine de alabilirsiniz.
Örnek cevaplar ve çalışılan örnek
(Bu yanıtlar henüz işaretlenmemiştir. Bağımsız doğrulama minnetle alınır.)
ETHproductions sayesinde:
- n = 1, 2 verir.
- n = 2, 5 verir.
- n = 3 21 verir.
n = 2
Daha ayrıntılı olarak bakalım . Bu durumda (burada tuples ile temsil edilen) Hamming mesafe dizilerinin tam listesi:
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
Bunun (0,0)
başka bir gruba yakın olmadığını görebiliriz . Aldığımız Aslında (0, 0)
, (0, 1)
, (1, 0)
, (2, 1)
, (1,2)
bu dizilerini hiçbiri yakın başkalarına herhangi birine bulunmaktadır. Bu 5
için bir puan verir n = 2
.
İçin n = 3
farklı Hamming uzaklığı dizilerinin tam listesi:
[(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)]
Bu 48
dizilerden bir dizi boyut seçebiliriz, 21
böylece bu setteki hiçbir çift birbirine yakın olmaz.
Diller ve kütüphaneler
İstediğiniz dil ve kitaplıkları kullanabilirsiniz. Mümkün olduğunda, kodunuzu çalıştırabilmeniz iyi olur, bu nedenle mümkünse kodunuzu Linux'ta nasıl çalıştıracağınız / derleyeceğinize ilişkin tam bir açıklama ekleyin.
Benim Makine zamanlamaları benim 64 bit makinede işletilecek. Bu, 8GB RAM, AMD FX-8350 Sekiz Çekirdekli İşlemci ve Radeon HD 4250 ile standart bir ubuntu yüklemesidir. Bu aynı zamanda kodunuzu çalıştırabilmem gerektiği anlamına gelir.
Öncü cevap
- Christian Sievers tarafından 2, 5, 21, 83, 361 için 4 puan . C ++
- Arasında puan 5 2, 5, 21, fənɛtɪk ile 83, 372. JavaScript