Ik “zoek naar een manier om een Hasse-diagram te maken op basis van een bepaald deel order binaire relatie. De relatie zal expliciet worden gegeven, bijvoorbeeld: Hasse[{{1,2},{2,3},{1,3}}], en de output zal de corresponderende grafiek zijn.

Ik heb gegoogeld voor een oplossing , en ik heb wel een oplossing gevonden, maar ik snapte niet hoe ik die moest gebruiken .. hier wat ik heb gevonden.

Als er een manier is om een Hasse-diagram te genereren voor een voorwaardelijke deelbestellingsset, en voor een niet-eindige relatie (in dit geval ben ik natuurlijk alleen geïnteresseerd in een diagram bij benadering), dan hoor ik dat graag ook.

Opmerkingen

  • Welk deel van de code waarnaar je verwees, ' begrijp je niet?
  • Nou, ik ' begreep niet hoe ik het voor mijn doel moest gebruiken. wat betekent, hoe definieer ik de relatie expliciet (zoals in het voorbeeld hierboven). het lijkt erop dat het alleen mij toestaat om alleen een grafiek te tekenen voor een voorwaardelijke relatie .. nou, ik zou de relatie met conditie kunnen definiëren, maar is niet ' is er iets eenvoudiger? en nog een probleem, ik speelde er een beetje mee, en ik kon geen manier vinden om de lettergrootte van de labels te veranderen. Ik wil de grafiek naar een woord kopiëren en de labels moeten leesbaar zijn, en niet zo klein.
  • Als je de relaties tussen de knooppunten expliciet specificeert isn ' is het dan maar een grafiek?
  • I ' m sorry, ik ' m nieuw bij Mathematica. Alles dat eruitziet als een grafiek van mijn beschrijving, zou in orde zijn. Ik hoef ' er geen berekeningen op uit te voeren. Maar ik moet veel grafieken tekenen en ik hoopte dat er een speciale functie voor mijn behoeften zou zijn. als je een andere oplossing hebt, laat het me dan gerust weten .. maar onthoud dat ik ' nieuw ben bij Mathematica, dus ik ' ben niet bekend met veel van de basismethoden van het programma.
  • Welkom bij Mathematica Stack Exchange RB14, ik zal binnenkort een antwoord plaatsen (nou ja … na de lunch :-))

Antwoord

In versies 10+ kunnen we TransitiveReductionGraph en RelationGraph om een Hasse-diagramfunctie te krijgen met dezelfde argumenten en opties als RelationGraph:

ClearAll[hasseF] hasseF = TransitiveReductionGraph @* RelationGraph 

Voorbeelden:

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

voer de afbeeldingsbeschrijving hier in

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

voer hier een afbeeldingsbeschrijving in

Antwoord

Ik denk dat wat je wilt eigenlijk heel eenvoudig is (ook opgemerkt door @ SjoerdC.deVries in zijn commentaar):

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

voer de beschrijving van de afbeelding hier in

Als je daarentegen “volledige Hasse-diagrammen wilt verkennen, is de code waarnaar je hebt gelinkt een goede start. Ook het demonstratieproject heeft een paar relevante voorbeelden – het is altijd een goed idee om daar te zoeken.

Dieper graven, Mathematica gebouwd in Combinatorica pakket heeft HasseDiagram pakket. Bekijk dit voorbeeld van documentatie vereist

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

voer de beschrijving van de afbeelding hier in

Voor nog diepere functionaliteit kunt u contact opnemen met auteurs van dit artikel:

“Een Mathematica-pakket voor gedeeltelijk geordende sets” , P. Codara

of download dit boek:

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

Reacties

  • Als de vragensteller een echt Hasse-diagram wil, wil hij zeker een automatische manier om te berekenen de transitieve reductie van de gerichte graaf gegenereerd door de binaire relatie. De pijlen moeten gericht zijn, denk ik, en de pijl tussen 1 en 3 mag er niet ' zijn.
  • @JOwen Weet je waarom de standaardweergave dan is niet geregisseerd? alturl.com/jribp
  • Ik ' ben niet zeker, maar ik denk dat er een richting is informatie in de randen.Er staat in de link die je hebt gepost dat je " een lijnstuk of curve moet tekenen die omhoog gaat [cursief in het origineel] van x naar y telkens wanneer y x bedekt (dat wil zeggen, wanneer x < y en er is geen z zodat x < z < y) "

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *