Jeg ser etter en måte å lage et Hasse-diagram fra en gitt del bestille binær relasjon. Forholdet vil bli gitt eksplisitt, for eksempel: Hasse[{{1,2},{2,3},{1,3}}], og utgangen vil være den tilsvarende grafen.

Jeg har googlet for en løsning , og jeg fant en løsning, men jeg skjønte ikke hvordan jeg skulle bruke den. her er det jeg fant.

Hvis det er en måte å generere et Hasse-diagram for et betinget delbestillingssett, og for et ikke-endelig forhold (selvfølgelig, for dette tilfellet er jeg bare interessert i et tilnærmet diagram), vil jeg gjerne høre om det også.

Kommentarer

  • Hvilken del av koden du henviste til, forstod du ikke '?
  • Vel, jeg forsto ' ikke hvordan jeg skulle bruke den til mitt formål. mening, hvordan definerer jeg forholdet eksplisitt (som eksemplet ovenfor). synes det bare tillater meg å tegne en graf bare for betinget forhold .. vel, jeg kunne definere forholdet med tilstand, men er det ikke ' noe enklere? og et problem til, jeg lekte med det litt, og jeg kunne ikke finne en måte å endre skriftstørrelsen på etikettene på. Jeg vil kopiere grafen til ord, og etikettene må være lesbare, og ikke så små.
  • Hvis du spesifiserer forholdet mellom noder eksplisitt ikke ' t er det bare en graf, så?
  • I ' Beklager, jeg ' er ny i Mathematica. Alt som vil se ut som en graf av beskrivelsen min, vil være bra. Jeg trenger ikke ' å gjøre beregninger på det. Men jeg har mange grafer å tegne, og jeg håpet det er en dedikert funksjon for mine behov. hvis du har en annen løsning, er du velkommen til å gi meg beskjed .. men husk at jeg ' er ny i Mathematica, så jeg ' Jeg er ikke kjent med mange av de grunnleggende metodene i programmet.
  • Velkommen til Mathematica Stack Exchange RB14, jeg vil legge ut et svar om kort tid (vel … etter lunsj :-))

Svar

I versjoner 10+ kan vi komponere TransitiveReductionGraph og RelationGraph for å få en Hasse-diagramfunksjon med tar de samme argumentene og alternativene som RelationGraph:

ClearAll[hasseF] hasseF = TransitiveReductionGraph @* RelationGraph 

Eksempler:

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

skriv inn bildebeskrivelse her

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

skriv inn bildebeskrivelse her

Svar

Jeg synes det du vil er veldig enkelt (også bemerket av @ SjoerdC.deVries i kommentaren):

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

skriv inn bildebeskrivelse her

Hvis du derimot vil utforske fullverdige Hasse-diagrammer, er koden du koblet til en god start. Demonstrations Project har noen få relevante eksempler – det er alltid en god ide å søke der.

Digging dypere, Mathematica innebygd Combinatorica pakken har HasseDiagram pakke. Ta en titt på dette eksemplet fra Dokumentasjon krever

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

skriv inn bildebeskrivelse her

For enda dypere funksjonalitet kan det være lurt å kontakte forfattere av denne artikkelen:

«En Mathematica-pakke for å takle delvis bestilte sett» , P. Codara

eller få denne boka:

«Computational Discrete Mathematics: Combinatorics and Graph Theory with Mathematica» , Sriram Pemmaraju, Steven Skiena

Kommentarer

  • Hvis spørgeren vil ha et ekte Hasse-diagram, vil han sikkert ha en automatisk måte å beregne transitiv reduksjon av den dirigerte grafen generert av den binære relasjonen. Pilene skal rettes, synes jeg, og pilen mellom 1 og 3 skal ikke ' ikke være der.
  • @JOwen Vet du hvorfor standard representasjon da er ikke regissert? alturl.com/jribp
  • Jeg ' er ikke sikker, men jeg tror det er retningsbestemt informasjon i kantene.Det står i lenken du la ut at man skulle tegne " et linjestykke eller en kurve som går oppover [kursiv i originalen] fra x til y når y dekker x (det vil si når som helst x < y og det er ingen z slik at x < z < y) "

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *