Graphen haben folgende Eigenschaften:Haskell Generieren von Graphen mit QuickCheck-Eigenschaften
Der Typ 'Kante' repräsentiert eine Kante zwischen zwei Knoten.
data Edge v = Edge {source :: v, target :: v}
deriving (Show,Eq,Ord)
Der Typ "Graph" repräsentiert einen gerichteten Graphen.
data Graph v = Graph {nodes :: Set v, edges :: Set (Edge v)}
deriving Show
Die Funktion 'isDAG' testet, ob eine Grafik azyklisch ist.
isDAG :: Ord v => Graph v -> Bool
isDAG g = isValid g && all nocycle (nodes g)
where nocycle v = all (\a -> v `notMember` reachable g a) $ Set.map target (adj g v)
Die fuction Tests 'isForest', wenn eine gültige DAG ein Wald (eine Reihe von Bäumen) ist
isForest :: Ord v => DAG v -> Bool
isForest g = isDAG g && all (\v -> length (adj g v) <= 1) (nodes g)
Die Generatoren Code ist:
DAGs Generator
dag :: (Ord v, Arbitrary v) => Gen (DAG v)
dag = arbitrary `suchThat` isDAG
Wälder Generator
forest :: (Ord v, Arbitrary v) => Gen (Forest v)
forest = arbitrary `suchThat` isForest
Ich möchte die Generatoren Dag und Forest verbessern, so dass sie auf ihren Eigenschaften und nicht mit "solchem That" definiert sind. Wie kann ich es tun?
Vielen Dank im Voraus.
Mögliche Duplikat [Arbitrary-Instanz für unvoreingenommene Graphen für Quick Check Erzeugen] (http://stackoverflow.com/questions/36398392/arbitrary-instance-for-generating-unbiased-graphs-for-quickcheck) – user2407038
Es ist nicht Ich habe das überprüft und es beantwortet meine Frage nicht. Was ich verbessern möchte, sind diese Generatoren und nicht die Instanz. Kannst du helfen? – Anonymous
Ich bin mir nicht sicher, was Sie meinen, indem Sie die Generatoren "verbessern". So wie es aussieht, fragt diese Frage nicht mehr als das Duplikat - beide Fragen fragen nach dem Schreiben von "weniger voreingenommenen" Generatoren. – user2407038