ЗадАЧА 2.3. Кодове

 

Дефинираме разстоянието dH(X, Y) между два стринга, с равна дължина X и Y като стандартното разстояние Хаминг, т.е. броят на позициите, в които X и Y се различават.

Например,  dH(1001, 0010)=3 и dH(1001111, 0010101)=4.

Нека n ≥ 1 и нека C = W1, W2, . . . , WM  е списък от  M  на брой двоични стрингове, с дължина n.

Разглеждаме C като цикличен списък и дефинираме разстоянието dC(Wi , Wj) между два стринга Wi  и Wj  в списъка като  dC(Wi , Wj) = min{abs(i–j), M–abs(i–j)}.

Нека k удовлетворява 1 ≤ k < n. Ще казваме, че C е цикличен код с дължина  n и ширина k, ако за всяко i, j 1 ≤ i, jM е изпълнено:

            (1)  Ако  dC(Wi , Wj) ≤ k,   то  dH(Wi , Wj) = dC(Wi , Wj);

            (2)  Ако  dC(Wi , Wj) > k,   то  dH(Wi , Wj) > k.     

Основният проблем в изучаването на цикличните кодове е да се определи максималният брой стрингове в цикличен код с дължина  n и ширина k. Точният брой е известен само за някои малки стойности на параметрите n и k. Вашата задача е да генерирате цикличен код с колкото може повече стрингове за дадена двойка n, k.

Тест #

1

2

3

4

5

6

7

8

9

10

n

5

6

6

7

7

8

8

9

10

10

k

1

1

2

1

2

1

2

2

2

3

 

Вие трябва да предадете 10 файла, съдържащи вашите кодове с параметрите от таблицата по-горе.

Не предавайте програма!

Първият ред във файла трябва да съдържа: #FILE code t

където t е номерът на теста.

Следващите M реда трябва да съдържат последователните стрингове от генерирания код с дължина n и ширина k.

За всеки тестов пример най-доброто решение, дадено от състезател, ще получи 10 точки. Ако най-доброто решение е код с B стринга, а Вие сте предали вярно решение с M стринга, Вашият резултат ще бъде 10M/B. Той ще бъде закръглен до първата цифра след десетичната точка за всеки пример. Крайният резултат ще бъде закръглен до най-близкото цяло число.

ПРИМЕР

Text Box: #FILE code 0
1101
1100
1110
1010
1011
0011
0001
0101
n=4,  k=1,  M=8