[Bu soru bir dizgenin işlemlerini hesaplamak için yapılan bir takiptir ]
Bir dönem
pbir dizewherhangi bir pozitif tam sayı olduğupşekildew[i]=w[i+p]bu denklemin her iki tarafın da tanımlandığı zaman. Letper(w)en küçük döneminin boyutunu göstermektedirlerw. Bir dizewperiyodik iff olduğunu söylüyoruzper(w) <= |w|/2.
Dolayısıyla, gayrı resmi olarak bir periyodik dize, sadece en az bir kez tekrarlanan başka bir dizgeden yapılan bir dizedir. Tek karışıklık, dizenin sonunda, en az bir kez bütünüyle tekrar edildiği sürece, tekrarlanan dizinin tam bir kopyasını gerektirmememizdir.
Örneğin, dizeyi düşünün x = abcab. per(abcab) = 3olarak x[1] = x[1+3] = a, x[2]=x[2+3] = bve hiçbir küçük süresi vardır. Bu abcabnedenle dize periyodik değildir. Ancak, dize ababaolarak periyodiktir per(ababa) = 2.
Daha fazla örnek olarak abcabca, ababababave abcabcabcayrıca periyodiktir.
Regexes sevenler için, bu bir dize periyodik olup olmadığını algılar:
\b(\w*)(\w+\1)\2+\b
Görev, tüm maksimum periyodik alt dizileri daha uzun bir dizgede bulmaktır . Bunlara bazen literatürde koşu denir .
Bir alt
wdize periyodik ve new[i-1] = w[i-1+p]de ne ise, maksimum periyodik alt dizedir (çalıştırma)w[j+1] = w[j+1-p]. Gayriresmi olarak, "run" aynı süre içinde daha büyük bir "run" içeremez.
İki satır, genel dizedeki farklı yerlerde bulunan aynı karakter dizisini temsil edebildiğinden, aralıklarla çalıştırmaları temsil edeceğiz. İşte aralıklarla tekrarlanan yukarıdaki tanım.
String içinde bir çalıştırma (maksimal periyodik substring)
Tbir aralık[i...j]ilej>=i, öyle ki
T[i...j]periyodik bir periyodik kelimedirp = per(T[i...j])- Bu maksimum. Resmen, ne
T[i-1] = T[i-1+p]deT[j+1] = T[j+1-p]. Gayrı resmi olarak, koşu aynı dönemdeki daha büyük bir koşuda dahil edilemez.
Dizede RUNS(T)çalıştırma kümesini gösterir T.
Koşu örnekleri
Dizede dört maksimal periyodik altdizgelerin (ishal)
T = atattattvardırT[4,5] = tt,T[7,8] = tt,T[1,4] = atat,T[2,8] = tattatt.Dize
T = aabaabaaaacaacacaşağıdaki 7 maksimal periyodik alt dizeleri (ishal) içerir:T[1,2] = aa,T[4,5] = aa,T[7,10] = aaaa,T[12,13] = aa,T[13,16] = acac,T[1,8] = aabaabaa,T[9,15] = aacaaca.Dize
T = atatbatatbaşağıdaki üç koşuyu içerir. Bunlar:T[1, 4] = atat,T[6, 9] = atatveT[1, 10] = atatbatatb.
Burada 1 indeksleme kullanıyorum.
Görev
2'den başlayarak her bir tamsayı için, herhangi bir uzunluktaki ikilik dizgide bulunan en büyük sayıdaki çalışmayı çıkarmanız için kod yazınız n.
Gol
Skorunuz n120 saniyede ulaştığınız en yüksek puandır, öyle ki herkes için k <= nsizden daha yüksek bir cevap vermediniz. Açıkça bütün optimum cevaplara sahipseniz, gönderdiğiniz en yüksek notu alırsınız n. Bununla birlikte, cevabınız optimum olmasa bile, başka kimse onu geçemezse puanı alabilirsiniz.
Diller ve kütüphaneler
İstediğiniz dili ve kütüphaneyi istediğiniz gibi kullanabilirsiniz. Mümkünse, kodunuzu çalıştırmanız iyi olur, bu yüzden lütfen mümkünse Linux'ta kodunuzu nasıl çalıştıracağınıza / derleyeceğinize dair tam bir açıklama ekleyin.
Örnek optima
Aşağıda: n, optimum number of runs, example string.
2 1 00
3 1 000
4 2 0011
5 2 00011
6 3 001001
7 4 0010011
8 5 00110011
9 5 000110011
10 6 0010011001
11 7 00100110011
12 8 001001100100
13 8 0001001100100
14 10 00100110010011
15 10 000100110010011
16 11 0010011001001100
17 12 00100101101001011
18 13 001001100100110011
19 14 0010011001001100100
20 15 00101001011010010100
21 15 000101001011010010100
22 16 0010010100101101001011
Kodum tam olarak ne yazmalı?
Her biri niçin kodunuz tek bir dize ve içerdiği çalışma sayısını göstermelidir.
Benim Makine zamanlamaları benim makinede işletilecek. Bu, AMD FX-8350 Sekiz Çekirdekli İşlemciye standart bir ubuntu kurulumudur. Bu ayrıca kodunuzu çalıştırabilmem gerektiği anlamına geliyor.
Ana cevaplar
- 49 Anders Kaseorg göre C . Tek dişli ve L = 12 (2GB RAM) ile çalıştırın.
- 27 ° C'de C cdlane .
{0,1}dizeleri düşünmemizi istiyorsanız , lütfen açıkça belirtin. Aksi halde, alfabe sonsuz olabilir ve test kasetlerinin neden optimal olması gerektiğini anlamıyorum, çünkü siz de sadece {0,1}dizgileri araştırdınız .
niçin yukarı 12ve ikili alfabe hiç yenemedi. Sezgisel olarak bir ikili dizgenin optimal olmasını beklerdim, çünkü daha fazla karakter eklemek bir koşunun minimum uzunluğunu arttırır.
