Jeg leder efter en måde at oprette et Hasse-diagram ud fra en given del bestil binær relation. Forholdet gives eksplicit, for eksempel: Hasse[{{1,2},{2,3},{1,3}}], og output vil være den tilsvarende graf.

Jeg har googlet til en løsning , og jeg fandt en løsning, men jeg fik ikke, hvordan jeg bruger den .. her er, hvad jeg fandt.

Hvis der er en måde at generere et Hasse-diagram for et betinget delbestillingssæt og for et ikke-endeligt forhold (selvfølgelig er jeg i dette tilfælde kun interesseret i et omtrentligt diagram), ville jeg være glad for at høre om det også.

Kommentarer

  • Hvilken del af koden du henviste til, forstod du ikke '?
  • Nå, jeg forstod ikke ' hvordan jeg skulle bruge det til mit formål. hvilket betyder, hvordan definerer jeg forholdet eksplicit (som eksemplet ovenfor). synes det kun tillader mig at tegne en graf kun for betinget relation .. godt jeg kunne definere forholdet med betingelse, men er der ikke ' der noget enklere? og endnu et problem, jeg spillede lidt med det, og jeg kunne ikke finde en måde at ændre skrifttypestørrelsen på etiketterne på. Jeg vil kopiere grafen til ord, og etiketterne skal være læsbare og ikke så små.
  • Hvis du specifikt angiver forholdet mellem knudepunkterne, er det ikke ' t bare en graf?
  • I ' undskyld, jeg er ' ny på Mathematica. Alt, hvad der ligner en graf af min beskrivelse, ville være fint. Jeg behøver ikke ' at foretage beregninger på det. Men jeg har mange grafer at tegne, og jeg håbede, at der er en dedikeret funktion til mine behov. hvis du har en anden løsning, er du velkommen til at fortælle mig .. men husk at jeg ' er ny i Mathematica, så jeg ' Jeg er ikke fortrolig med mange af de grundlæggende metoder i programmet.
  • Velkommen til Mathematica Stack Exchange RB14, jeg vil sende et svar snart (godt … efter frokost :-))

Svar

I version 10+ kan vi komponere TransitiveReductionGraph og RelationGraph for at få en Hasse-diagramfunktion med tager de samme argumenter og muligheder som RelationGraph:

ClearAll[hasseF] hasseF = TransitiveReductionGraph @* RelationGraph 

Eksempler:

hasseF[SubsetQ, Subsets[Range[4]], VertexShapeFunction -> "Name"] 

indtast billedebeskrivelse her

substringQ[s1_, s2_] := UnsameQ[s1 , s2] && StringMatchQ[s1, ___ ~~ s2 ~~ ___] hasseF[substringQ, {"a", "b", "c","ab", "ac","abc", "abcd"}, VertexShapeFunction -> "Name"] 

indtast billedebeskrivelse her

Svar

Jeg synes, hvad du vil, faktisk er meget simpelt (også bemærket af @ SjoerdC.deVries i hans kommentar):

Graph[{1 -> 2, 2 -> 3, 3 -> 1}, DirectedEdges -> False, GraphStyle -> "DiagramGold"] 

indtast billedebeskrivelse her

Hvis du på den anden side gerne vil udforske komplette Hasse-diagrammer, er koden du linkede til en god start. Demonstrations Project har også et par relevante eksempler – det er altid en god ide at søge der.

Digemat dybere, Mathematica indbygget Combinatorica pakke har HasseDiagram pakke. Se på dette eksempel fra Dokumentation kræver

<< Combinatorica` ShowGraph[HasseDiagram[MakeGraph[Subsets[4], #2 \[Intersection] #1 === #1 && #1 != #2 &]]] 

indtast billedebeskrivelse her

For endnu dybere funktionalitet kan du kontakte forfattere af dette papir:

“En Mathematica-pakke til at klare delvist ordnede sæt” , P. Codara

eller få denne bog:

“Computational Discrete Mathematics: Combinatorics and Graph Theory with Mathematica” , Sriram Pemmaraju, Steven Skiena

Kommentarer

  • Hvis spørgeren ønsker et ægte Hasse-diagram, vil han helt sikkert have en automatisk måde at beregne på transitiv reduktion af den rettede graf genereret af det binære forhold. Pilene skal være rettet, synes jeg, og pilen mellem 1 og 3 skal ikke være ' t der.
  • @JOwen Ved du hvorfor standardrepræsentation da er ikke instrueret? alturl.com/jribp
  • Jeg ' er ikke sikker, men jeg synes, der er retningsbestemt information i kanterne.Der står i det link, du har sendt, at man skal tegne " et linjesegment eller en kurve, der går opad [kursiv i originalen] fra x til y, når y dækker x (det vil sige når x < y, og der er ingen z sådan, at x < z < y) "

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *