Ας είναι Χ,Υ,Ζ τρία σύνολα και σχέσεις RÍX×Y , SÍY×Z. Η σύνθεσή τους που συμβολίζεται R◦S είναι μία σχέση από το Χ στο Ζ :
R◦S={(x,z)/ υπάρχει yÎY τέτοιο ώστε (x,y)ÎR και (y,z)ÎS}.
Παράδειγμα
Ας είναι X={x1,x2,x3,x4} και
Tότε
Θα μπορούσατε όμως να χρησιμοποιήσετε τον παραπάνω απλό τρόπο εύρεσης της R◦S αν το Χ είχε για παράδειγμα 10 ή περισσότερα στοιχεία;
Σημαντική βοήθεια στην περίπτωση αυτή μας παρέχει η επόμενη πρόταση.
Πρόταση
Αν X={x1,...,xn} είναι ένα πεπερασμένο σύνολο και R,S Í X×X, τότε
Μ(R◦S)=M(R)M(S).
Για να βρούμε δηλαδή τη σύνθεση δύο σχέσεων R,S Í X×X πάνω σε ένα πεπερασμένο
σύνολο X={x1,...,xn}, υπολογίζουμε το γινόμενο των Μπουλιανών
πινάκων M(R)M(S). Η σχέση που αντιστοιχεί στον πίνακα
αυτό είναι η ζητούμενη σύνθεση R◦S.
Ιδιότητες της σύνθεσης σχέσεων
i.
R1ÍS1 και R2ÍS2 Þ R1◦R2 Í S1◦S2
ii.
R1◦(R2◦R3) =(R1◦R2)◦R3
iii.
R◦(S1◦S2)=R◦S1ÈR◦S2 , (R1ÈR2)◦S=R1◦SÈR2◦S
iv.
(R◦S)-1=S-1◦R-1
(με την προϋπόθεση ότι οι παραπάνω πράξεις ορίζονται).
Οι διαδοχικές δυνάμεις μιας σχέσης RÍX×X ορίζονται ως εξής:
R0=ΔΧ , R1=R , R2=R◦R , ..., Rn =R◦ ... ◦R (n φορές)
Για κάθε m,nÎℕ ισχύουν οι ισότητες:
Rm◦Rn=Rm+n
(Rm)n=Rmn
Για κάθε σχέση RÍX×X ορίζουμε τη σχέση
Αν το σύνολο X={x1,...,xn}είναι
πεπερασμένο, τότε ισχύει
Στην περίπτωση αυτή η σχέση R*
υπολογίζεται με την βοήθεια των Μπουλιανών πινάκων, αφού
Ο υπολογισμός της σχέσης R*
δηλαδή, ανάγεται σε πράξεις Μπουλιανών πινάκων.
Ο αλγόριθμος Warshall μας επιτρέπει να βρίσκουμε την R* με ακόμη ευκολότερο τρόπο.
Ας είναι λοιπόν X={x1,...,xn}και RÍX×X.
Αν
(S) : a®a1®a2®...®ak®b
είναι μια διαδρομή στο γράφημα της R, οι κορυφές a1,a2,...,ak ονομάζονται εσωτερικές κορυφές της (S).
Για κάθε k=1,2,...,n συμβολίζουμε με Wk τον n×n Μπουλιανό πίνακα που ορίζεται με τον εξής τρόπο: στη θέση (i,j) έχει 1 αν και μόνο αν στο γράφημα της R υπάρχει μια διαδρομή από το xi στο xj της οποίας όλες οι εσωτερικές κορυφές (εφόσον υπάρχουν) είναι στοιχεία του συνόλου {x1,x2,...,xk}.
Είναι φανερό πως Wn=M(R*). Θέτοντας W0=M(ΔΧÈR) προκύπτει η ακολουθία των Μπουλιανών πινάκων
W0,W1,...,Wn=M(R*).
Το παρακάτω "πρόγραμμα" (με ακέραιες μεταβλητές) διαβάζει τον πίνακα W0 και με τη βοήθεια του αλγορίθμου του Warshall υπολογίζει τον Wn:
begin
do i=1,n ! Ανάγνωση του πίνακα W0
do
j=1,n
read wij
end do
end do
do
k=1,n
do
i=1,n
! Αρχή αλγορίθμου Warshall
do
j=1,n
if
((wij=1) or (wik=1
and wkj=1)) then
uij=1
else
uij=0
end do
end
do ! Τέλος αλγορίθμου Warshall
do i=1,n
do
j=1,n
wij=uij
end do
end do
end do
end .