else

Werbung
9.4 Multimengen
(multisets, bags)
Elemente können „mehrfach auftreten“ („Folge ohne Ordnung“)
Schreibweise: {| 1,2,2,3,4,4,4 |}
Anwendungen: Histogramme, Meßreihen, ...
Spezifikation:
type Bag t = t -> Int
Meistens ist t linear geordnet.
Operationen wie bei Mengen; zusätzlich
anzahl x bag = bag x
Repräsentationen:
- sortierte Folge
- Suchbaum mit <= statt <
- Bei großen Anzahl besser Modell tabellieren (9.5)
9.5 Relationen
= Mengen von Tupeln – aber mit speziellen Operationen
type Relation t1 t2 = {(t1,t2)}
Modell:
Rechtseindeutige Relation ist Abbildung: „Schlüssel“ -> „Daten“
inv r = card(map fst r) == card r
(„tabellierte Abbildung“)
oder
type Map k d = k -> d
Schlüsselmenge meist linear geordnet
Signatur und Semantik für Map mit geordneten Schlüsseln:
leer :: Ord k => Map k d
leer = {}
-- (engl. empty)
einfügen :: Ord k => (k,d) -> Map k d -> Map k d
einfügen(k,d)m = if k `elem` map fst m then
error „key clash“
else m ++ {(k,d)}
-- (engl. enter, insert)
löschen :: Ord k => k -> Map k d -> Map k d
löschen k m = if k `elem` map fst m then
m – {(k,suchen k m)}
else error „no such key“
-- (engl. delete, remove)
suchen :: Ord k => k -> Map k d -> d
suchen k m = if k `elem` map fst m then
snd(fromJust(find(\x->k==fst x)m))
else error „no such key“
-- (engl. lookup, search)
fortschreiben :: Ord k => (k,d) -> Map k d -> Map k d
fortschreiben(k,d)m = if k `elem` map fst m then
einfügen(k,d)(löschen k m)
else error „no such key“
-- (engl. update)
traversieren ...
.
.
.
Repräsentationen:
Alle Repräsentationen für Mengen/Multimengen (insbesondere
geordnete)
- bezogen auf die Schlüsselmenge,
- mit „angehängten“ Daten.
Herunterladen