Wskazówka:
Efektem działania dwóch pierwszych pętli jest utworzenie reprezentacji zbioru liter występujących w słowie Y w postaci tak zwanego „wektora charakterystycznego”. Dokładniej, po pętli

dla i = 1,2,…,d wykonuj
litY[i]
Czyjest[kod(lit)] ← prawda

zachodzi warunek: Czyjest[i] = prawda, gdy litera o kodzie i występuje w słowie Y, oraz Czyjest[i] = fałsz — w przeciwnym wypadku. W ostatniej pętli

czyp ← prawda
dla i = 1,2,…,d wykonuj
litX[i]
czypczyp i Czyjest[kod(lit)]

sprawdzamy, czy w słowie X występuje litera, której nie ma w Y. Dokładniej, zmiennej czyp nadajemy wartość koniunkcji zdań: „czy i-ta litera słowa X występuje w Y”. Tak więc po zakończeniu tej pętli czyp ma wartość „prawda” dokładnie wtedy, gdy słowo X jest podrzędne względem Y.

Specyfikacja algorytmu A wygląda więc następująco:

Specyfikacja
Dane:
X, Y — słowa, w których występują tylko litery ze zbioru {A, B, C, D, E, F, G, H, I, J}
Wynik:
1 — gdy X jest słowem podrzędnym względem Y,
0 — gdy X nie jest słowem podrzędnym względem Y.

Tabelkę podaną w treści zadania możemy wówczas uzupełnić w oparciu o to, czy X jest podrzędne względem Y:

X

Y

wynik algorytmu A

HHGGFFEEDDCCBBAA

ABCDEFGH

1

DCBADCBA

FGHABCJD

1

ABCDE

ABCCBA

0

AAAAA

AA

1

AA

AAAAA

1

ACEGJ

ABCDEFGH

0


Powrót do pytań