Os dados do programa que vai implementar são sequências como a seguinte
ABC->DF
cujo significado é: numa determinada base de dados o conhecimento dos
campos A, B e C permite determinar os campos D
e F. Por exemplo, sejam os seguintes campos: A (dAta de nascimento),
I (idade), D (Data actual), B (número do BI), N (nome)
e M (Morada). Temos (entre outras) as seguintes dependências funcionais
(DFs)
AD->I (Data de nascimento e data de hoje -> Idade da pessoa) B->NMA (Bilhete de identidade -> Nome, morada e data de nascimento) BD->I (Bilhete de identidade e data de hoje -> Idade da pessoa)A última DF é desnecessária porque a partir das duas primeiras conclui-se em particular que os valores de B e de D fixam o valor de I (porquê?).
Implemente um programa que leia um conjunto de DFs e imprima o número de ordem
(a primeira DF tem o número 1) de todas as DFs que são supérfluas no sentido
acima indicado. Se nenhuma BF for supérflua, o programa deve imprimir 0; para o
exemplo atrás apresentado o resultado deve ser 3.
Note que se 2 ou mais DFs são supérfluas só se pode em princípio retirar uma
delas "de cada vez". por exemplo em A->B, B->C,
C->B, D->C, A->D e D->A, as DFs A->B
e D->C são supérfluas mas não podem ser ambas retiradas.
As DFs são dadas da seguinte forma: número de DFs na linha 1, uma DF por linha
(sem espaços e utilizando a separação ->
, como indicado atrás). O
resultado é uma sequência crescente de inteiros; cada inteiro indica o número de
ordem (a começar por 1) de todas as DFs que são supérfluas.
Notas (i) Cada campo é uma letra maiúscula, (ii) Uma letra nunca aparece am ambos os lados de uma DF (dependências triviais).
Exemplo Dados
5 A->B B->C A->C BC->D A->DResultado (como se disse, tem que ser por ordem crescente)
3 5Número máximo de dependências: 20