POWERMULTISET
. Als Potenzmenge bezeichnet man die Menge aller Teilmengen einer gegebenen Grundmenge. Die Potenzmenge einer endlichen Menge mit n Elementen enthält 2n Elemente. Nehmen wir als Beispiel die Menge M = { 1, 2, 3 }. Da es sich um eine endliche Menge mit 3 Elementen handelt, enthält die Potenzmenge 23 = 8 Elemente, die da wären:1. { } 2. { 1 } 3. { 2 } 4. { 3 } 5. { 1, 2 } 6. { 1, 3 } 7. { 2, 3 } 8. { 1, 2, 3 }Anmerkung: Eine Menge enthält keine Ordnung, sodass z.B.
{ 1, 2 } = { 2, 1 }
ist.Die Table Function
POWERMULTISET
erwartet als Argument eine Nested Table. Dazu erstellen wir zunächst den entsprechenden Typ:create type num_nt as table of integer; /Jetzt kann die Funktion aufgerufen werden:
select column_value from table(powermultiset(num_nt(1,2,3))) order by cardinality(column_value);Man erhält nun die folgenden sieben Zeilen:
COLUMN_VALUE ---------------------------- EXAMPLE.NUM_NT('1') EXAMPLE.NUM_NT('2') EXAMPLE.NUM_NT('3') EXAMPLE.NUM_NT('1','2') EXAMPLE.NUM_NT('1','3') EXAMPLE.NUM_NT('2','3') EXAMPLE.NUM_NT('1','2','3')Man erkennt, dass eine Teilmenge fehlt: die leere Menge; somit verhält sich die Implementierung leider nicht ganz so wie in der Mathematik.
Neben der Table Function
POWERMULTISET
gibt es auch die Table Function POWERMULTISET_BY_CARDINALITY
, die alle Teilmengen zu einer gegebenen Kardinalität zurückgibt. Man erhält alle zwei-elementigen Teilmengen mithilfe der folgenden Abfrage:select column_value from table(powermultiset_by_cardinality(num_nt(1,2,3),2));Man erhält die folgenden drei Zeilen:
COLUMN_VALUE ---------------------------- EXAMPLE.NUM_NT('1','2') EXAMPLE.NUM_NT('1','3') EXAMPLE.NUM_NT('2','3')Also wiedermal ein nettes Feature, welches man mitunter bei einigen Problemen verwenden kann.
Keine Kommentare:
Kommentar veröffentlichen