Azt keresem, hogyan hozhatok létre egy Hasse-diagramot egy adott részből bináris reláció rendezése. A relációt kifejezetten megadjuk, például: Hasse[{{1,2},{2,3},{1,3}}], és a kimenet lesz a megfelelő grafikon.

I google-ba kerestem egy megoldást , és találtam valami megoldást, de nem értettem, hogyan kell használni. itt “, amit találtam.

Ha van mód Hasse-diagram előállítására egy feltételes részparancs-halmazhoz és egy nem véges relációhoz (természetesen ebben az esetben engem csak egy közelítő diagram érdekel), akkor szívesen hallanék róla szintén.

Megjegyzések

  • A kód melyik részére hivatkoztál, nem értettél ' t?
  • Nos, nem értettem ', hogy hogyan tudom felhasználni a célomhoz. Ez azt jelenti, hogyan határozzam meg kifejezetten a kapcsolatot (mint a fenti példa). úgy tűnik, csak nekem engedi meg gráfot csak a feltételes relációhoz rajzolni .. Nos, meghatározhatnám a feltételt a feltételhez, de nincs ' t valami egyszerűbb? és még egy probléma, játszottam vele egy kicsit, és nem találtam módot a címkék betűméretének megváltoztatására. Szeretném másolni a grafikont szóvá, és a címkéknek olvashatóknak kell lenniük, és nem olyan kicsieknek. / li>
  • Ha a csomópontok közötti kapcsolatokat kifejezetten nem ' t, akkor ez csak egy grafikon?
  • I ' sajnálom, én ' új vagyok a Mathematica számára. Minden, ami a leírásom grafikonjának látszana, rendben van. Nem szükséges, hogy ' számításokat végezzek rajta. De sok grafikont kell készítenem, és reméltem, hogy van egy külön funkció az igényeimhez. ha van más megoldásod, nyugodtan tudasd velem .. de ne felejtsd el, hogy én ' új vagyok a Mathematica számára, ezért ' nem ismerem a program sok alapvető módszerét.
  • Üdvözöljük a Mathematica Stack Exchange RB14-ben, hamarosan (jó … ebéd után :-)) felteszek egy választ

Válasz

A 10+ verziókban összeállíthatjuk a TransitiveReductionGraph és RelationGraph a Hasse-diagram függvény megszerzéséhez ugyanazokat az argumentumokat és opciókat veszi igénybe, mint a RelationGraph:

ClearAll[hasseF] hasseF = TransitiveReductionGraph @* RelationGraph 

Példák:

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

írja ide a kép leírását

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

írja ide a kép leírását

Válasz

Úgy gondolom, hogy amit akarsz, valójában nagyon egyszerű (ezt @ SjoerdC.deVries megjegyezte is megjegyzésében):

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

írja ide a kép leírását

Ha viszont a teljes funkcionalitású Hasse Diagramokat szeretné felfedezni, akkor a kód, amelyhez linkelt, jó kezdet. A demonstrációs projektnek is van néhány releváns példája – ez mindig jó ötlet ott keresni.

Mélyebbre ásva a Combinatorica csomagba beépített Mathematica HasseDiagram csomagot tartalmaz. Vessen egy pillantást a erre a példára a Dokumentációból / p>

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

ide írja be a kép leírását

A még mélyebb funkcionalitásért érdemes kapcsolatba lépnie a cikk szerzői:

“Mathematica csomag a részben rendezett készletek kezeléséhez” , P. Codara

vagy szerezd be ezt a könyvet:

“Számítási diszkrét matematika: kombinatorika és grafikonelmélet a Mathematicával” , Sriram Pemmaraju, Steven Skiena

Megjegyzések

  • Ha a kérdező egy igazi Hasse-diagramra vágyik, akkor biztosan automatikus számítási módot szeretne a bináris reláció által generált irányított gráf transzitív redukciója . Azt hiszem, a nyilaknak irányítaniuk kell, és az 1 és 3 közötti nyílnak ' nem szabad ott lennie.
  • @JOwen nem rendezett? alturl.com/jribp
  • Nem vagyok biztos benne, de szerintem van irány információk a széleken.Azt írja az Ön által közzétett linken, hogy meg kell rajzolni " egy vonalszakaszt vagy görbét, amely felfelé halad [az eredetiben dőlt betűvel] x-től y-ig, amikor y fedi az x-et (vagyis amikor x < y, és nincs olyan z, hogy x < z < y) "

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük