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