Mikrozadanie 12

backback

Treść

Napisz wyrażenie algebry relacji (selekcja, rzut, produkt, suma, różnica) wyliczające wynik operacji
R:S={t{t}×SR} R:S = \{t\,|\,\{t\} \times S \subseteq R\}

Wzorcówka

Najpierw zauważamy, że zapytanie nie ma sensu kiedy S=S = \emptyset, bo wtedy dowolna krotka pasuje do R:R:\emptyset i wynik nie jest nawet dobrze zdefiniowany w sensie algebry relacji (te krotki mają dowolną arność). Zakładamy więc, że SS \neq \emptyset.

arity(R)=rarity(S)=sHead(X):=π1,2,,rsXMissing=(Head(R)×S)RR:S:=Head(R)Head(Missing) arity(R) = r \\ arity(S) = s \\ Head(X) := \pi_{1, 2, \ldots, r - s} X\\ Missing = (Head(R) \times S) \setminus R\\ R : S := Head(R) \setminus Head(Missing)

Najpierw bierzemy wszystkich kandydatów na tt, czyli prefiksy RR odpowiedniej dłguości. Potem liczymy produkt z SS i odejmujemy RR, żeby dostać wszystkie takie krotki, które ,psują’’ nam wynik, i.e. {tuS:t×u∉R}\{t\,|\,\exists u \in S:\,t \times u \not \in R\}. Wszyscy pozostali kandydaci działają, więc zwracamy różnicę.

Przykład:

R={(1,1),(1,2),(2,1),(1,3)}R = \{ (1, 1), (1, 2), (2, 1), (1, 3) \}
S={(1),(2)}S = \{ (1), (2) \}
Head(R)={(1),(2)}Head(R) = \{ (1), (2) \}
Head(R)×S={(1,1),(1,2),(2,1),(2,2)}Head(R) \times S = \{(1, 1), (1, 2), (2, 1), (2, 2)\}
Missing={(2,2)}Missing = \{(2, 2)\}
Head(Missing)={(2)}Head(Missing) = \{(2)\}
R:S={(1)}R : S = \{(1)\}

Większy przykład:

R={(1,1,1,1),(1,1,1,2),(2,1,1,1),(2,2,1,1),(2,2,1,2),(2,2,2,1)}R = \{(1, 1, 1, 1), (1, 1, 1, 2), (2, 1, 1, 1), (2, 2, 1, 1), (2, 2, 1, 2), (2, 2, 2, 1)\}
S={(1,1),(1,2),(2,1)}S = \{(1, 1), (1, 2), (2, 1)\}
Head(R)={(1,1),(2,1),(2,2)}Head(R) = \{(1, 1), (2, 1), (2, 2)\}
Head(R)×S={        (1,1,1,1),(1,1,1,2),(1,1,2,1),        (2,1,1,1),(2,1,1,2),(2,1,2,1),        (2,2,1,1),(2,2,1,2),(2,2,2,1)}Head(R) \times S = \{ \\ \;\;\;\; (1, 1, 1, 1), (1, 1, 1, 2), (1, 1, 2, 1), \\ \;\;\;\; (2, 1, 1, 1), (2, 1, 1, 2), (2, 1, 2, 1), \\ \;\;\;\; (2, 2, 1, 1), (2, 2, 1, 2), (2, 2, 2, 1) \\\}
Missing={(1,1,2,1),(2,1,1,2),(2,1,2,1)}Missing = \{(1, 1, 2, 1), (2, 1, 1, 2), (2, 1, 2, 1)\}
Head(Missing)={(1,1),(2,1)}Head(Missing) = \{(1, 1), (2, 1)\}
R:S={(2,2)}R : S = \{(2, 2)\}

Uwagi

backback